概述
Java 编写的最广泛使用的开源持续集成工具 & 广泛的第三方插件支持 & 分布式构建
自动化
正常开发流程
- 开发
- 提交代码
- CI运行自动化测试
- 点击按钮进行部署
上线后出问题
点击按钮进行回滚
war包安装 Jenkins
- 简单方便
- 和服务器环境绑定
- 需要配置服务
- 运行的构建命令直接使用服务器的命令
Docker 安装 Jenkins
- 运行在容器中,无法直接调用宿主机的命令
- 和服务器环境隔离
如何排查问题
- 看日志
- 查看 Jenkins 的构建目录
- Docker 版的 Jenkins,想清楚问题发生在哪里
手工创建任务
指定一个任务的详细步骤
- 优点 => 简单方便
- 缺点 => 重复 & 构建过程没有被版本控制
Jenkinsfile 创建任务
使用代码指定任务要如何运行
- 优点 => 构建过程也被版本控制起来,方便回滚
- 缺点 => 稍显麻烦
搭建 Jenkins
前期准备
- 任何的一个项目 => 此项目中有 Dockerfile 和 Jenkinsfile,用于相关配置
- 两台服务器
- 服务器A(大陆):用于上线你的应用以及搭建docker私服
- 服务器B(香港):用于搭建Jenkins。代码放置在 Github 上,大陆服务器 pull 不下来
- 注:临时服务器可以购买按流量收费的,速度快又便宜
服务器设置
服务器B

Server HongKong
- 主IPv4公网IP: 43.132.196.139
- 打开 8080 端口,用于访问 Jenkins
- 生成 ssh key
服务器A

Server
- 主IPv4公网IP: 118.195.243.156
- 打开 8080 端口,用于访问 Jenkins
- 打开 5000 端口,用于访问 docker 私服
- 打开 8080 端口,用于访问服务
- 将服务器B的公钥绑定服务器,用于服务器B可以登录服务器A
- 配置 docker => docker 可以拉取私服镜像
vi /etc/docker/daemon.json{ "insecure-registries" : ["http://118.195.243.156:5000"] }
搭建 docker 私服
- 登录服务器A
- 安装 Docker
- 例:Install On Centos => 推荐查看 官方文档 安装
yum install -y yum-utilsyum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repoyum install docker-ce docker-ce-cli containerd.io docker-compose-pluginyum install docker-ce-20.10.9 docker-ce-cli-20.10.9 containerd.io docker-compose-pluginsystemctl start docker
docker pull registrydocker run -d -p 5000:5000 --restart always --name registry registry:2- 访问
http://118.195.243.156:5000/v2/,如果看到{ }即成功
搭建 Jenkins
- 登录服务器B
- 安装 Docker
- 例:Install On Centos => 推荐查看 官方文档 安装
yum install -y yum-utilsyum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repoyum install docker-ce docker-ce-cli containerd.io docker-compose-pluginyum install docker-ce-20.10.9 docker-ce-cli-20.10.9 containerd.io docker-compose-pluginsystemctl start docker
- 安装 Jenkins
- 推荐查看 官方文档 安装
docker network create jenkinsdocker run --name jenkins-docker --rm --detach --privileged --network jenkins --network-alias docker -e DOCKER_TLS_CERTDIR=/certs -v jenkins-docker-certs:/certs/client -v jenkins-data:/var/jenkins_home -p 2376:2376 docker:dind --storage-driver overlay2 --insecure-registry=118.195.243.156:5000mkdir jenkinscd jenkins && touch Dockerfilevi Dockerfile- 将下面的内容粘贴到 Dockerfile
FROM jenkins/jenkins:2.332.3-jdk11 USER root RUN apt-get update && apt-get install -y lsb-release RUN curl -fsSLo /usr/share/keyrings/docker-archive-keyring.asc \ https://download.docker.com/linux/debian/gpg RUN echo "deb [arch=$(dpkg --print-architecture) \ signed-by=/usr/share/keyrings/docker-archive-keyring.asc] \ https://download.docker.com/linux/debian \ $(lsb_release -cs) stable" > /etc/apt/sources.list.d/docker.list RUN apt-get update && apt-get install -y docker-ce-cli USER jenkins RUN jenkins-plugin-cli --plugins "blueocean:1.25.3 docker-workflow:1.28"docker build -t myjenkins-blueocean:2.332.3-1 .docker run --name jenkins-blueocean --restart=on-failure --detach --network jenkins --env DOCKER_HOST=tcp://docker:2376 -e DOCKER_CERT_PATH=/certs/client -e DOCKER_TLS_VERIFY=1 -p 8080:8080 -p 50000:50000 -v jenkins-data:/var/jenkins_home -v jenkins-docker-certs:/certs/client:ro myjenkins-blueocean:2.332.3-1
- 获取 admin 账号的密码 =>
docker logs jenkins-blueocean或者进入 Jenkins Container(docker exec -it jenkins-blueocean sh+cat /var/jenkins_home/secrets/initialAdminPassword)
[图片上传失败...(image-b02924-1654689659890)] - 打开网址
http://<服务器B ip>:8080=>http://43.132.196.139:8080,即可看到 Jenkins,输入账号密码后会进入选择插件页面,关闭即可。
Jenkins Init - 安装插件 => Manage Jenkins > Manage Plugins > Available
- SSH Agent => 用于登录其他服务器
- Pipeline Utility Steps => 用于使用一些插件 ,如 zip
- 配置 Global credentials => Manage Jenkins > Manage Credentials
- 添加一个类型为 Username with password 的 credential。用于拉取代码。其中的 password,可以从 GitHub 的 Access Token 中获取
GitHub Access Token
Username & Password credential - 添加一个类型为 SSH Username with private key 的 credential。用于登录其他服务器,可是使用服务器B生成的 ssh 私钥
SSH Username with private key credential -
结果如下图
Credentials
- 添加一个类型为 Username with password 的 credential。用于拉取代码。其中的 password,可以从 GitHub 的 Access Token 中获取
-
添加项目,多流水分支线,之后选择从 GitHub 中获取源代码,之后选择 credential 和填写 url
Create a job
Job
Scan -
扫描
Scan - build 即可
-
deploy 时需要同意一些脚本的运行
deploy error
approve - 如果 build 时遇到了以下错误。解决方法:进行 docker volume 映射,即在启动 myjenkins-blueocean 时添加
-v $(which docker):/usr/bin/docker,你需要删除所有的 docker container,并删除相关数据(docker volume rm jenkins-data+docker volume rm jenkins-docker-certs)
docker not found -
如果遇到这个错误,那就是没有将服务器B的公钥绑定到服务器A上了
Permission denied - 如果遇到下面这个错误,那就是没有在服务器A上配置 docker。配置之后重启docker =>
systemctl enable docker
Error - 成功之后可以访问
http://118.195.243.156:8080/test
Hello World
知识点
- 灰度测试
- A/B测试
- 如果服务器在大陆,可以添加 jenkins
镜像仓库:https://gitlab.com/jenkins-zh/update-center-mirror/raw/master/tsinghua/current/update-center.json - 持续集成 => Continuous Integration => 运行
mvn test跑自动化测试 - 查看docker私服所有的镜像 =>
http://<IP>:5000/v2/_catalog














