# **盤點系統 - Jenkins Pipeline(Kubernetes架構)** ## **1. 登入 Jenkins** **以瀏覽器鍵入 http://10.10.0.51:8080** > **新增作業** 選單路徑 : Dashboard -> 新增作業 ![](https://i.imgur.com/EjqqDTG.png) <br> ## **2. AssetsAPI Pipeline** ### **Pipeline script** ```bash= pipeline { agent { kubernetes { yaml """ apiVersion: v1 kind: Pod metadata: name: jenkins-slave spec: containers: - name: jnlp image: 10.10.0.52:9000/library/dotnet-buildah:latest imagePullPolicy: Always env: - name: JAVA_HOME value: /etc/alternatives/java_sdk_11 - name: LC_ALL value: en_US.UTF-8 - name: LANG value: en_US.UTF-8 - name: LANGUAGE value: en_US.UTF-8 volumeMounts: - name: build mountPath: /build - name: fuse mountPath: /dev/fuse - name: storage01 mountPath: /var/lib/shared - name: storage02 mountPath: /var/lib/containers securityContext: privileged: true volumes: - name: build nfs: path: /Build/assetsapi-build server: 10.10.0.20 - name: fuse hostPath: path: /dev/fuse type: "" - name: storage01 hostPath: path: /var/lib/containers type: DirectoryOrCreate - name: storage02 hostPath: path: /var/lib/jnlp-containers type: DirectoryOrCreate """ } } stages { //1. 拉取代碼 stage('Pull') { steps { echo "Pull ...." checkout([$class: 'GitSCM', branches: [[name: '*/master']], extensions: [], userRemoteConfigs: [[credentialsId: '9251bb32-16b6-40f3-9d31-d9e389ceba4c', url: 'http://10.10.0.52/root/assetsapi.git']]]) } } // 2. 代碼掃瞄 stage('scan code') { steps { script { //引入SonarQubeScanner工具 scannerHome = tool 'sonar-scanner' } //引入SonarQube的服务器环境 withSonarQubeEnv('sonarqube') { sh "${scannerHome}/bin/sonar-scanner" } } } //3. 編譯代碼 stage('Build') { steps { echo "Build ...." sh """ cd ./AssetsAPI dotnet publish -c Release -r linux-x64 /p:PublishSingleFile=true """ } } //4. build micro-service images stage('4. Build micro-service images') { steps { echo "Build images...." sh """ cp -rp -f ./AssetsAPI/bin/Release/netcoreapp3.1/linux-x64/publish /build/AssetsAPI cd /build buildah bud -t assetsapi . buildah tag localhost/assetsapi 10.10.0.52:9000/library/assetsapi:latest buildah login -u admin -p 'ewill1qaz@WSX' --tls-verify=false 10.10.0.52:9000 buildah push --tls-verify=false 10.10.0.52:9000/library/assetsapi:latest """ } } } } ``` ## **3. Inventory Pipeline** ### **Pipeline script** ```bash= pipeline { agent { kubernetes { yaml """ apiVersion: v1 kind: Pod metadata: name: jenkins-slave spec: containers: - name: jnlp image: 10.10.0.52:9000/library/dotnet-buildah:latest imagePullPolicy: Always env: - name: JAVA_HOME value: /etc/alternatives/java_sdk_11 - name: LC_ALL value: en_US.UTF-8 - name: LANG value: en_US.UTF-8 - name: LANGUAGE value: en_US.UTF-8 volumeMounts: - name: build mountPath: /build - name: fuse mountPath: /dev/fuse - name: storage01 mountPath: /var/lib/shared - name: storage02 mountPath: /var/lib/containers securityContext: privileged: true volumes: - name: build nfs: path: /Build/inventory-build server: 10.10.0.20 - name: fuse hostPath: path: /dev/fuse type: "" - name: storage01 hostPath: path: /var/lib/containers type: DirectoryOrCreate - name: storage02 hostPath: path: /var/lib/jnlp-containers type: DirectoryOrCreate """ } } stages { //1. 拉取代碼 stage('Pull') { steps { echo "Pull ...." checkout([$class: 'GitSCM', branches: [[name: '*/master']], extensions: [], userRemoteConfigs: [[credentialsId: '9251bb32-16b6-40f3-9d31-d9e389ceba4c', url: 'http://10.10.0.52/root/inventory.git']]]) } } // 2. 代碼掃瞄 stage('scan code') { steps { script { //引入SonarQubeScanner工具 scannerHome = tool 'sonar-scanner' } //引入SonarQube的服务器环境 withSonarQubeEnv('sonarqube') { sh "${scannerHome}/bin/sonar-scanner" } } } //3. build micro-service images stage('Build micro-service images') { steps { echo "Build images...." sh """ cp -rp -f Inventory_2 /build/Inventory cd /build buildah bud -t inventory . buildah tag localhost/inventory 10.10.0.52:9000/library/inventory:latest buildah login -u admin -p 'ewill1qaz@WSX' --tls-verify=false 10.10.0.52:9000 buildah push --tls-verify=false 10.10.0.52:9000/library/inventory:latest """ } } } } ``` ###### tags: `盤點系統` `自動化佈署` `Jenkins` `CICD` `Micro-service`