使用 Docker 搭建 Jenkins 与 GitLab 环境,实现私有 GitLab 项目触发 Webhooks 构建
文章顺序
- 使用 Docker 搭建 Jenkins 与 GitLab 环境,实现私有 GitLab 项目触发 Webhooks 构建 (环境搭建)
- Window10 通过 SSH 访问 Docker 容器(SSH 连接问题解决)
- 基于 Docker 实现 GitLab + Jenkins 编译 Laravel 项目并部署多台服务器(部署实战)
参考
- https://blog.csdn.net/xueqinglalala/article/details/120883554
- https://blog.csdn.net/anqixiang/article/details/104968469
- https://dirask.com/questions/Gitlab-Jenkins-how-to-fix-Error-403-No-valid-crumb-was-included-in-the-request-DWewGj
- https://www.zhihu.com/question/485285429
- https://blog.csdn.net/u010773514/article/details/131186708
问题/注意事项
- GitLab 查看默认后台密码,等待容器初始化完毕后,进入容器(初始化24小时后该文件会被删除):
cat /etc/gitlab/initial_root_password - Jenkins 管理密码在安装成功并初始化完毕后,浏览器访问服务端口8080会提示查看。
# 当前版本查看位置为 cat /var/jenkins_home/secrets/initialAdminPassword - 最终 GitLab 请求的 Webhook 地址为
http://Jenkins用户账号:Jenkins用户令牌@jenkins容器名:8080/job/项目名/build,其中使用 Jenkins 用户信息,所以需要在 Jenkins 上面为该用户创建访问令牌。 - 解决 GitLab 添加 Webhook 提示 Url is blocked: Requests to the local network are not allowed 的问题。
管理中心->网络->出站请求->Webhook 和服务可以访问的本地 IP 地址和域名:添加对应的 Jenkins 容器名(需要Jenkins 与 GitLab 在同一docker-compose网络) Jenkins 需要安装 GitLab 插件,并在设置中(之前出现了这个问题,编写教程再次测试的时候没有遇到这个问题)。/manage/configure->GitLab-> 取消选择Enable authentication for '/project' end-point- Jenkins 拉取 GitLab 的 URL 格式为:
http://GitLab用户名:GitLab用户Token@gitlab容器名/GitLab项目所属用户名/GitLab项目名,其中使用 GitLab 用户信息,所以需要在 GitLab 上面为该用户创建 Token 。 主机拉取 GitLab 代码方式为:127.0.0.1:绑定的端口号,其他同一网络容器拉取代码:GitLab 容器名:端口号。- GitLab 发送 Webhook 请求 Jenkins 响应码为 200,但是 Jenkins 未构建。
Webhook 地址格式不对,正确响应码是201。 - 容器第一次启动的时候会初始化,可能访问对应的管理端口无法访问,所以需要等待一下。
- 本文 jenkins 与 gitlab 没有挂载本地文件夹,数据存在风险。
环境
| 软件/系统 | 版本 | 说明 |
|---|---|---|
| Windows | Windows 10 专业版 22H2 19045.4046 | |
| Docker Desktop | 4.27.1 | |
| Docker | 25.0.2 | |
| Docker Compose | v2.24.3-desktop.1 | |
| Jenkins | 2.426.2-jdk17 | |
| GitLab | 16.9.0-ce.0 |
步骤
准备工作
-
创建 docker-compose-base.yml 文件,命令启动:
docker-compose -f docker-compose-base.yml up -dversion: '3' services: jenkins: image: jenkins/jenkins:2.426.2-jdk17 networks: - base-network container_name: jenkins ports: - 8080:8080 - 50000:50000 gitlab: image: gitlab/gitlab-ce:16.9.0-ce.0 networks: - base-network container_name: gitlab ports: - 10443:443 - 1080:80 networks: base-network: -
查看容器,可以看到已经启动,并在初始化。
访问对应的服务端口可能无法访问,因为在初始化。

Jenkins 配置
基础配置
- 访问
http://localhost:8080/login?from=%2F根据需要解锁,通过提示获取密码。

- 通过 Docker Desktop 进入命令行,执行
cat /var/jenkins_home/secrets/initialAdminPassword查询密码,获取密码后返回 Jenkins 网页(http://localhost:8080/login?from=%2F)并解锁。

- 解锁后,自定义Jenkins选择
安装推荐的插件。

- 插件安装完毕后,会提示创建管理员,我这边选择了
使用admin账户继续。

- 实例配置 Jenkins URL 使用默认填充的 http://localhost:8080/ ,选择
保存并完成。

- 点击
开始使用 Jenkins

项目配置
- 进入控制台后选择
新建Item

- 设置
任务名称与选择Freestyle project后,点击确定。

- 在
Configure->General->源码管理->Git->Repositories->Repository URL设置 GitLab 地址,格式为http://gitlab用户名:gitlab用户令牌@gitlab容器名/root/项目名,设置完成后保存即可。(GitLab 用户令牌获取方式查看本文GitLab 配置部分;其中本地主机拉取代码为127.0.0.1:gitlab容器映射端口/用户名/项目名,同一网络容器拉取代码为:gitlab容器名:gitlab端口/用户名/项目名)

- 在项目页面,点击
立即构建,等待构建结束即可在工作空间查看拉取到的 GitLab 代码。

用户令牌
- 页面顶部:
登录用户名下拉->设置。

设置->API Token->添加新的Token。

- 点击
生成->复制图标后进行复制。


GitLab 配置
基本配置
-
通过 Docker Desktop 进入命令行,执行
cat /etc/gitlab/initial_root_password获取密码(24小时后会自动删除):

-
访问
http://localhost:1080/users/sign_in,账号名为 root,密码为上一步获取的密码。

-
登录成功后,界面默认英文,控制台左上角选择
头像->Preferences

-
找到
Localization,选择中文简体后,点击Save Changes进行保存。

新建项目
-
返回控制台首页
http://localhost:1080/,选择创建项目。

-
选择
从模板创建。

-
下滑找到 Laravel Framework ,然后点击
使用模板

-
配置项目名称,项目所属用户,项目标识串,可见性级别等,设置完毕后点击
新建项目。(此处项目名设置为 testlaravel,你可以随意设置。)

用户令牌
- 控制台左上角选择
头像->偏好设置

访问令牌->添加新令牌

- 设置令牌名称、到期时间、权限后,点击
创建个人访问令牌。(此处我设置的令牌名称为 jenkins ,你可以随意设置。)(此处截图部分遮挡权限为全部选中状态。)


解决 WebHook 添加时 Url is blocked: Requests to the local network are not allowed 错误
-
点击 控制台左下角->
管理中心。

-
点击 控制台左下角->
设置->网络

-
配置出站请求并点击保存更改。
- 允许来自 webhooks 和集成对本地网络的请求
- 允许系统钩子向本地网络发送请求
- Webhook 和服务可以访问的本地 IP 地址和域名:jenkins容器名。

配置 WebHook
- 项目页面左侧选择:
设置->WebHooks。

- 点击 添加新的
WebHook。

- 配置:URL、触发来源、SSL验证 后点击
添加webhook。(URL格式为:http://Jenkins用户名:Jenkins用户Token@Jenkins容器名:Jenkins容器端口/job/Jenkins任务名称/build ,其中Jenkins用户Token获取方式参考本文Jenkins配置相关内容)

测试
-
GitLab 项目中,进入
设置->WebHooks,点击测试->推送事件后提示 201 即成功触发 WebHook 。


-
Jenkins 中查看,显示正在执行或执行完毕任务。

博 主 :夏秋初
地 址 :https://www.cnblogs.com/xiaqiuchu/p/18017583
如果对你有帮助,可以点一下 推荐 或者 关注 吗?会让我的分享变得更有动力~
转载时请带上原文链接,谢谢。
地 址 :https://www.cnblogs.com/xiaqiuchu/p/18017583
如果对你有帮助,可以点一下 推荐 或者 关注 吗?会让我的分享变得更有动力~
转载时请带上原文链接,谢谢。

浙公网安备 33010602011771号