Jenkis maven構建項目實踐

在完成前文的pipeline項目構建和更新以後,本文咱們來測試maven項目的構建自動發佈。具體環境要求以下:node

一、docker私有倉庫(本例中使用vmware企業級產品harbor)
二、jenkins插件Publish Over SSH安裝完成
三、Jenkins Slave Pod中須要有Docker環境(由於post step1中須要將war文件打包到docker鏡像中,所以Jenkins Slave須要有Docker環境,本例中採用在雲環境pod模板中添加hostpath掛載的方式實現)
四、項目代碼中須要包含以下文件
Dockerfile(用來編譯docker鏡像)
tomcat.yaml(用來初次部署,根據實際狀況包含deployment、service、ingress、pv\pvc等)
rolling-update.sh(用來滾動更新)git

一、Dockerfileweb

FROM  harbor.59iedu.com/fjhb/tomcat_base:v1.0
MAINTAINER ylw "ylw@fjhb.cn"
RUN  rm -rf  /home/tomcat/webapps/*
COPY target/*.war /home/tomcat/webapps/ROOT/
RUN  cd /home/tomcat/webapps/ROOT/ && jar -xvf *.war && rm -rf *.war

harbor.59iedu.com/fjhb/tomcat_base:v1.0 鏡像的dockerfile請參考前文:
https://blog.51cto.com/ylw6006/2107307docker

二、tomcat.yamlshell

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: tomcat-jcsj
  namespace: default
spec:
  replicas: 2
  template:
    metadata:
      labels:
        k8s-app: tomcat-jcsj
    spec:
      containers:
      - image: harbor.59iedu.com/fjhb/jcsj:vBUILD_NUMBER
        name : tomcat-jcsj
        imagePullPolicy: Always
        ports:
        - containerPort: 8080
        volumeMounts:
        - name: app-logs
          mountPath: /home/tomcat/logs
      - image: harbor.59iedu.com/fjhb/filebeat:v1.0
        name: filebeat
        imagePullPolicy: Always
        volumeMounts:
        - name: app-logs
          mountPath: /log
      volumes:
      - name: app-logs
        emptyDir: {}
      imagePullSecrets:
        - name: harborsecret
---
apiVersion: v1
kind: Service
metadata:
  name: tomcat-jcsj
  labels:
    k8s-app: tomcat-jcsj
spec:
  type: NodePort
  ports:
  - port: 8080
    protocol: TCP
    targetPort: 8080
    name: http
    nodePort: 8480
  selector:
    k8s-app: tomcat-jcsj

三、rolling-update.shapi

#!/bin/sh
NAMESPACE=default
DEPLOYMENT=tomcat-jcsj
REGISTRY=harbor.59iedu.com/fjhb/jcsj
FILE=tomcat.yaml
BUILD_NUMBER=1
STATUS=$(kubectl get deployment -n $NAMESPACE |grep $DEPLOYMENT |wc -l)

if [  $STATUS -eq 0 ];then
   kubectl create -f $FILE
   else
   kubectl set image deployment/$DEPLOYMENT $DEPLOYMENT=$REGISTRY:v$BUILD_NUMBER --namespace=$NAMESPACE
fi

1、系統設置

一、添加k8s master的ssh認證信息
Jenkis maven構建項目實踐
點擊「jenkins」 —— 「系統管理」—— 「系統設置」——「Publish over SSH」
輸入主機的名稱、ip地址及用戶名,點擊「高級」,在「passphrase/password」欄輸入密碼,點擊下方的「Test Configuration」測試鏈接,當出現「Success」提示時說明鏈接成功。tomcat

Jenkis maven構建項目實踐

二、在雲環境的pod模板中添加docker環境
Jenkis maven構建項目實踐app

2、建立任務

點擊「jenkins」 ——「新建」 ——「構建一個maven項目」,輸入項目的名稱,點擊「OK」
Jenkis maven構建項目實踐ssh

3、General配置

Jenkis maven構建項目實踐
勾選「Restrict where this project can ben run」,輸入前面建立kubernetes環境時配置好的容器模板名稱jenkins-slave。這樣在運行構建任務的時候會k8s集羣自動啓動一個slave pod進行構建工做,構建工做完成後自動銷燬podwebapp

4、源碼管理配置

Jenkis maven構建項目實踐
一、能夠選擇git或者svn進行源碼管理,若是沒有出現這兩個按鈕,須要去安裝相應的插件
二、點擊credentials欄的add按鈕能夠添加svn帳號信息,選擇類型爲「username with password

三、checkout strategy選擇「use svn update as much as possible」

5、構建觸發器配置

Jenkis maven構建項目實踐
在構建觸發器配置中選擇「build wheneven a snapshot dependency is built」

6、Pre Steps配置

Jenkis maven構建項目實踐
Root POM框輸入pom.xml
Goals and options框輸入clean compile package

7、Post Steps配置1

Jenkis maven構建項目實踐
點擊「add post-build step」——「execute shell」——「run only if build susseeds」
shell腳本內容以下:

IMAGE_NAME="harbor.59iedu.com/fjhb/jcsj:v$BUILD_NUMBER"
CONATINER_NAME="jcsj-dev"
echo "192.168.1.227 harbor.59iedu.com" >> /etc/hosts
cd /home/jenkins/workspace/maven-test/
sed -i  "s/BUILD_NUMBER/$BUILD_NUMBER/g" tomcat.yaml
sed -i  "s/BUILD_NUMBER=1/BUILD_NUMBER=$BUILD_NUMBER/g" rolling-update.sh
docker login harbor.59iedu.com -u admin -p Harbor12345
docker build -t $IMAGE_NAME .
docker push $IMAGE_NAME

上述腳本的做用是將前面編譯好的war包build成鏡像文件並推送到倉庫,並完成部署文件和自動更新文件中的鏡像版本號修改。

8、Post Steps配置2

Jenkis maven構建項目實踐

點擊「add post-build step」——「Send files or execute command over SSH」
一、Name框選擇前面建立好的k8s master節點vm1
二、Source files 框輸入tomcat.yaml, rolling-update.sh
三、Exec command框輸入sh rolling-update.sh

9、構建與發佈測試

一、構建前
Jenkis maven構建項目實踐
二、構建中
Jenkis maven構建項目實踐
Jenkis maven構建項目實踐
Jenkis maven構建項目實踐
三、構建完成
Jenkis maven構建項目實踐
Jenkis maven構建項目實踐
四、測試與驗證
Jenkis maven構建項目實踐
Jenkis maven構建項目實踐

相關文章
相關標籤/搜索