Jenkins如何構(gòu)建pipeline項(xiàng)目及分布式構(gòu)建

一、Jenkins構(gòu)建pipeline項(xiàng)目

pipeline是一套jenkins官方提供的插件,它可以用來在jenkins中實(shí)現(xiàn)和集成連續(xù)交付。

pipeline定義了完成過一個CI/CD流程的步驟,通過執(zhí)行這個流程代替手工自動去完成CI/CD,這個流程是由使用者自己定義的,整個流程主要有agent、param、stage三部分組成。

stage 定義了在整個 pipeline 中執(zhí)行的概念上不同的任務(wù)子集

agent指示Jenkins為整個管道分配執(zhí)行器(在節(jié)點(diǎn)上)和工作區(qū)。

param是為整個流程提供參數(shù)的。比如你使用git進(jìn)行代碼管理,你需要構(gòu)建某個流程,這時候你只要在構(gòu)建的時候指定分支參數(shù)就可以構(gòu)建項(xiàng)目。

1、Jenkins頁面創(chuàng)建pipeline項(xiàng)目

2、GitLab上創(chuàng)建pipeline腳本文件

pipeline腳本如下:

pipeline{ 
    agent any
    parameters {
        gitParameter name: 'git_version', 
                     branchFilter: 'origin/(.*)',
                     type: 'PT_TAG',
                     defaultValue: 'v1.0',
                     description: '發(fā)布新版本'
        choice(name: 'choice', choices: ['publish','rollback'],description: 'publish: 發(fā)布版本\nrollback: 回滾版本')               
    }
    stages{
        stage("下載代碼"){ 
            steps{
                checkout([$class: 'GitSCM', branches: [[name: '*/master']], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[url: 'git@10.0.0.200:dev/gitlab_test.git']]])
            }
        } 
        stage("檢測代碼"){
            steps{
                sh "/opt/sonar-scanner/bin/sonar-scanner  \
                    -Dsonar.projectName=${WORKSPACE} \
                    -Dsonar.projectKey=html \
                    -Dsonar.sources=."
            } 
        }
        stage("是否部署"){
            steps{
                input message: '確定要部署嗎?', ok: 'ok'
            }
        }
        stage("部署代碼"){ 
            steps{
                sh "sh -x /server/scripts/jenkins.sh" 
            }
        } 
    }
    post {
        success {
            dingTalk accessToken: '878146e038041b550825b079049cafdf2db77b88221a81a75c9c684b42c80cc8', imageUrl: '', jenkinsUrl: '', message: 'pipeline構(gòu)建成功', notifyPeople: ''
        }
        failure {
            dingTalk accessToken: '878146e038041b550825b079049cafdf2db77b88221a81a75c9c684b42c80cc8', imageUrl: '', jenkinsUrl: '', message: 'pipeline構(gòu)建失敗', notifyPeople: ''
        }
    }
}

部署代碼腳本如下:

vim /server/scripts/jenkins.sh
#!/bin/bash

CODEDIR=/html
IP=172.16.1.7

TAR_CODE(){
    cd ${WORKSPACE} 
    tar zcf /opt/${git_version}.tar.gz ./* ‐‐exclude=.git ‐‐exclude=Jenkins_pipeline
}

SCP_CODE(){
    ssh ${IP} "mkdir ${CODEDIR}/${git_version} -p"
    scp /opt/${git_version}.tar.gz ${IP}:${CODEDIR}/${git_version}
}

XF(){
    ssh ${IP} "cd ${CODEDIR}/${git_version} && tar xf ${git_version}.tar.gz && rm -rf ${git_version}.tar.gz"
}

CREATE_LN(){
    ssh ${IP} "cd ${CODEDIR} && rm -rf www && ln -s ${git_version} www"
}

main(){
  if [[ "${choice}" == "publish" ]];then
    if [[ "$GIT_COMMIT" == "GIT_PREVIOUS_SUCCESSFUL_COMMIT" ]];then
      echo "構(gòu)建失敗,該版本已發(fā)布"
    else
      TAR_CODE
      SCP_CODE
      XF
      CREATE_LN
    fi
  else
      CREATE_LN 
  fi
}
main

3、配置pipeline項(xiàng)目

4、測試pipeline項(xiàng)目是否能正常運(yùn)行

二、Jenkins設(shè)置節(jié)點(diǎn)

需要準(zhǔn)備一臺新的服務(wù)器,本文將SonarQube服務(wù)器作為slave節(jié)點(diǎn)

Jenkins其實(shí)自帶分布式特性,是Master/Slave的模型。在Master上分配任務(wù),然后在Slave或者M(jìn)aster上完成。這個特性帶來兩個好處:(1)能夠有效分擔(dān)主節(jié)點(diǎn)上的壓力,加快構(gòu)建速度;(2)能夠指定特定的任務(wù)在特定的主機(jī)上進(jìn)行。

節(jié)點(diǎn)服務(wù)器不需要安裝jenkins(只需要運(yùn)行一個slave節(jié)點(diǎn)服務(wù)),構(gòu)建事件的分發(fā)由master端(jenkins主服務(wù))來執(zhí)行。

1、遠(yuǎn)程復(fù)制將Jenkins主機(jī)上的相關(guān)文件

[root@jenkins test]# ssh-copy-id -i /root/.ssh/id_dsa.pub 172.16.1.8
[root@jenkins test]# scp -r /opt/sonar-scanner/ 172.16.1.8:/opt
[root@jenkins test]# scp -r /opt/maven/ 172.16.1.8:/opt
[root@jenkins test]# ssh 172.16.1.8 "mkdir -p /server/scripts"
[root@jenkins test]# scp /server/scripts/* 172.16.1.8:/server/scripts

2、節(jié)點(diǎn)服務(wù)器進(jìn)行相關(guān)操作

[root@sonarqube ~]# ssh-keygen
[root@sonarqube ~]# ssh-copy-id -i .ssh/id_rsa.pub 172.16.1.7   #與web服務(wù)器建立密鑰連接
[root@sonarqube ~]# cd /opt
[root@sonarqube opt]# rpm -ivh jdk-8u181-linux-x64.rpm
[root@sonarqube opt]# mkdir jenkins

3、在Jenkins管理中新建節(jié)點(diǎn)

4、配置從節(jié)點(diǎn)

5、檢查是否連接成功

6、修改流水線腳本進(jìn)行測試

7、在GitLab上添加slave節(jié)點(diǎn)的部署密鑰

8、進(jìn)入Jenkins項(xiàng)目添加私鑰

9、點(diǎn)擊構(gòu)建查看執(zhí)行狀態(tài)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容