Gitlab触发Jenkins自动执行

背景:

需要能够在每次提交到Gitlab仓库后,触发Jenkins自动编译与测试

前提:

  1. 已经在Jenkins上安装Git,Gitlab plugin。
  2. 已经在Gitlab上创建的项目,并配置了Jenkinsfile。

步骤:

  1. 在Jenkins服务器上生成SSH公钥和私钥,并将私钥添加至Jenkins Credentials,将公钥添加至Gitlab SSH Keys

  2. 在Gitlab上生成Access Token(具体权限根据需求做调整),并将Token添加至Jenkins Credentials


    Gitlab上生成Token

    添加Token至Jenkins
  3. 在Manage Jenkins->Configure System下配置Gitlab。

    Jenkins中配置Gitlab Token

    注意事项

  • Enable authentication 选项不能打勾,如果打勾需要在Jenkins里创建一个专用于此的账号,或者在Jenkins的项目配置里创建Secret Token并在创建Gitlab Token时添加进去。因为目前我没有那个需求,所以这里我选择了不打勾。
  • 添加后务必点击Test Connection进行连接测试,测试成功再进入下一步。这里格外需要注意的是,如果Jenkins和Gitlab装在同一个OS,共享同一个IP(用端口区分),需要以root权限登录Gitlab,并在/admin/application_settings/network(浏览器中访问)中选择Allow requests to the local network from web hooks and services
    Outbound requests
  1. 在Jenkins下创建项目,配置trigger和pipeline
    Build Trigger

    Pipeline

    注意事项
  • 如果Jenkins和Gitlab装在同一个OS,共享同一个IP(用端口区分),这里的repository URL应该使用docker container内部IP(可以通过docker inspect查看)
  • Name需要填写为repository的名字
  • Refspec需要填写为+refs/heads/*:refs/remotes/origin/* +refs/merge-requests/*/head:refs/remotes/origin/merge-requests/*
  • Branch需要填写为origin/{gitlabBranch},这里我写的是master
  1. 在Gitlab下配置Webhooks
    Webhooks

    在具体项目的setting->integrations中将上一步在trigger中产生的Gitlab Webhook URL填写在此处的URL(如果有创建SecretToken也一并填写)
    webhook test

    注意事项
  • 如果Jenkins和Gitlab装在同一个OS,共享同一个IP(用端口区分),需要在防火墙中增加允许172.17网段可以访问的设置firewall-cmd --permanent --zone=public --add-rich-rule='rule family=ipv4 source address=172.27.0.0/16 accept', firewall-cmd --reload
    测试Webhooks是否正常工作
    至此,我们已经完成了所有的配置项。
  1. 验证下能否正常触发Jenkins产生Job
    编写Helloworld.c,push到Gitlab后,Jenkins产生Job,并输出结果。验证OK


    验证

参考文档

Continuous Integration with Jenkins and GitLab
Webhooks and insecure internal web services
Web hook fails when Jenkins Anonymous user does not have job/build permission
Docker - No route to host

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容