使用 Docker 搭建 Jenkins 与 GitLab 环境,实现私有 GitLab 项目触发 Webhooks 构建

文章顺序

  1. 使用 Docker 搭建 Jenkins 与 GitLab 环境,实现私有 GitLab 项目触发 Webhooks 构建 (环境搭建)
  2. Window10 通过 SSH 访问 Docker 容器(SSH 连接问题解决)
  3. 基于 Docker 实现 GitLab + Jenkins 编译 Laravel 项目并部署多台服务器(部署实战)

参考

问题/注意事项

  1. GitLab 查看默认后台密码,等待容器初始化完毕后,进入容器(初始化24小时后该文件会被删除):
    cat /etc/gitlab/initial_root_password
    
  2. Jenkins 管理密码在安装成功并初始化完毕后,浏览器访问服务端口8080会提示查看。
    # 当前版本查看位置为 
    cat /var/jenkins_home/secrets/initialAdminPassword
    
  3. 最终 GitLab 请求的 Webhook 地址为 http://Jenkins用户账号:Jenkins用户令牌@jenkins容器名:8080/job/项目名/build ,其中使用 Jenkins 用户信息,所以需要在 Jenkins 上面为该用户创建访问令牌
  4. 解决 GitLab 添加 Webhook 提示 Url is blocked: Requests to the local network are not allowed 的问题。
    管理中心->网络->出站请求->Webhook 和服务可以访问的本地 IP 地址和域名:添加对应的 Jenkins 容器名(需要Jenkins 与 GitLab 在同一docker-compose网络)
  5. Jenkins 需要安装 GitLab 插件,并在设置中 /manage/configure -> GitLab -> 取消选择 Enable authentication for '/project' end-point (之前出现了这个问题,编写教程再次测试的时候没有遇到这个问题)。
  6. Jenkins 拉取 GitLab 的 URL 格式为:http://GitLab用户名:GitLab用户Token@gitlab容器名/GitLab项目所属用户名/GitLab项目名,其中使用 GitLab 用户信息,所以需要在 GitLab 上面为该用户创建 Token 。
  7. 主机拉取 GitLab 代码方式为:127.0.0.1:绑定的端口号,其他同一网络容器拉取代码:GitLab 容器名:端口号
  8. GitLab 发送 Webhook 请求 Jenkins 响应码为 200,但是 Jenkins 未构建。
    Webhook 地址格式不对,正确响应码是201。
  9. 容器第一次启动的时候会初始化,可能访问对应的管理端口无法访问,所以需要等待一下。
  10. 本文 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

步骤

准备工作

  1. 创建 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:
    
    
  2. 查看容器,可以看到已经启动,并在初始化。

    访问对应的服务端口可能无法访问,因为在初始化。

    image

Jenkins 配置

基础配置
  1. 访问 http://localhost:8080/login?from=%2F 根据需要解锁,通过提示获取密码。
    image
  2. 通过 Docker Desktop 进入命令行,执行 cat /var/jenkins_home/secrets/initialAdminPassword 查询密码,获取密码后返回 Jenkins 网页(http://localhost:8080/login?from=%2F)并解锁。
    image
  3. 解锁后,自定义Jenkins选择 安装推荐的插件
    image
  4. 插件安装完毕后,会提示创建管理员,我这边选择了使用admin账户继续
    image
  5. 实例配置 Jenkins URL 使用默认填充的 http://localhost:8080/ ,选择保存并完成
    image
  6. 点击开始使用 Jenkins
    image
项目配置
  1. 进入控制台后选择 新建Item
    image
  2. 设置任务名称与选择Freestyle project后,点击确定。
    image
  3. Configure->General->源码管理->Git->Repositories->Repository URL设置 GitLab 地址,格式为 http://gitlab用户名:gitlab用户令牌@gitlab容器名/root/项目名,设置完成后保存即可。(GitLab 用户令牌获取方式查看本文GitLab 配置部分;其中本地主机拉取代码为 127.0.0.1:gitlab容器映射端口/用户名/项目名,同一网络容器拉取代码为:gitlab容器名:gitlab端口/用户名/项目名
    image
  4. 在项目页面,点击 立即构建,等待构建结束即可在 工作空间 查看拉取到的 GitLab 代码。
    image
用户令牌
  1. 页面顶部:登录用户名下拉->设置
    image
  2. 设置->API Token->添加新的Token
    image
  3. 点击 生成->复制图标 后进行复制。
    image
    image

GitLab 配置

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

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

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

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

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

  2. 选择 从模板创建
    image

  3. 下滑找到 Laravel Framework ,然后点击 使用模板
    image

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

用户令牌
  1. 控制台左上角选择头像->偏好设置
    image
  2. 访问令牌->添加新令牌
    image
  3. 设置令牌名称、到期时间、权限后,点击创建个人访问令牌。(此处我设置的令牌名称为 jenkins ,你可以随意设置。)(此处截图部分遮挡权限为全部选中状态。)
    image
    image
解决 WebHook 添加时 Url is blocked: Requests to the local network are not allowed 错误
  1. 点击 控制台左下角->管理中心
    image

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

  3. 配置出站请求并点击保存更改。

    • 允许来自 webhooks 和集成对本地网络的请求
    • 允许系统钩子向本地网络发送请求
    • Webhook 和服务可以访问的本地 IP 地址和域名:jenkins容器名。
      image
配置 WebHook
  1. 项目页面左侧选择: 设置-> WebHooks
    image
  2. 点击 添加新的 WebHook
    image
  3. 配置:URL、触发来源、SSL验证 后点击添加webhook。(URL格式为:http://Jenkins用户名:Jenkins用户Token@Jenkins容器名:Jenkins容器端口/job/Jenkins任务名称/build ,其中Jenkins用户Token获取方式参考本文Jenkins配置相关内容)
    image

测试

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

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

posted @ 2024-02-17 12:43  夏秋初  阅读(565)  评论(0)    收藏  举报