Jenkins 是什么?
Jenkins是一个开源的、提供友好操作界面的持续集成(CI)工具。
Jenkins 如何与Gitlab 进行关联?
可以通过生成密钥(Webhooks 的钩子),然后到Gitlab 需要集成的项目中,设置集成功能,增加Web 钩子。
这样当进行Push 动作时,就会触发Jenkins 进行构建,然后执行相应的流水线。
对于小公司而言,开发服务器常用的架构是内网服务器(本地机器)+外网服务器内网穿透,Jenkins + 私有Gitlab 持续集成。
背景:Jenkins 和Gitlab 部署在外网服务器上,通过内网穿透对内网服务器(开发服务器)进行访问。
需求描述:每次进行Push 时,触发Jenkins 流水线,进行构建,将最新的版本同步到开发服务器上。
Jenkins的功能很强大,这里并不打算深入拓展,而是介绍一种相较简单粗暴的方式去完成持续集成。
创建任务
首先需要在Jenkins 上新建任务,因为需求并不复杂,这里直接选择流水线的方式
如果需要关联TAPD,这里需要「关联TAPD」填上对应TAPD 的ID。
核心的配置在构建触发器这一块,根据Push 事件,触发执行流水线。
有以下几个点需要注意:
- 因为是开发服务器,并没有开启合并请求。
- Gitlab webhook URL 需要记住,后面会用到。
- 默认允许所有分支,如果有特殊需求,可以指定分支名进行过滤。
- 点击右下角的Generate 按钮生成Secret token,后面会用到。
配置流水线:
上半部分是连接内网服务器(开发服务器)的基础信息,下半的配置信息是需要执行的构建脚本。
构建脚本的作用其实就是去执行git pull
这个动作,大概长这样:
1 | #!/usr/bin/bash |
流水线配置,点击查看详情信息
def bdService() { def remote = [:] remote.name = 'hostname' remote.host = 'localhost' remote.port = 22 remote.user = 'username' remote.password = 'password' remote.allowAnyHosts = true return remote } pipeline { agent any stages { stage('代码集成') { steps { script { def remote = bdService(); sshCommand remote: remote, command: "/bin/bash /opt/shell/build.sh" } } } } }
配置完成之后,点击保存。
返回工作态,找到对应任务,点击立即构建。
通过构建历史,查看Console Output
,能看到类似输出则表示构建成功。
构建成功之后,就可以与Gitlab 进行关联了,点击项目=>设置=>集成。
链接(URL)是之前的 Webhook url,安全令牌则是上面生成的 Secret token,SSL 证书验证视情况选择是否开启,然后点击增加Web 钩子。
至此所有的配置就基本完成了,这时可以去测试Push,看看是否会执行自动构建。