在 Jenkins 中配置 gitlab 触发器

本篇博客详细介绍了在 Jenkins 中配置 Gitlab 触发器的过程,从而使得当我们向 gitlab 提交代码时,打上标签,就可以直接触发构建。

操作和配置

1、在 Jenkins 和 Gitlab 之间配置触发构建,希望在 Gitlab 上提交代码时,打上标签提交时,触发该工程在 Jenkins 中的构建。

1)在 GitLab 中使用管理员账户,生成 GitLab API Token,

在 Jenkins 中,系统设置 -> Add Credentials 中,添加用于认证的 Credentials

使得 Jenkins 可以访问 GitLab 的 API 接口。

2)在 Jenkins 中,选中 Build when a change is pushed to GitLab(此处需要使用插件 Gitlab Hook),将 GitLab webhook URL 地址

填写至 GitLab 工程的 设置 ->集成 中 Web hook 下的 链接 输入框中;

在 Jenkins 中,Build when a change is pushed to GitLab 下,点击 Advanced,再点击 Generate

将生成的 Secret token 填写至 GitLab 工程 设置 -> 集成 中 Web hook 下的 安全令牌 输入框中

在触发器部分,取消 推送事件 触发器,选择 标签推送事件 触发器触发。

保存后,可进行测试。

3)在项目 设置 -> 仓库 -> 部署秘钥 -> 展开,使用 Jenkins 所在机器的公钥创建部署秘钥并为当前工程启用之。

2、使用 Jenkins 进行应用的持续集成并构建 docker 镜像,想使用推送代码时的标签迁出代码并以标签作为镜像版本,可以安装 Git Tag Message Plugin 插件来实现。

安装 Jenkins Git Plugin 插件后,默认可以获取如下 7 个环境变量:

  • GIT_COMMIT:对当前 Git 提交的安全哈希算法(SHA)的引用;
  • GIT_COMMITTER_NAME(GIT_AUTHOR_NAME):发布新 Git 提交时使用的名称;
  • GIT_COMMITTER_EMAIL(GIT_AUTHOR_EMAIL):发布新的 Git 提交时使用的电子邮件地址;
  • GIT_URL:远程 Git 仓库的基本名称;
  • GIT_URL_N:如果正在使用多个远程 Git 仓库,这将以数字方式列出它们;
  • GIT_BRANCH:Jenkins Git 插件正在操作的当前 Git 分支的名称;
  • GIT_LOCAL_BRANCH:本地 Git 分支的名称,当 Jenkins Git 插件中 “checkout to specific local branch” 选项被选中的时候;
  • GIT_PREVIOUS_COMMIT:当前分支上前一个提交的 id;
  • GIT_PREVIOUS_SUCCESSFUL_COMMIT:这个变量将会输出最后一次成功的构建时提交的哈希值;

安装 Git Tag Message Plugin 后,可以在脚本中使用环境变量 GIT_TAG_NAMEGIT_TAG_MESSAGE 来获取代码提交的标签信息,只迁出该提交的代码进行集成。

如果该方法失效,可以直接在 shell 脚本中使用环境变量获取提交代码得标签

1
2
3
4
5
tag=${gitlabSourceBranch##*/}
if [ -z "$tag" ];then
  echo "the absent of git tag"
  exit 1
fi

3、配置钉钉通知构建结果

1)安装 Dingding 插件

2)增加 Post-build Actions,添加钉钉通知器配置

4、从 Jenkins 向需要授权的 docker registry 中推送镜像 安装 docker-commons 插件,在 系统管理 中,在 docker 部分,添加 docker 镜像仓库的地址,并使用任意有权限的的账户和密码创建 credentials,保存之,即可从 shell 脚本中直接向需要认证的 docker 镜像仓库中推送镜像。

常见问题及解决

1、在 GitLab 中某项目的 设置 -> 集成 中配置 Jenkins webhook,配置完成后点击 Test,报错如下:

Hook execution failed: URL 'https://jenkins.xdhuxc.com/project/transform' is blocked: Requests to the local network are not allowed

解决:在 管理员区域设置 下,在 Outbound requests部分,选择 Allow requests to the local network from hooks and services,然后保存之。

参考链接:https://gitlab.com/gitlab-org/gitlab-ce/issues/46490

updatedupdated2019-12-142019-12-14
加载评论