Rancher 2.1针对CI/CD进行了新的升级,带来了更好用的pipeline,这篇文章针对Rancher 2.1版本,讲解如何使用Rancher pipeline来作SpringBoot工程的CI/CD.java
首先建立一个SpringBoot的demo工程,push到github上(演示代码工程地址:http://192.168.0.253:80/elson/test-demo.git)。node
首先须要设置代码仓库的认证,使用Gitlab须要建立本身的app,获取Client ID和Client Secret.git
Gitlab版本须要在9以上,受权帐号必须是项目的Maintainer(GitLab 8 里面是master),在GitLab中建立application,callbackurl在Rancher上复制。github
在流水线模块选择设置代码库,选择认证&同步代码库,填入申请的Client ID和Client Secret.docker
配置完成后启用并显示仓库列表:api
配置镜像仓库:(这里我使用阿里云镜像服务)app
启用你须要作CI/CD的代码库maven
部署流水线配置gitlab
选择一个项目,点击“编辑配置”。ui
编辑步骤,使用maven镜像做为编译阶段的基础镜像。使用mvn clean package命令编译打包SpringBoot工程。
基础镜像:maven:3.6.0-jdk-8-alpine (Custom)
脚本:mvn clean package -Dmaven.test.skip=true (这里的clean会每次去下载基础镜像,因此这样写mvn package)
#POM.XML里面要加入nexus私服地址,为了第二步获取基础镜像加速 <!-- 同步maven仓库 --> <repositories> <repository> <id>nexus</id> <name>nexus</name> <url>http://192.168.0.254:8081/repository/maven-public/</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>true</enabled> </snapshots> </repository> </repositories> <pluginRepositories> <pluginRepository> <id>nexus</id> <name>nexus</name> <url>http://192.168.0.254:8081/repository/maven-public/</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>true</enabled> </snapshots> </pluginRepository> </pluginRepositories>
编辑步骤,将maven打包获得得可执行jar包,构建为docker镜像
这一步主要是用build构建后的包,根据代码中的Dockerfile打包成镜像,当前目录依然是git clone后的目录,指定Dockerfile的相对位置,并命名打包后的惊醒名,其中镜像名中的:${CICD_EXECUTION_SEQUENCE}是rancher提供的变量,我用这个来区分镜像的版本,有好几个,具体你们输入后去选择,也能够查看官方的文档。
镜像名称:soben/test-demo:v${CICD_EXECUTION_SEQUENCE}
镜像库:registry.cn-shenzhen.aliyuncs.com
下面讲下Dockerfile的配置:
# 基于java:8镜像进行扩展 FROM java:8 ADD target/demo-0.0.1-SNAPSHOT.jar /app/app.jar WORKDIR /app/ EXPOSE 8080 ENTRYPOINT ["java","-jar","app.jar"]
而后推送到镜像仓库,这里使用了阿里云镜像仓库。
编辑步骤,部署刚刚构建好的镜像。
YAML路径: ./deployment.yaml
使用的deployment.yml以下:
apiVersion: apps/v1beta2 kind: Deployment metadata: name: test-demo labels: app: test-demo spec: replicas: 2 selector: matchLabels: tier: test-demo matchExpressions: - {key: tier, operator: In, values: [test-demo]} strategy: rollingUpdate: maxSurge: 1 maxUnavailable: 1 template: metadata: labels: app: test-demo tier: test-demo spec: containers: - name: test-demo image: registry.cn-shenzhen.aliyuncs.com/soben/test-demo:v${CICD_EXECUTION_SEQUENCE} imagePullPolicy: Always ports: - name: http containerPort: 8080 --- apiVersion: v1 kind: Service metadata: name: test-demo-nodeport spec: # 服务若是想被外部调用,必须配置type. type: NodePort ports: - port: 8080 name: test-demo-port selector: tier: test-demo
rancher的pileline会在代码工程里建立对应的配置文件.rancher-pipeline.yml
从rancher的面板上看就是以下图所示:
发起流水线流程完成的截图:
最后记得在gitlab以root登陆设置里面设置钩子,这样修改代码才会让rancher流水线自动执行。