CI持续集成(Continuous Integration),CD持续部署(Continuous Deployment)
Jenkins是一个优秀的持续集成和持续部署平台,有丰富的插件支持,可以满足各种个性化build场景。
GitLab可以自主选择触发条件,如push/merge/发表评论等,都可以触发jenkins执行build。
整个架构的原理就是GitLab和Jenkins互相配置对方的api,然后就可以在执行相关操作的时候通知到对方。
GitLab主要是在系统里配置jenkins的api。
jenkins不仅要在系统里配置GitLab的api,Pipeline流水线脚本也要进行配置,才能正确通知到GitLab。Jenkins主要会把两种事件通知给GitLab,一种是创建build的任务事件,一种是更新任务状态的事件。
需要安装的插件
- gitlab-hook
- pipeline
- git
- blue ocean
- blueocean-i18n(没有此i18n国际化插件,打开blue ocean网页会卡住)
Jenkins配置触发条件
触发条件Build when a change is pushed to GitLa
此选项需要安装gitlab-hook插件。后面的url是hook地址,用于提供给git仓库,在满足触发条件的时候,通知jenkins执行此build构建。
其中Comment (regex) for triggering a build
是说在git仓库,发送“build-all”或"build-test"关键字,也会触发执行此build构建。
点击Advanced…
可以生成token。
这里的url和token是jenkins的api,可以提供给GtiLab使用,在代码合并/发表commit/push代码等操作时,通知Jenkins执行build操作。
发表评论触发正则检测,符合条件,会触发构建,正则内容可以是多个,使用“|”连接,如“(/build-all|/build-test)
”
编写Jenkins流水线脚本
Pipeline流水线脚本可以直接填写代码内容,也可以是放在Git代码仓库里文件,Jenkins会拉取仓库,然后读取指定的文件内容。
Definition选项Pipeline script
表示流水线使用脚本
Definition选项Pipeline script from SCM
表示从代码仓库读取脚本内容,Script Path是批脚本的相对路径(包含文件名的相对路径),这里直接填写文件名Jenkinsfile,也可以使用其它的名字。
Definition选项Pipeline script from SCM
表示流水线使用代码仓库中的脚本,如Git仓库,这里SCM为None,表示没有安装仓库支持插件,安装后选项才可用,如下图所示。
Credentials填写此仓库的鉴权信息,可以是用户名密码也可以是ssh共享密钥登录。
GitLab项目填写集成信息
指的是Jenkins提供的api,把jenkins的api告诉GitLab,这样GitLab才能通知Jenkins去执行build操作。
GitLab → Settings → Integration
Url和Secret Token填写前面步骤“Jenkins配置触发条件”里的url和token。下面是触发条件trigger condition,表示在什么情况下触发Jenkins执行build操作。
生成GitLab站点Access Tokens
这个是GitLab的api接口的token,可以提供给Jenkins,这样Jenkins就可以把Pipeline任务的状态及时通知给GitLab
GitLab → User Settings → Access Tokens → Persion Access Tokens
点击Create personal access token会生成一个32位的字符串,此字符串只显示一次,要复制并备份才可以,否则丢掉后就找不到了。
Jenkins配置GitLab信息
在Jenkins填写GitLab仓库的地址,可以添加多个GitLab仓库地址,每个连接地址都有一个唯一标识的名字,如下图里的“test”
Jenkins Home → Manage Jenkins → System Configuration → Configure System → GitLab
配置GitLabConnection name里的“test”,需要与测试脚本“Jenkinsfile”里配置gitLabConnection('test')
一致。
GitLab host URL填写GitLab的首页地址。
Credentials选择Gitlab API token,token就是上一个步骤“生成GitLab站点Access Tokens”里生成的token。
测试脚本Jenkinsfile
#!/usr/bin/groovy
pipeline{
agent any
post {
failure {
updateGitlabCommitStatus name: 'getcode', state: 'failed'
updateGitlabCommitStatus name: 'package', state: 'failed'
updateGitlabCommitStatus name: 'deploy', state: 'failed'
}
success {
updateGitlabCommitStatus name: 'getcode', state: 'success'
updateGitlabCommitStatus name: 'package', state: 'success'
updateGitlabCommitStatus name: 'deploy', state: 'success'
}
}
options {
gitLabConnection('test')
gitlabBuilds(builds: ['getcode', 'package', 'deploy'])
}
stages{
stage("getcode"){
steps{
echo "get code from scm"
}
}
stage("package"){
steps{
echo "packge code"
}
}
stage("deploy"){
steps{
echo "deploy packge to node1"
}
}
}
}
关于脚本里的stages和steps,请参考相关资料。
构建完成视图
Jenkins视图
gitlab视图
Reference: http://www.haosan.com/www/doc/view/?doc_id=2799
标签:触发,pipeline,仓库,GitLab,token,build,Jenkins,002GitLab From: https://www.cnblogs.com/itcomputer/p/17115094.html