简介

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

多分支管道允许你针对分布式的控制器的每个分支创建一个管道。 下图是对它的一个描述。使用jenkinsfile去创建多分支的管道,jenkinsfile可以存放在代码仓库中。 Jenkinsfile只是定义CI管道的一个脚本。

DEVOPS技术实践_09:Jenkins多分支管道-LMLPHP

另外,多分支管道的设计初衷就是当Git仓库中的代码改变时,去自动触发构建。下图是对它的一个描述。

DEVOPS技术实践_09:Jenkins多分支管道-LMLPHP

一. 准备工作

(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

DEVOPS技术实践_09:Jenkins多分支管道-LMLPHP

2.2 在右侧菜单栏中,点击Access Tokens

DEVOPS技术实践_09:Jenkins多分支管道-LMLPHP

2.3 输入令牌名称、到期时间、令牌作用域等选项,点击Create personal access token按钮

DEVOPS技术实践_09:Jenkins多分支管道-LMLPHP

2.4 查看生成的个人访问令牌,并保存到安全位置,页面刷新后将无法查看

DEVOPS技术实践_09:Jenkins多分支管道-LMLPHP

jenkins添加gitlab

DEVOPS技术实践_09:Jenkins多分支管道-LMLPHP

2.5 添加凭据

DEVOPS技术实践_09:Jenkins多分支管道-LMLPHP

添加后,test测试报错

DEVOPS技术实践_09:Jenkins多分支管道-LMLPHP

点击高级模式,选择API-levle为v3

DEVOPS技术实践_09:Jenkins多分支管道-LMLPHP

升级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,这是坑爹的地方

DEVOPS技术实践_09:Jenkins多分支管道-LMLPHP

DEVOPS技术实践_09:Jenkins多分支管道-LMLPHP

2.6 jenkins查看成功

DEVOPS技术实践_09:Jenkins多分支管道-LMLPHP

安装成功

三 创建一个多分支

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 创建多分枝项目

DEVOPS技术实践_09:Jenkins多分支管道-LMLPHP

3.3 Trouble Shootting

出现错误:是因为 /usr/libexec/git-core/ 路径没在 PATH 环境变量中。

Started by user darren ning
[Sat Oct :: EDT ] Starting branch indexing...
> git --version # timeout=
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 :: EDT ] Could not update folder level actions from source 9d2e73ea-7ee8--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 :
stdout:
stderr: fatal: Unable to find remote helper for 'http' at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.launchCommandIn(CliGitAPIImpl.java:)
at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.launchCommandWithCredentials(CliGitAPIImpl.java:)
at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.launchCommandWithCredentials(CliGitAPIImpl.java:)
at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.launchCommandWithCredentials(CliGitAPIImpl.java:)
at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.getRemoteReferences(CliGitAPIImpl.java:)
at jenkins.plugins.git.AbstractGitSCMSource.retrieveActions(AbstractGitSCMSource.java:)
at jenkins.scm.api.SCMSource.fetchActions(SCMSource.java:)
at jenkins.branch.MultiBranchProject.computeChildren(MultiBranchProject.java:)
at com.cloudbees.hudson.plugins.folder.computed.ComputedFolder.updateChildren(ComputedFolder.java:)
at com.cloudbees.hudson.plugins.folder.computed.FolderComputation.run(FolderComputation.java:)
at jenkins.branch.MultiBranchProject$BranchIndexing.run(MultiBranchProject.java:)
at hudson.model.ResourceController.execute(ResourceController.java:)
at hudson.model.Executor.run(Executor.java:)
[Sat Oct :: EDT ] Finished branch indexing. Indexing took 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 :
stdout:
stderr: fatal: Unable to find remote helper for 'http' at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.launchCommandIn(CliGitAPIImpl.java:)
at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.launchCommandWithCredentials(CliGitAPIImpl.java:)
at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.launchCommandWithCredentials(CliGitAPIImpl.java:)
at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.launchCommandWithCredentials(CliGitAPIImpl.java:)
at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.getRemoteReferences(CliGitAPIImpl.java:)
at jenkins.plugins.git.AbstractGitSCMSource.retrieveActions(AbstractGitSCMSource.java:)
at jenkins.scm.api.SCMSource.fetchActions(SCMSource.java:)
at jenkins.branch.MultiBranchProject.computeChildren(MultiBranchProject.java:)
at com.cloudbees.hudson.plugins.folder.computed.ComputedFolder.updateChildren(ComputedFolder.java:)
at com.cloudbees.hudson.plugins.folder.computed.FolderComputation.run(FolderComputation.java:)
at jenkins.branch.MultiBranchProject$BranchIndexing.run(MultiBranchProject.java:)
at hudson.model.ResourceController.execute(ResourceController.java:)
at hudson.model.Executor.run(Executor.java:)
Finished: FAILURE

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

在此执行

DEVOPS技术实践_09:Jenkins多分支管道-LMLPHP

3.4 控制台输出

Started by user darren ning
[Sat Oct :: EDT ] Starting branch indexing...
> git --version # timeout=
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=
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=
> git --version # timeout=
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=
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

DEVOPS技术实践_09:Jenkins多分支管道-LMLPHP

DEVOPS技术实践_09:Jenkins多分支管道-LMLPHP

已经完成

05-23 21:31