cnetos7.5+docker17.03.x+rancher2.1.x从集群搭建到Pipeline部署完整教程[实践02]

Rancher 2.1针对CI/CD进行了新的升级,带来了更好用的pipeline,这篇文章针对Rancher 2.1版本,讲解如何使用Rancher pipeline来做SpringBoot工程的CI/CD.

演示代码工程准备

首先创建一个SpringBoot的demo工程,push到github上(演示代码工程地址:http://192.168.0.253:80/elson/test-demo.git)。

Rancher设置代码库

首先需要设置代码仓库的认证,使用Gitlab需要创建自己的app,获取Client ID和Client Secret.

Gitlab版本需要在9以上,授权账号必须是项目的Maintainer(GitLab 8 里面是master),在GitLab中创建application,callbackurl在Rancher上复制。

d79fb62df1382517c9d95eec01b497bcd57.jpg

在流水线模块选择设置代码库,选择认证&同步代码库,填入申请的Client ID和Client Secret.

 

配置完成后启用并显示仓库列表:

7abfcf93ed7115bf7ce09b442a3d31dad48.jpg

配置镜像仓库:(这里我使用阿里云镜像服务)

e263ad9ede89ddb31988a7537375b3bd8cd.jpg

启用你需要做CI/CD的代码库

9d147c3c57caada6373c7b64a1e5f8ec6d5.jpg

部署流水线配置

选择一个项目,点击“编辑配置”。

62ef30b7131cf56eaed108f1b699517fcf8.jpg

 

a10d7cb1bf60a7c774bff1ee1970d862c08.jpg

添加compile阶段

编辑步骤,使用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>

36c03e61fb2d427f48f345b4073fee4ae6f.jpg

添加publish阶段

编辑步骤,将maven打包得到得可执行jar包,构建为docker镜像

这一步主要是用build构建后的包,根据代码中的Dockerfile打包成镜像,当前目录依然是git clone后的目录,指定Dockerfile的相对位置,并命名打包后的惊醒名,其中镜像名中的:${CICD_EXECUTION_SEQUENCE}是rancher提供的变量,我用这个来区分镜像的版本,有好几个,具体大家输入后去选择,也可以查看官方的文档。

镜像名称:soben/test-demo:v${CICD_EXECUTION_SEQUENCE}

镜像库:registry.cn-shenzhen.aliyuncs.com

3c329d441b867b85e6bcf8d5afaf2c19205.jpg

下面讲下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"]

然后推送到镜像仓库,这里使用了阿里云镜像仓库。

添加deploy阶段

编辑步骤,部署刚刚构建好的镜像。

YAML路径: ./deployment.yaml

069d1e7b8f9bc0c798f612d8ddd67592d94.jpg

使用的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

5a87cb76c9768fa9c8d7e36d0472933dc0a.jpg

从rancher的面板上看就是如下图所示:

833a9fda95956b026b70cc6de2ab900f44c.jpg

发起流水线流程完成的截图:

8b4c1f0a89220e6d87a815714825091158c.jpg

最后记得在gitlab以root登录设置里面设置钩子,这样修改代码才会让rancher流水线自动执行。

 

7f71dd89dfbe60a76c95097a54b9d7c0f62.jpg

转载于:https://my.oschina.net/u/593517/blog/3011521

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值