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

Gitlab配置

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

  • 按下图步骤创建账号的 access token , 用于 Jenkins 调用 GitLab 的 API


    记下生成的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=""/>

安装插件

配置Jenkins Gitlab

  • 添加Gitlab凭证

  • 配置Gitlab连接

  • 配置项目

  • 参数说明

    • 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

  • 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查看

完成

额外配置

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

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

代码:

/usr/bin/rsync -arvzut --delete --exclude-from=./exclude_rules --progress ${SRC} ${REMOTE_USER}@${REMOTE_ADDR}:${DEST}
# 需要过滤的文件
cat ./exclude_rules
- .git/
- .idea/
- .vscode/
- .DS_Store
Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐