CI/CD - Docker + Jenkins 本地搭建私服 (2)

330 阅读3分钟

前言

前面介绍完 GitLab,现在使用另一款主流的自动化工具 Jenkins。

Jenkins 常用于自动化各种任务,包括构建、测试和部署软件的流程化管理软件是一款插件式的管理软件,方便功能扩展,目前有几百个插件可以使用,覆盖了版本管控、构建工具、代码质量、构建通知、集成外部系统、UI 定制等。

仅从初浅的直观体验来讲,GitLab VS Jenkins 各自优势如下

  • GitLab:一体化解决方案,配置集成简单,UI 交互体验好
  • Jenkins:插件多,定制灵活

流程涉及到的环境和工具:

  • 环境:本地 localhost
  • Docker: 版本 24.0.5
  • GitLab CE: 版本 16.4.1
  • Jenkins: 版本 2.414.2

思路

  • Docker 本地启动 GitLab,Jenkins 两个容器
  • 在 GitLab 创建一个前端项目
  • 在 Jenkins 新建一个任务,与 GitLab 建立关联
  • 当有代码推送到 GitLab,Jenkins 将收到通知开始执行 pipeline 任务

GitLab

具体请移步 GitLab 配置,可以直接复用上节

Jenkins

安装 Jenkins 需要的插件

  • GitLab Plugin:与 GitLab 集成相关
  • NodeJS:支持 NodeJS,shell 包含 npm 命令
  • Publish Over SSH:负责将构建后的文件发送到远程服务器

具体步骤 manage jenkins => plugin => available plugin,输入插件名称

步骤

Jenkins 启动

  1. 本地使用 Docker 启动 Jenkins 容器
docker run \
  -u root \
  --privileged \
  --name cicd_jenkins \
  -d \
  -p 8080:8080 \
  -p 50000:50000 \
  -v ~/jenkins_home:/var/jenkins_home \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v $(which docker):/usr/bin/docker \
  jenkins/jenkins:lts
  1. 访问 localhost:8080,初始密码进入容器内部使用 cat /var/jenkins_home/secrets/initialAdminPassword 获取,点击下一步

  2. 选择默认安装的插件,待完成后,跳到如下页面,按信息填写即可。一定要记得 username + password 后面要与 GitLab 集成,我因为记岔卡了好一会(哭)

image.png

Jenkins 与 GitLab 集成

建议按 GitLab 官方文档 步骤集成,避免版本更新导致操作对不上

  1. 在 GitLab 上创建一个 Jenkins access token,有 personal、project、group 三种 scope,我选择仅适用于当前项目的 project 类型,文档参考

image.png

  1. 在 Jenkins 配置 GitLab token,点击 manage jenkins => system 页面下滑到 GitLab 版块

image.png

image.png

按下面信息填写完后,点击底部 Test Connection 测试连接是否成功

  1. 创建一个 Jenkins 项目,输入名称,选择 freestyle project,然后点击 ok。

Builder Triggers 选择如下

image.png

Post-build Actions 选择如下

image.png

  1. 回到 GitLab,创建一个连接 Jenkins server url

Settings => Integrations => Jenkins,按需求填写即可。最终点击下 Test Settings 是否连接成功。

image.png

官方还支持另外一种 webhooks 更通用的方式建立与 Jenkins 项目的关联,文档

shell 脚本

  1. 配置 Jenkins 项目支持 NodeJS 环境

image.png

如果 nodejs installation 为空无法选择,去 manage jenkins > tools > nodejs 设置如下

image.png

  1. 开始写 shell 脚本,docker 打包运行项目: build steps => execute shell
docker build -t jenkins-gitlab-image .
docker run -d -p 8888:80 --name jenkins-gitlab-container jenkins-gitlab-image

项目里要有 Dockfile 和 nginx.conf 配置文件,同上文一样

完成

  1. 点击 build now,最终在 localhost:8888 访问前端页面

上面只是一个简单演示,可以根据自己需求将容器推到指定服务器地址,或是将构建后的静态文件发送到远程服务器,改下脚本内容即可

要注意的问题

  • 地址不要使用 localhost,建议使用 ip 地址,因容器与宿主机有各自的 localhost
  • docker permission
  • Jenkins 与 GitLab 集成容易碰到一些常见问题,可以对照如下一个个定位

image.png