通过Rancher pipeline实现服务的自动构建部署
目录
- 1.项目配置
- 1.1 .rancher-pipeline.yml
- 1.2 deployment.yaml
- 1.3 Dockerfile
- 1.4 settings.xml
- 2.Rancher配置流水线
- 2.1 登录Rancher
- 2.2 设置代码库
- 2.3 编辑配置
- 2.4 通知
- 2.4.1 添加通知
- 2.4.2 添加通知
- 2.4.3 启用通知
- 2.4.4 样例
- 3.运行流水线
- 3.1 运行
- 3.2 流水线运行
- 3.3 流水线执行完毕
1.项目配置
项目根目录(与pom.xml同级)需要增加四个文件(.rancher-pipeline.yml、deployment.yaml、Dockerfile、settings.xml)
TODO内容需要根据项目进行更改:
1.1 .rancher-pipeline.yml
1 stages: 2 - name: bulid 3 steps: 4 - runScriptConfig: 5 image: maven:3.6.0-jdk-alpine 6 shellScript: |- 7 LOG_TAG="CHIP-INFO" 8 MVN_SETTINGS_PATH="/root/.m2" 9 if [ -d "${MVN_SETTINGS_PATH}" ];then 10 mv ./settings.xml ${MVN_SETTINGS_PATH} 11 if [ $? -eq 0 ];then 12 echo "[$LOG_TAG]Copy settings.xml to ${MVN_SETTINGS_PATH} success!" 13 else 14 echo "[$LOG_TAG]Copy settings.xml to ${MVN_SETTINGS_PATH} fail!" 15 fi 16 else 17 mkdir -p ${MVN_SETTINGS_PATH} && mv ./settings.xml ${MVN_SETTINGS_PATH} 18 echo "[$LOG_TAG]Create path:${MVN_SETTINGS_PATH} and copy settings.xml to ${MVN_SETTINGS_PATH}!" 19 fi 20 echo "[$LOG_TAG]Current pwd:`pwd`" 21 ls -l 22 echo "[$LOG_TAG]===========Execute Maven CMD Build Project Start===========" 23 mvn clean package -Dmaven.test.skip=true 24 echo "[$LOG_TAG]===========Execute Maven CMD Build Project End===========" 25 echo "[$LOG_TAG]Dir:target ls -l:`pwd`" 26 ls -l ./target 27 - name: publish 28 steps: 29 - publishImageConfig: 30 dockerfilePath: ./Dockerfile 31 buildContext: . 32 tag: 172.18.0.117:31134/zkxy-config:${CICD_EXECUTION_SEQUENCE} #TODO:zkxy-config改为配置的镜像名称 33 pushRemote: true 34 registry: 172.18.0.117:31134 #Docker私仓地址 35 env: 36 PLUGIN_DEBUG: "true" 37 PLUGIN_INSECURE: "true" 38 - name: deploy 39 steps: 40 - applyYamlConfig: 41 path: ./deployment.yaml 42 timeout: 60 43 notification: {}
1.2 deployment.yaml
1 kind: Service 2 apiVersion: v1 3 metadata: 4 name: zkxy-config #TODO:zkxy-config改为服务名称 5 spec: 6 selector: 7 app: zkxy-config #TODO:zkxy-config改为服务名称 8 type: NodePort 9 ports: 10 - protocol: TCP 11 port: 33002 #port是k8s集群内部访问service的端口,即通过clusterIP:port可以访问到某个service 12 targetPort: 32002 #容器的端口(最根本的端口),与制作容器时暴露的端口一致(DockerFile中EXPOSE) 13 nodePort: 32002 #nodePort是外部访问k8s集群中service的端口,通过nodeIP:nodePort可以从外部访问到某个service;有效端口范围:30000-32767;有效端口范围:30000-32767 14 apiVersion: apps/v1 15 kind: Deployment 16 metadata: 17 name: zkxy-config #TODO:zkxy-config改为服务名称 18 labels: 19 app: zkxy-config #TODO:zkxy-config改为服务名称 20 spec: 21 replicas: 1 22 selector: 23 matchLabels: 24 app: zkxy-config #TODO:zkxy-config改为服务名称 25 template: 26 metadata: 27 labels: 28 app: zkxy-config #TODO:zkxy-config改为服务名称 29 spec: 30 imagePullSecrets: 31 - name: private-repository 32 containers: 33 - name: zkxy-config #TODO:pod的名称,必须字段,名称唯一且对象创建后不可以被修改 34 #image: 172.18.0.116:31134/zkxy-config:latest #TODO:镜像仓库的路径/镜像的名称:镜像的标签 35 image: ${CICD_IMAGE}:${CICD_EXECUTION_SEQUENCE} #TODO:镜像仓库的路径/镜像的名称:镜像的标签,https://docs.rancher.cn/docs/rancher2/k8s-in-rancher/pipelines/example/_index#%E6%B5%81%E6%B0%B4%E7%BA%BF%E5%8F%98%E9%87%8F%E6%9B%BF%E6%8D%A2%E5%88%97%E8%A1%A8 36 imagePullPolicy: Always #Always(总是去仓库下载),Never(从不去仓库下载),IfNotPresent(如果本地没有就去仓库下载),默认是"IfNotPresent" 37 ports: 38 - containerPort: 32002 #TODO:containerPort是pod内部容器的端口,targetPort映射到containerPort;例如,mysql服务需要暴露3306端口,redis暴露6379端口
1.3 Dockerfile
Dockerfile的配置跟Jenkins中配置脚本时一样,根据项目信息进行配置,包括jar包名称和服务端口:
1 FROM java:8-jre 2 MAINTAINER zouxd@chip-cloud.com 3 ADD target/zkxy-config-0.0.1-SNAPSHOT.jar /zkxy-config-0.0.1-SNAPSHOT.jar 4 EXPOSE 32002 5 ENTRYPOINT ["/usr/bin/java","-jar","zkxy-config-0.0.1-SNAPSHOT.jar"]
1.4 settings.xml
settings.xml主要设置jenkins构建项目时Maven插件的配置信息。在 .rancher-pipeline.yml的build阶段会用到该文件。
2.Rancher配置流水线
2.1 登录Rancher
2.2 设置代码库
点击设置代码库,配置gitlab登录账户,拉取gitlab账户相关项目,设置成功后,相关项目出现在流水线中:
2.3 编辑配置
"编辑配置"想要自动构建的流水线:
选择想要自动构建的分支,点击"完成",弹出选择“仅下载流水线配置”,点击“确定”。
2.4 通知
2.4.1 添加通知
选择集群,进入通知页面
2.4.2 添加通知
2.4.3 启用通知
设置流水线中选择启用通知,根据需要进行配置即可:
2.4.4 样例
3.运行流水线
3.1 运行
选中部署的流水线,点击“运行”,弹窗选择想要的部署分支,点击“运行”,启动流水线自动部署:
3.2 流水线运行
启动流水线运行,等待执行完成,此处编译部署需要较长时间:
3.3 流水线执行完毕
流水线执行完毕,会在相应的pipline命名空间下部署该应用: