• Gitlab源码库里代码提交后,如何触发jenkins自动构建?


    版本库里代码提交后,如何触发jenkins自动构建?这是一个面试题,感觉自己回答的并不好,因为并没有用过这个功能,之前公司实际项目用的是svn版本管理,一般都用立刻构建,和定时任务构建(不管代码是否有提交,都到代码库里拉取最新的代码,然后构建)。并且我也是这样告诉面试官的,显然面试官对我很困惑,最终,我告诉他我们的源码管理工具用的是SVN,然后,可能把面试官也弄懵了,因为面试公司用的是gitlab. 哈哈,面试官自己没有尝试过“SVN+触发构建插件”吧。

    经过查询,网上针对Gitlab源码管理+jenkins是有解决方案的: Gitlab利用Webhook实现Push代码后的jenkins自动构建

    下面是我的实践过程:

    已经准备好如下环境:

    Gitlab内网服务器地址:http://192.168.1.50:8090

    jenkins内网服务器地址:http://192.168.1.40:8080

    步骤从这里开始:

    1. jenkins,分别点击"系统管理"->"插件管理"->"可选插件",选择Gitlab和Gitlab Hook Plugin 

    2.192.168.1.50服务器上,需要建立git用户

    useradd git
    passwd git

    3(这个步骤,请跳过,后面jenkins里,凭据我并没有选择免密登陆). 将Jenkins的公钥key添加到Gitlab上, 这样就可以实现jenkins访问gitlab免密码 

    在 Docker:pipeline编写基本技巧- jenkins配置通过密钥拉取git源码管理仓库的代码 中,已经有使用公钥私钥的经验了

    现在登陆 192.168.1.40 

    #192.168.1.40(jenkins)机器上,已经存在公钥
    [root@192 ~]# ls .ssh/ id_rsa id_rsa.pub known_hosts #将192.168.1.40机器的公钥Copy到192.168.1.50(Gitlab)服务器上
    [root@192 ~]# ssh-copy-id git@192.168.1.50 
    /usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub" /usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed /usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys root@192.168.1.50's password: Number of key(s) added: 1 Now try logging into the machine, with: "ssh 'root@192.168.1.50'" and check to make sure that only the key(s) you wanted were added.
    [root@
    192 ~]# ssh 'git@192.168.1.50'
    Last
    login: Sat Apr 6 02:01:01 2019 from mei-pc
    [root@
    192 ~]# exit
    logout Connection to
    192.168.1.50 closed.
    [root@
    192 ~]#

    4. Gitlab服务器上,如果没有项目,可以参考 Github: 从github上拉取别人的源码,并推送到自己的github仓库  找一个项目放上去

    步骤如下:

    [root@192 tomcat-java-demo]# vi .git/config 

    [root@192 tomcat-java-demo]# git remote add origin http://192.168.1.50:8090/root/tomcat-java-demo-gitlab.git
    fatal: remote origin already exists.

    #如果遇到上面这个错误提示,就按照接下来的操作
    [root@192 tomcat-java-demo]# git remote rm origin
    [root@192 tomcat-java-demo]# git remote add origin http://192.168.1.50:8090/root/tomcat-java-demo.git
    [root@192 tomcat-java-demo]# git push -u origin master
    Username for 'http://192.168.1.50:8090': root
    Password for 'http://root@192.168.1.50:8090': 
    Counting objects: 229, done.
    Compressing objects: 100% (185/185), done.
    Writing objects: 100% (229/229), 4.52 MiB | 1.15 MiB/s, done.
    Total 229 (delta 25), reused 229 (delta 25)
    remote: Resolving deltas: 100% (25/25), done.
    remote: 
    remote: The private project root/tomcat-java-demo was successfully created.
    remote: 
    remote: To configure the remote, run:
    remote:   git remote add origin http://192.168.1.50:8090/root/tomcat-java-demo.git
    remote: 
    remote: To view the project, visit:
    remote:   http://192.168.1.50:8090/root/tomcat-java-demo
    remote: 
    To http://192.168.1.50:8090/root/tomcat-java-demo.git
     * [new branch]      master -> master
    Branch master set up to track remote branch master from origin.

    上传代码到gitlab成功, 到gitlab管理界面验证一下

    4. jenkins上新建项目,这里项目名:testgitlabhook

    设置jenkins拉 gitlab上代码地址和对应的凭据

     

    保存

    5. 到gitlab管理页面进行配置

    点 Add Webhook后,

    出现如下错误

    解决参考地址:gitlab使用webhook向jenkins发送请求,报错 Requests to the local network are not allowed   

    大致意思 gitlab 10.6 版本以后为了安全,不允许向本地网络发送webhook请求,如果想向本地网络发送webhook请求,则需要使用管理员帐号登录, 做如下修改

    现在再回到上一个步骤 

    点[Add webhook],不报错了,在下面出现 标签 1所示, 

    按照上图标签操作,点2,3 

    会出现如下错误

    这是没有权限,需要把Jenkins-->Jenkins Manages-->Configure System,找到GitLab配置,去掉勾选。

    参考解决地址:https://www.jianshu.com/p/156de44a44c2

     再回去点 Test-> push event

    出现 Hook executed successfully: HTTP 200 说明配置成功了

    你会发现,每点一次 Test-> push event,就会触发一次jenkins立刻构建

    或者:

    到gitlab管理界面,tomcat-java-demo 项目下,新增一个文件,提交后,也会发现触发了jenkins的立刻构建。 

    到此,gitlab 通过webhook触发jenkins自动构建流程通了。

    作者: 梅梅~

    出处: https://www.cnblogs.com/keeptesting

    关于作者:专注软件测试,测试运维相关工作,请多多赐教!

    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出, 原文链接 欢迎沟通交流加微信联系。 微信:yangguangkg20140901 暗号:博客园.

  • 相关阅读:
    Python之pexpect详解
    Python之NMAP详解
    Python之正则表达式
    Python之面向对象-反射
    Python之元类详解
    Python之Django基本命令
    Python之Django的Model详解
    使用request+Beautiful爬取妹子图
    Django中settings设计模式(单例模式)
    六、Django之表单和类视图-Part 4
  • 原文地址:https://www.cnblogs.com/keeptesting/p/10645879.html
Copyright © 2020-2023  润新知