使用 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号
浙公网安备 33010602011771号