cnetos7.5+docker17.03.x+rancher2.1.x從集羣搭建到Pipeline部署完整教程[實踐02]

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

Rancher設置代碼庫

首先須要設置代碼倉庫的認證,使用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

 

添加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>

添加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

下面講下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

使用的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流水線自動執行。

 

相關文章
相關標籤/搜索