CI/CD技术专题「Jenkins实战系列」如何通过Gitlab对接Jenkins构建提交自动触发部署构建体系指南(上部)

Posted 洛神灬殇

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CI/CD技术专题「Jenkins实战系列」如何通过Gitlab对接Jenkins构建提交自动触发部署构建体系指南(上部)相关的知识,希望对你有一定的参考价值。

前因后果

最近,发现我们公司的自动化体系做的实在是不咋地,每次提交push完代码之后,还需要登录到服务器进行执行下docker脚本,之后才能拿到镜像,一说到这里我就要吐了,CI/CD做的简直是一团糟,极为不方便,真心是想吐槽一下目前我们公司的自动化部署体系。不过因此也激发了我想法学习一下CI/CD的实现体系,未来自动体系实在不行就靠我们团队给揽过来吧,哈哈 … …

实现路径

总体执行路径就是:首先开发者进行push本地代码到远程GitLab仓库之后,并且只会自动化触发到WebHook钩子的回调函数进行触发Jenkins的构建服务功能,具体大致的流程如下所示。

Jenkins安装Generic Webhook Trigger Plugin插件(不同版本略有不同,本质一样)

首先,我们需要现在Jenkins上面进行安装对应的Generic Webhook Trigger Plugin插件或者也可以安装专门的Gitlab的相关的WebHook组件插件。

以Generic Webhook Trigger Plugin插件为例,它主要用于使得Jenkins去接受对应的URL的Http请求数据,并且可以接受对应的JSON结构的对象数据模型。

新建的项目仓库

首先针对于仓库的基本信息进行配置,主要面向项目名称以及构建的策略,保持默认值即可。

配置源码管理

之后配置对应的源码仓库的配置信息,此处我们就不过多介绍,毕竟相信大家对Jenkins都有了对应的了解和认识。

配置触发器

主要是通过Generic Webhook Trigger勾选选项之后,会进行相关的触发器设置

配置可以针对于请求的参数信息和请求头信息等。

GitLab发送Jenkins的JSON结构案例
# GitLab 发送给 Jenkins 的内容

    "object_kind": "push",
        "event_name": "push",
        "before": "07e1b053d4f699a13e1abfdddbd7c53e7df1436a",
        "after": "42b8a70696eb3357963b6f076aed49cced0d20de",
        "ref": "refs/heads/release",
        "checkout_sha": "42b8a70696eb3357963b6f076aed49cced0d20de",
        "message": null,
        "user_id": 18,
        "user_name": "xxx",
        "user_username": "liuchengsheng",
        "user_email": "liuchengsheng@xxxxxxx.com",
        "user_avatar": "https://www.gravatar.com/avatar/d640f62f6441a0d232dab26113fc1e32?s=80\\u0026d=identicon",
        "project_id": 19,
        "project": 
            "id": 19,
            "name": "test",
            "description": "测试",
            "web_url": "http://code.xxxxxxx.cc/liuchengsheng/test",
            "avatar_url": null,
            "git_ssh_url": "git@code.xxxxxxx.cc:liuchengsheng/test.git",
            "git_http_url": "http://code.xxxxxxx.cc/liuchengsheng/test.git",
            "namespace": "liuchengsheng",
            "visibility_level": 0,
            "path_with_namespace": "liuchengsheng/test",
            "default_branch": "master",
            "ci_config_path": null,
            "homepage": "http://code.xxxxxxx.cc/liuchengsheng/test",
            "url": "git@code.xxxxxxx.cc:liuchengsheng/test.git",
            "ssh_url": "git@code.xxxxxxx.cc:liuchengsheng/test.git",
            "http_url": "http://code.xxxxxxx.cc/liuchengsheng/test.git"
        ,
        "commits": [
        
            "id": "42b8a70696eb3357963b6f076aed49cced0d20de",
            "message": "six\\n",
            "timestamp": "2018-06-04T11:12:10+08:00",
            "url": "http://code.xxxxxxx.cc/liuchengsheng/test/commit/42b8a70696eb3357963b6f076aed49cced0d20de",
            "author": 
                "name": "imlcs",
                "email": "15224800531@163.com"
            ,
            "added": [

                ],
            "modified": [
                "README.MD"
                ],
            "removed": [

                ]
        
    ],
        "total_commits_count": 1,
        "repository": 
            "name": "test",
            "url": "git@code.xxxxxxx.cc:liuchengsheng/test.git",
            "description": "测试",
            "homepage": "http://code.xxxxxxx.cc/liuchengsheng/test",
            "git_http_url": "http://code.xxxxxxx.cc/liuchengsheng/test.git",
            "git_ssh_url": "git@code.xxxxxxx.cc:liuchengsheng/test.git",
            "visibility_level": 0
        

触发器配置介绍

因为gitlab同意或者直接关闭Merge Request时不需要再次触发构建,所以在这里只处理Open Merge Request Event。

Gitlab webhook URL 部分是用来配置gitlab的,token 也是用来配置gitlab的。

filter branch by name的配置说明下:include表示需要跟踪的target branch用逗号分隔。

注意:新版本 jenkins URL 配置中 token 一定要写

配置构建环境

配置对应的【构建环境】以及构建的脚本和触发的方法,所以可以比较方便的建立触发行为,例如:拉去Git仓库、编译源码打包以及最后推送docker hub镜像等操作。

至此对应的GitLab已经完成了所有的对用的HOOK的基本操作,自动构建测试,GitLab 用户在指定分支上提交代码触发 Jenkins 构建

GitLab配置仓库Push事件Hook

配置WebHook

这里的URL就是上面配置触发器时的获取token的配置同理,配置Merge request events才触发这个webhook。

配置System Hook

配置GitLab项目push事件的System Hook,其中对应的System Hook的调用的URL,它会把事件信息发送通过URL发送给Jenkins。

首先会进入GitLab仓库的System Hooks界面,进行编辑勾选对应的Push events的复选框,勾选之后,push操作就会触发对应的url的http请求操作。

至此,目的达到,当开发人员通过gitlab 打开一个merge request时,会自动触发jenkins合并与构建,此外还可以通过Jenkins的后置处理可以通过配置jenkins的邮件提醒,构建成功后通知管理人员,这时再经过必要的代码review后,管理人员正式同意合并代码,此时不会再触发构建;

以上是关于CI/CD技术专题「Jenkins实战系列」如何通过Gitlab对接Jenkins构建提交自动触发部署构建体系指南(上部)的主要内容,如果未能解决你的问题,请参考以下文章

CI/CD技术专题「Jenkins实战系列」总结归纳Jenkins的安装使用和配置流程介绍

CI/CD技术专题「Jenkins实战系列」jenkins+pipeline构建自动化部署

CI/CD技术专题「Jenkins实战系列」重塑Jenkins服务进行自动合并的方案实现(纠正错误)

CI/CD技术专题「Jenkins实战系列」总结归纳Jenkins的安装使用和配置流程介绍

CI/CD技术专题「Jenkins实战系列」jenkins+pipeline构建自动化部署

CI/CD技术专题「Jenkins实战系列」Jenkinsfile+DockerFile实现自动部署