天天看点

Jenkins+Gitlab CICD流程配置Jenkins+Gitlab CICD自动触发构建配置

Jenkins+Gitlab CICD自动触发构建配置

Gitlab配置

注册账号什么的就不赘述了, 建一个测试项目或者选择已有的项目, 随便 commit 几条内容

  • 按下图步骤创建账号的 access token , 用于 Jenkins 调用 GitLab 的 API
    Jenkins+Gitlab CICD流程配置Jenkins+Gitlab CICD自动触发构建配置
    Jenkins+Gitlab CICD流程配置Jenkins+Gitlab CICD自动触发构建配置
    记下生成的

    token

Jenkins安装配置

下载Jenkins: 下载地址

现在后解压到目录即可

配置JAVA_HOME

安装JDK在此不再说明,自己搜索安装即可

cat ~/.bash_profile
# 增加或者更改如下内容即可
PATH=$PATH:$HOME/.local/bin:$HOME/bin
export JAVA_HOME=/workbase/software/jdk1.8
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
           

配置Tomcat 8

安装Tomcat同样不再说明

注意: 更改${TOMCAT_HOME}/conf/server.xml配置

<!--<Listener className="org.apache.catalina.core.JasperListener" />-->
  <Listener className="org.apache.catalina.startup.VersionLoggerListener" />

<Host name="localhost"  appBase="webapps" unpackWARs="true" >
    <!-- docBase 替换为自己的目录即可 -->
    <Context crossContext="true" docBase="/workbase/software/jenkins.war" reloadable="true" allowLinking="true" path=""/>
           

安装插件

  • Git Parameter ( 用于参数化构建中动态获取项目分支 )
  • Generic Webhook Trigger ( 用于解析 Webhook 传过来的参数 )
  • GitLab ( 用于推送构建结果给 GitLab )

配置Jenkins Gitlab

  • 添加Gitlab凭证
    Jenkins+Gitlab CICD流程配置Jenkins+Gitlab CICD自动触发构建配置
  • 配置Gitlab连接
    Jenkins+Gitlab CICD流程配置Jenkins+Gitlab CICD自动触发构建配置
  • 配置项目
    Jenkins+Gitlab CICD流程配置Jenkins+Gitlab CICD自动触发构建配置
  • 参数说明
    • GitLab Connection 选择上面添加的 GitLab 连接 ( Jenkins )
    • 勾选 参数化构建过程, 添加

      Git Parameter

      类型的参数

      ref

      , 这样构建的时候就可以指定分支进行构建。
    • Source Code Management

      选择

      Git

      , 添加项目地址和授权方式 ( 帐号密码 或者 ssh key ) , 分支填写构建参数

      $ref

      如果选择

      sshkey

      的方式需要在

      Jenkins

      服务器启动

      jenkins

      服务的用户生成公钥配置在

      GitLab

      服务器上。
    • Build Triggers 选择 Generic Webhook Trigger 方式用于解析 GitLab 推过来的详细参数。
      • ref

        : 通过

        Gitlab API

        请求

        Request body

        中获取

        $.ref

        获取分支或者tag
      • object_kind

        : 通过

        Gitlab API

        请求

        Request body

        中获取

        $.object_kind

        操作类型
      • git_ssh_url

        :通过

        Gitlab API

        请求

        Request body

        中获取

        $.project.git_ssh_url

        项目的ssh地址
      • commits_id

        : 通过

        Gitlab API

        请求

        Request body

        中获取

        $.commits[0].id

        该次提交的

        ID

      • Token

        : 自己通过shell随机生成一个即可,也可以自定义任意值
      • Optional filter

        : 使用正则表达式对 Text 进行匹配, 匹配成功才允许触发构建
        • Expression

          :预设的待匹配项
        • Text

          : 匹配的内容
    • Build 内容按自己实际的项目类型进行调整, 使用 Maven 插件 或 脚本 等等。
    • Post-build Actions 添加 Publish build status to GitLab 动作, 实现构建结束后通知构建结果给 GitLab
  • Gitlab

    添加

    webhooks

Jenkins+Gitlab CICD流程配置Jenkins+Gitlab CICD自动触发构建配置
  • GitLab 的项目页面中, 添加一个 Webhook ( http://JENKINS_URL/generic-webhook-trigger/invoke?token=<上面 Jenkins 项目配置中的 token> ) , 触发器选择 标签推送事件。

创建完成点击测试如果报错如下:

Requests to the local network are not allowed
           

解决办法: 允许 GitLab 本地网络发送 Webhook 请求

新建任务测试

  • 本地推送tag到远程
git push moshu stable_production-20200305
           
  • GitLab

    中查看

GitLab

页面可以看到触发了 Webhook , View details 查看请求详情, Response body 中 triggered 字段值为 true 则表示成功触发了 Jenkins 进行构建

  • Gitlab

    查看构建结果
Jenkins+Gitlab CICD流程配置Jenkins+Gitlab CICD自动触发构建配置
  • Jenkins

    查看
Jenkins+Gitlab CICD流程配置Jenkins+Gitlab CICD自动触发构建配置

完成

额外配置

Jenkin进行Git检出的代码有存在与本地不同的情况(有一些大文件不需要提交,但是在打包又会用到),这种情况如何处理?

我处理的方式: 使用rsync同步文件的功能将本地的文件推送到Jenkins Git检出的目录,并且保持与本地同步(配合.gitignore进行使用)

代码:

# 需要过滤的文件
cat ./exclude_rules
- .git/
- .idea/
- .vscode/
- .DS_Store