使用gitlab的ci/cd自动将应用部署到rancher中
2020-02-29 19:22
411 查看
使用gitlab的ci/cd自动将应用部署到rancher中
- 本文主要介绍如何使用gitlab的ci/cd自动发布应用到rancher
- rancher 2.0的安装,[请参考官方文档](https://rancher.com/docs/rancher/v2.x/en/)
- 获取rancher集群下某个项目的id
- 创建一个key用于登录到rancher集群中
- 获取rancher里面集群的地址
本文主要介绍如何使用gitlab的ci/cd自动发布应用到rancher
rancher 2.0的安装,请参考官方文档
本文中使用的rancher版本必须是2.0以上, 需要获取集群下某个项目的id, 用户的token,集群的地址三个参数。
获取rancher集群下某个项目的id
创建一个key用于登录到rancher集群中
获取rancher里面集群的地址
Gitlab 的runner的安装,请自行解决
下面讲述两种方式部署,任选一种即可
前置说明
本文介绍的应用项目均为java应用,使用maven作为依赖管理,构建镜像使用的是com.google.cloud.tools插件通过maven命令自动构建镜像到远程镜像仓库,
pom.xml文件的jib-maven-plugin插件配置
<plugin> <groupId>com.google.cloud.tools</groupId> <artifactId>jib-maven-plugin</artifactId> <version>1.0.1</version> <configuration> <from> <image>来源镜像,基于哪个镜像打包,比如JDK8</image> </from> <to> <!-- 构建的镜像名称含私有仓库的地址,后续需要这个镜像名称,一般tag建议使用gitlab的CI_PIPELINE_ID作为镜像的tag,方便后续的处理 --> <image>127.0.0.1:4000/demo/demo:${image_tag}</image> <auth> <!-- 私有镜像仓库的用户名和密码 --> <username>${registry_username}</username> <password>${registry_password}</password> </auth> </to> <allowInsecureRegistries>true</allowInsecureRegistries> <container> <jvmFlags> <jvmFlag>-Djava.security.edg=file:/dev/./urandom</jvmFlag> </jvmFlags> </container> </configuration> </plugin>
1. 使用rancher下载下来的deployment.yaml文件部署
此方式当服务不存在的时候会创建一个新的服务,服务的配置均从.yaml部署文件中配置,每次ci/cd的时候都是重新部署,方便在其他集群快速部署,不方便的地方是在rancher里修改了配置还要同步修改代码里面的配置文件
从rancher中下载指定项目的deployment.yaml文件, 命名为deployment.yaml
修改下载后的文件内容,更改其中的image:为上述pom.xml里面配置的image的参数 127.0.0.1:4000/demo/demo:${image_tag}
将此文件拷贝至项目和.gitlab-ci.yml文件同一目录
.gitlab.ci.yml文件
image: registry.cn-hangzhou.aliyuncs.com/choerodon-tools/cibase:0.8.0 variables: MAVEN_OPTS: -Dmaven.repo.local=/cache stages: - build - deploy build: stage: build script: - build_image deploy: stage: deploy image: jonaskello/rancher-cli-k8s:v2.0.4 script: - deploy_image .auto_devops: &auto_devops | function build_image(){ mvn compile jib:build \ -Dimage_tag=$CI_PIPELINE_ID \ -Dregistry_username=docker私库的用户名 \ -Dregistry_password=docker私库的密码 } function deploy_image(){ echo yes | rancher login rancher集群的地址 -t rancher的token --context 集群项目的id sed -i 's^${image_tag}^'"$CI_PIPELINE_ID^g" "./deployment.yaml" rancher kubectl --namespace=项目在rancher的命名空间 apply -f ./deployment.yaml } before_script: - *auto_devops
里面的参数均在上面获取到了,其中deployment.yaml为上述从rancher下载的文件。
2. 直接替换已部署服务的镜像
此方式自动构建的前提是rancher中必须存在对应的服务,然后通过kubectl命令直接替换镜像,优点是可以在rancher中配置每个服务的具体信息,每次都是更换镜像名称,缺点是,服务必须先在rancher中创建好。
编写.gitlab-ci.yml
image: registry.cn-hangzhou.aliyuncs.com/choerodon-tools/cibase:0.8.0 variables: MAVEN_OPTS: -Dmaven.repo.local=/cache stages: - build - deploy build: stage: build script: - build_image deploy: stage: deploy image: jonaskello/rancher-cli-k8s:v2.0.4 script: - deploy_image .auto_devops: &auto_devops | function build_image(){ mvn compile jib:build \ -Dimage_tag=$CI_PIPELINE_ID \ -Dregistry_username=docker私库的用户名 \ -Dregistry_password=docker私库的密码 } function deploy_image(){ echo yes | rancher login rancher集群的地址 -t rancher的token --context 集群项目的id rancher kubectl set image deployment/rancher中的服务名 *=127.0.0.1:4000/demo/demo:$CI_PIPELINE_ID --all } before_script: - *auto_devops
里面的参数均在上面获取到了,原理就是动态的替换服务的镜像
转载请标注转载出处为:https://blog.csdn.net/qq_28700667/article/details/93080907
- 点赞 2
- 收藏
- 分享
- 文章举报
相关文章推荐
- .Net Core自动化部署系列(三):使用GitLab CI/CD 自动部署Api到Docker
- 如何使用GitLab和Rancher构建CI/CD流水线–Part 1
- 如何使用GitLab和Rancher构建CI/CD流水线 – Part 2
- 如何使用GitLab和Rancher构建CI/CD流水线 – Part 2
- 如何使用GitLab和Rancher构建CI/CD流水线–Part 1
- 如何使用GitLab和Rancher构建CI/CD流水线
- 使用gitlab+jenkins+saltstack+rsync自动部署Web应用
- Docker实践-使用maven插件自动部署web应用至Docker容器的tomcat
- 使用Maven自动部署Java Web应用到Tomcat服务器
- CI/CD之Gitlab集成Jenkins多分支pipeline实现质量检测和自动发布
- Gitlab部署CI并使用.gitlab-ci.yml配置您的作业(中文翻译)
- 使用Jenkins自动部署nodejs应用 (转载)
- KubeSphere CI/CD GitLab Harbor将Spring Boot项目部署至Kubernetes
- 使用travis-ci自动部署github上的项目
- 基于Jenkins+Gitlab+Harbor+Rancher架构的CI/CD实现
- python自动部署:修改.gitlab-ci.yml文件
- 使用Maven自动部署Java Web应用到Tomcat服务器
- 使用travis-ci自动部署github上的项目
- 使用Jenkins自动部署nodejs应用
- Gitlab CI 自动部署 asp.net core web api 到Docker容器