【CI/CD1】jenkins
文章目錄
- 1.jenkins:構建/測試/部署就是CICD工具即jenkins,但jenkins需要個人提供一臺運行jenkins的機器
- 2.GitLab-Jenkins集成:Jenkins鏡像像nginx一樣
- 2.1 Jenkins-docker配置(服務端):運行在8080端口上,機器只要安裝docker就能裝載image,運行容器
- 2.2 Jenkins與GitLab配置(客戶端):docker ps查看正在運行,瀏覽器訪問http://10....:8080/
- 2.2.1 GitLab與Jenkins Access Token配置
- 2.2.2 新建jenkins job和配置job
- 2.2.3 Jenkins pipeline script配置
- 2.2.4 Jenkins&GitLab集成環境驗證
1.jenkins:構建/測試/部署就是CICD工具即jenkins,但jenkins需要個人提供一臺運行jenkins的機器
官網https://www.jenkins.io/下載jenkins,可選擇適合你自己系統的版本,也可選擇不依賴于系統的docker(前提本機安裝了docker)或war包(本機安裝了java),如下開啟服務端。
執行如上命令出現如下密碼,復制這串密碼,瀏覽器打開http://localhost:8080,粘貼到管理員密碼里。點擊安裝推薦插件,創建管理員用戶yu,密碼123,到這里jenkins已經安裝完成了(裝在win上),主要用來配合git服務器。
在Manage Jenkins中選擇Global Tool Configuration添加git路徑如下。
Create a job,選擇Freestyle project,命名為newjob,點擊配置。
如上如果選擇execute shell會出現系統找不到指定文件報錯。liunx 下使用execute shell,并加上#!/bin/bash,cat ./README.md。這里的腳本可以做的事很多,比如構建項目,做代碼測試等。如下點擊控制臺輸出,可查看fetch拉取github代碼并執行cat ./README.md腳本。
jenkins輪詢github,有更新就pull下來,然后執行輸入的構建腳本。
2.GitLab-Jenkins集成:Jenkins鏡像像nginx一樣
2.1 Jenkins-docker配置(服務端):運行在8080端口上,機器只要安裝docker就能裝載image,運行容器
在指定服務器上安裝docker客戶端,使用docker命令進行下載jenkins-docker版本如下:
docker pull jenkins/jenkins:2.54運行jenkins-docker images,進入對應container,并相應安裝vim、docker、gcc/g++、make、cppcheck等調試、編譯環境,運行jenkins-docker命令如下:-name指定image名字。-p內部container和外部對應關系。-v外部地址和container內部地址對應關系,在container內部修改jenkins的話,外部也會更新。/etc/localtime時間同步。
docker run --privileged=true -d --name jenkins -p 8080:8080 -v /var/run/docker.sock:/var/run/docker.sock -v /home/ju/jenkins_home:/var/jenkins_home/ -v /etc/localtime:/etc/localtime jenkins/jenkins:v4進入docker container內部命令如下:
docker exec -u 0 -it jenkins bash
保存docker images為tar包命令如下,-o(output):
加載tar包為docker images命令如下,和上面相反:
docker load -input jenkins_v4.tar2.2 Jenkins與GitLab配置(客戶端):docker ps查看正在運行,瀏覽器訪問http://10…:8080/
2.2.1 GitLab與Jenkins Access Token配置
GitLab配置Access Token,用于jenkins連接GitLab獲取GitLab API接口,GitLab頁面->用戶->Settings->Access Tokens。
生成GitLab個人準入秘鑰,設置Name,Expires at默認不填永久有效,Scopes全部勾選后,點擊Create personal access token,生成后,頁面上會提示"Your new personal access token has been created"。
Jenkins配置GitLab,在jenkins界面點擊Manage Jenkins->Configure System:
Jenkins配置界面查找GitLab,添加connect name與Gitlab host URL:
添加Credentials,點擊Add->jenkins,進行添加對應的秘鑰,Kind選擇GitLab API Token,API Token添加GitLab personal api token,ID添加為jenkins_gitlab后,點擊Add。
選擇Credentials為GitLab API token,點擊Test Connection,驗證jenkins與GitLab是否建立連接,顯示為”Success”。
2.2.2 新建jenkins job和配置job
在jenkins主界面點擊New Item,可新建job或者復制已有job,此處直接復制已有job,拷貝后的job不要運行build,避免回填錯誤數據到GitLab。
項目名為example的Jenkins pipeline script同下面導入的,可自行修改。
選擇對應job后點擊Configure進行job配置,在job配置界面查到Build Triggers,進行配置job觸發條件,勾選“Build when a change is pushed to GitLab. GitLab webhook URL: http://10.75.92.229:8080/project/sw61_bsp_build”,勾選狀態如下圖。
2.2.3 Jenkins pipeline script配置
1) 環境模塊導入, groovy語言 import hudson.*2) 清空工作空間 node(""){stage("clear workspace"){cleanWs()} }3) 下載源碼 node(""){stage("download code"){echo "download code"if (env.gitlabSourceBranch == null){ //當gitlab過來觸發的job的話,環境變量上就會有gitlabSourceBranch字串git branch: "sw61", credentialsId: '18f53bc3-dc50-4178-acde-d628264ee453', url: 'https://gitlab-dbd...com/bsp_diag/prj_bsp.git' // null說明不是gitlab觸發}else{ //gitlab做了push或merge操作時觸發,credentialsId就是Access Tokensgit branch: env.gitlabSourceBranch, credentialsId: '18f53bc3-dc50-4178-acde-d628264ee453', url: env.gitlabSourceRepoHttpUrl}} }4) 源碼cppcheck掃描 try{node(""){stage("cppcheck"){echo "cppcheck starting"pwd()sh "/home/cppcheck-1.75/cppcheck 4 --enable=all --inconclusive --xml --xml-version=2 "+env.WORKSPACE+" 2> cppcheck.xml"publishCppcheck ignoreBlankFiles: true, pattern: 'cppcheck.xml'def cppcheck_file_obj = new File(env.WORKSPACE+"/cppcheck.xml")if (cppcheck_file_obj.isFile()){echo "cppcheck.xml file exist"result = sh returnStdout: true ,script: "cat "+env.WORKSPACE+"/cppcheck.xml"if (result == ""){echo "analyse cppcheck.xml failure,cppcheck.xml is empty"currentBuild.result="FAILURE"}else{echo "analyse cppcheck.xml"cppcheck_result = sh returnStdout: true ,script: "cat "+env.WORKSPACE+"/cppcheck.xml | grep 'cppcheck version'"if(cppcheck_result == ""){echo "analyse cppcheck.xml failure,cppcheck.xml format error"currentBuild.result="FAILURE"}else{final_result = sh returnStdout: true ,script: '''cat '''+env.WORKSPACE+'''/cppcheck.xml | grep severity=\\"error\\"'''if(final_result == ""){echo "analyse cppcheck.xml pass"}else{echo "analyse cppcheck.xml failure,cppcheck.xml has error"currentBuild.result="FAILURE"}}}}else{echo "cppcheck.xml file not exist"currentBuild.result="FAILURE"}}} }catch(e) {echo "cppcheck failure"currentBuild.result="FAILURE" }5) 源碼編譯 try{node(""){stage("compile code"){echo "compile code"sh "make" //在docker里編譯}} }catch(e) {echo "compile code failure"currentBuild.result="FAILURE" }6) 驗證掃描與編譯結果,成功后歸檔相關文件 node(""){stage("archive"){echo "archive"if(currentBuild.result == 'FAILURE') {echo "Something unexpected happened. Please inspect Jenkins logs. Skip archive."}else{sh '''mkdir buildcp cppcheck.xml build/cp *.ko build/tar -zcf archive.tar.gz build/'''archiveArtifacts artifacts: '*.tar.gz', followSymlinks: false}} }7) 根據掃描和編譯結果,回填數據到GitLab stage("commit gitlab"){echo "commit gitlab"if(currentBuild.result == 'FAILURE') {updateGitlabCommitStatus(name: 'sw61_bsp_build', state: 'failed')}else{updateGitlabCommitStatus(name: 'sw61_bsp_build', state: 'success')} }2.2.4 Jenkins&GitLab集成環境驗證
GitLab推送修改至倉庫新分支,驗證push event可觸發jenkins job,jenkins回填數據至GitLab。
總結
以上是生活随笔為你收集整理的【CI/CD1】jenkins的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Docker1】指令,docker-c
- 下一篇: 【CI/CD2】actions,daoc