参考
- 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。 - 容器第一次启动的时候会初始化,可能访问对应的管理端口无法访问,所以需要等待一下。
环境
软件/系统 | 版本 | 说明 |
---|---|---|
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 -d
version: '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 中查看,显示正在执行或执行完毕任务。