jenkins和gitlab是现在DevOps工具链中最常见的,抛开gitlab-ci不谈,gitlab代码提交触发jenkins流水线是最经典的搭配。 这儿就介绍下如何装备完成jenkins和gitlab之间的集成。
装置GitLab Plguin
- Gitlab Plugin– 这个插件允许GitLab在提交代码或打开/更新合并恳求时触发Jenkins中的构建。它还能够将构建状况发送回GitLab。
装备Jenkins Server
首先创立GitLab凭据,将凭据填充到 Manage Jenkins->System->enable authentication for '/project' end-point
。
经过该装备,相当于创立了jenkins job 能够操作访问gitlab的凭据,在后边的jenkinsfile中就会运用声明并运用该凭据。
装备Jenkins Job
创立jenkins job, 源代码办理选 Git,Repository URL 填写你 gitlab 上源码 repo 的地址,Credentials 是拉取代码时需求用到的身份认证
构建触发器挑选 “Build when a change is pushed to GitLab” (记住后边的GitLab webhook URL 后边要填在gitlab的webhooks中),依照下面勾选
一起点击“高档”,“Allowd branches” 勾选 “Filter branches by regex”
点 “Generate” 生成 token,这个 token 用于填写到 gitlab 的 webhook 里,gitlab 检测到代码提交,会告诉 webhook 里填写的 Jenkins 生成的回调URL,并带上这个 token,防止其它人触发 jenkins 的继续集成
注: 复制出 URL 和 token,后边装备 gitlab 的 webhook 会用到
该过程的意图主要是为了将要经过gitlab触发的jenkins job的信息准备好,用于后边的装备gitlab-webhook, 让gitlab知道该触发哪个jenkins job.
新版jenkins可能遇到的坑
在“Generate” 生成 token时候,假如运用的是高版别的 jenkins ,会出现403错误 HTTP ERROR 403 No valid crumb was included in the request
这是由于 jenkins 的防止跨站点恳求伪造(Prevent Cross Site Request Forgery exploits)阻挠了恳求,本来低版别的 jenkins 能够在界面把这个关掉,形似高版别去掉了,能够经过如下方式:
hudson.security.csrf.GlobalCrumbIssuerConfiguration.DISABLE_CSRF_PROTECTION = true
假如出现下图所示的情况,就表示命令成功了
上面的办法关于在容器里运行的jenkins而言,需求进入容器修正装备,永久生效
修正/usr/local/bin/jenkins.sh , 找到exec java那行,添加-Dhudson.security.csrf.GlobalCrumbIssuerConfiguration.DISABLE_CSRF_PROTECTION=true
# 终究效果
exec java -Duser.home="$JENKINS_HOME" -Dhudson.security.csrf.GlobalCrumbIssuerConfiguration.DISABLE_CSRF_PROTECTION=true "${java_opts_array[@]}" -jar ${JENKINS_WAR} "${jenkins_opts_array[@]}" "$@"
至此,jenkins 的继续集成装备好了,还需求装备 gitlab 的 webhook,用于代码提交告诉 jenkins。
装备Gitlab Webhook
打开 gitlab 的 repo 的 Settings-Integrations,URL 和 Secret Token 填写 jenkins job中构建触发器部分生成的,点击 “Add webhook”,搞定! 在链接那里输入之前jenkins上供给的webhook url 以及“Secret token“,修改完后保存
点击测试,假如回来200,那就成功了,去jenkins看看有没有主动构建的记载
装备Jenkins回来履行状况
上面过程仅仅完成了gitlab代码提交触发jenkins job, 那么job履行完成后的状况,怎样在gitlab上看到呢?
pipeline {
agent any
options {
gitLabConnection('gitlab-connection')
//Manage Jenkins->System->enable authentication for '/project' end-pointYour装备的GitLab Connection
}
stages {
stage('build') {
steps {
updateGitlabCommitStatus name: 'build', state: 'running'
hogehoge
}
}
}
post {
success {
updateGitlabCommitStatus name: 'build', state: 'success'
}
failure {
updateGitlabCommitStatus name: 'build', state: 'failed'
}
}
}
参数阐明:
- gitLabConnection 是和GitLab链接的称号。GitLab称号的设定是在jenkins办理>系统设定>Gitlab当中设置详细的gitlab url和token
- updateGitlabCommitStatus
- name:build称号
- state:pending,running,canceled,success,failed