DEVOPS技術實踐_09:Jenkins多分支管道


簡介

多分支的管道是在jenkins2.x中新增的功能 。

多分支管道允許你針對分布式的控制器的每個分支創建一個管道。 下圖是對它的一個描述。使用jenkinsfile去創建多分支的管道,jenkinsfile可以存放在代碼倉庫中。 Jenkinsfile只是定義CI管道的一個腳本。

另外,多分支管道的設計初衷就是當Git倉庫中的代碼改變時,去自動觸發構建。下圖是對它的一個描述。

一. 准備工作

(1)在【全局工具配置】中Maven工具已經配置好。
(2)安裝了【Pipeline Maven Integration Plugin】
(3)Java工具也需要安裝好,由於我們構建是在jenkins master上執行,所以可以跳過此步(因為我們在安裝Jenkins時,已經安裝好Java)
(4)安裝Gitlab插件,本實驗使用gitlab做為代碼管理

添加gitlab憑據到jenkins中

添加全局憑據

二. 從jenkins中配置在Gitlab服務器的webhooks

 gitlab創建個人訪問令牌(personal access token)

2.1 登錄到gitlab,點擊Settings

2.2 在右側菜單欄中,點擊Access Tokens

2.3 輸入令牌名稱、到期時間、令牌作用域等選項,點擊Create personal access token按鈕

2.4 查看生成的個人訪問令牌,並保存到安全位置,頁面刷新后將無法查看

 

jenkins添加gitlab

 

2.5 添加憑據

 添加后,test測試報錯

 

點擊高級模式,選擇API-levle為v3

升級git版本

[root@node1 ~]# wget https://github.com/git/git/archive/v2.2.1.tar.gz

[root@node1 ~]# tar -xf v2.2.1.tar.gz 

[root@node1 ~]# cd git-2.2.1/

[root@node1 git-2.2.1]# yum install perl-ExtUtils-MakeMaker

[root@node1 git-2.2.1]# yum install zlib-devel 

[root@node1 git-2.2.1]# make configure
GIT_VERSION = 2.2.1
GEN configure

[root@node1 git-2.2.1]# ./configure --prefix=/usr/local/git --with-iconv=/usr/local/libiconv

[root@node1 git-2.2.1]# make 

[root@node1 git-2.2.1]# make  install

[root@node1 git-2.2.1]# ln -s /usr/local/git/bin/git  /usr/bin/

[root@node1 git-2.2.1]# git --version

git version 2.2.1

問題依然出現,最后排查的過程中發現,復制的不是真正的token,這是坑爹的地方

 

 

 2.6 jenkins查看成功

安裝成功

三 創建一個多分支

3.1 編輯jenkinsfile

 node ('master') { 
    checkout scm 
    stage('Build') { 
      withMaven(maven: 'M3') { 
        if (isUnix()) { 
          sh 'mvn -Dmaven.test.failure.ignore clean install package' 
        }  
        else { 
          bat 'mvn -Dmaven.test.failure.ignore clean install package' 
        } 
      } 
    }   
    stage('Results') { 
      junit '**/target/surefire-reports/TEST-*.xml' 
      archive 'target/*.jar' 
    } 
  } installinstall

提交,開始創建多分枝流水線

3.2 創建多分枝項目

3.3 Trouble Shootting

出現錯誤:是因為 /usr/libexec/git-core/ 路徑沒在 PATH 環境變量中。

Started by user darren ning
[Sat Oct 26 14:12:57 EDT 2019] Starting branch indexing...
 > git --version # timeout=10
using GIT_ASKPASS to set credentials 
 > git ls-remote http://192.168.132.132/root/simple-maven-project-with-tests.git # timeout=10
ERROR: [Sat Oct 26 14:12:57 EDT 2019] Could not update folder level actions from source 9d2e73ea-7ee8-4128-a8b2-0d7f20e75599
hudson.plugins.git.GitException: Command "git ls-remote http://192.168.132.132/root/simple-maven-project-with-tests.git" returned status code 128:
stdout: 
stderr: fatal: Unable to find remote helper for 'http'

    at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.launchCommandIn(CliGitAPIImpl.java:2042)
    at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.launchCommandWithCredentials(CliGitAPIImpl.java:1761)
    at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.launchCommandWithCredentials(CliGitAPIImpl.java:1666)
    at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.launchCommandWithCredentials(CliGitAPIImpl.java:1657)
    at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.getRemoteReferences(CliGitAPIImpl.java:2877)
    at jenkins.plugins.git.AbstractGitSCMSource.retrieveActions(AbstractGitSCMSource.java:1139)
    at jenkins.scm.api.SCMSource.fetchActions(SCMSource.java:848)
    at jenkins.branch.MultiBranchProject.computeChildren(MultiBranchProject.java:592)
    at com.cloudbees.hudson.plugins.folder.computed.ComputedFolder.updateChildren(ComputedFolder.java:277)
    at com.cloudbees.hudson.plugins.folder.computed.FolderComputation.run(FolderComputation.java:164)
    at jenkins.branch.MultiBranchProject$BranchIndexing.run(MultiBranchProject.java:1026)
    at hudson.model.ResourceController.execute(ResourceController.java:97)
    at hudson.model.Executor.run(Executor.java:429)
[Sat Oct 26 14:12:57 EDT 2019] Finished branch indexing. Indexing took 19 ms
FATAL: Failed to recompute children of simple-maven-project-with-tests
hudson.plugins.git.GitException: Command "git ls-remote http://192.168.132.132/root/simple-maven-project-with-tests.git" returned status code 128:
stdout: 
stderr: fatal: Unable to find remote helper for 'http'

    at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.launchCommandIn(CliGitAPIImpl.java:2042)
    at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.launchCommandWithCredentials(CliGitAPIImpl.java:1761)
    at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.launchCommandWithCredentials(CliGitAPIImpl.java:1666)
    at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.launchCommandWithCredentials(CliGitAPIImpl.java:1657)
    at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.getRemoteReferences(CliGitAPIImpl.java:2877)
    at jenkins.plugins.git.AbstractGitSCMSource.retrieveActions(AbstractGitSCMSource.java:1139)
    at jenkins.scm.api.SCMSource.fetchActions(SCMSource.java:848)
    at jenkins.branch.MultiBranchProject.computeChildren(MultiBranchProject.java:592)
    at com.cloudbees.hudson.plugins.folder.computed.ComputedFolder.updateChildren(ComputedFolder.java:277)
    at com.cloudbees.hudson.plugins.folder.computed.FolderComputation.run(FolderComputation.java:164)
    at jenkins.branch.MultiBranchProject$BranchIndexing.run(MultiBranchProject.java:1026)
    at hudson.model.ResourceController.execute(ResourceController.java:97)
    at hudson.model.Executor.run(Executor.java:429)
Finished: FAILURE

添加xport PATH=/usr/libexec/git-core:$PATH到/etc/profile里

在此執行

3.4 控制台輸出

Started by user darren ning
[Sat Oct 26 14:30:07 EDT 2019] Starting branch indexing...
 > git --version # timeout=10
using GIT_ASKPASS to set credentials 
 > git ls-remote http://192.168.132.132/root/simple-maven-project-with-tests.git # timeout=10
Creating git repository in /root/.jenkins/caches/git-308bd15be61318b6e1166e23433fdd72
 > git init /root/.jenkins/caches/git-308bd15be61318b6e1166e23433fdd72 # timeout=10
Setting origin to http://192.168.132.132/root/simple-maven-project-with-tests.git
 > git config remote.origin.url http://192.168.132.132/root/simple-maven-project-with-tests.git # timeout=10
Fetching & pruning origin...
Listing remote references...
 > git config --get remote.origin.url # timeout=10
 > git --version # timeout=10
using GIT_ASKPASS to set credentials 
 > git ls-remote -h http://192.168.132.132/root/simple-maven-project-with-tests.git # timeout=10
Fetching upstream changes from origin
 > git config --get remote.origin.url # timeout=10
using GIT_ASKPASS to set credentials 
 > git fetch --tags --progress origin +refs/heads/*:refs/remotes/origin/* --prune
Checking branches...
  Checking branch master
      ‘Jenkinsfile’ found
    Met criteria
Scheduled build for branch: master
  Checking branch feature
      ‘Jenkinsfile’ found
    Met criteria
Scheduled build for branch: feature
Processed 2 branches
[Sat Oct 26 14:30:08 EDT 2019] Finished branch indexing. Indexing took 1 sec
Finished: SUCCESS

 

 

已經完成

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM