目录
[1、部署 Jenkins](#1、部署 Jenkins)
[安装配置 Jenkins](#安装配置 Jenkins)
[解锁 Jenkins](#解锁 Jenkins)
[安装 Jenkins 插件](#安装 Jenkins 插件)
[2、Jenkins 从 GitLat 拉取代码](#2、Jenkins 从 GitLat 拉取代码)
[安装 Jenkins 插件](#安装 Jenkins 插件)
[在 node-16 上生成密钥对](#在 node-16 上生成密钥对)
[把公钥配置到 gitlab 上](#把公钥配置到 gitlab 上)
[把 root 用户私钥配置到 jenkins 上](#把 root 用户私钥配置到 jenkins 上)
[Jenkins 创建一个任务](#Jenkins 创建一个任务)
[Jenkins 测试拉取代码](#Jenkins 测试拉取代码)
[3、将代码发布到 Web 服务器上](#3、将代码发布到 Web 服务器上)
[把脚本添加到 Jenkins 中](#把脚本添加到 Jenkins 中)
[Jenkins 上配置触发器](#Jenkins 上配置触发器)
[在gitlab项目 配置 webhook](#在gitlab项目 配置 webhook)
[5、使用 Build Pipeline 插件显示流程图](#5、使用 Build Pipeline 插件显示流程图)
[安装 Build Pipeline 插件](#安装 Build Pipeline 插件)
1、部署 Jenkins
安装配置 Jenkins
阿里:jenkins-redhat-stable安装包下载_开源镜像站-阿里云
清华软件站:Index of /jenkins/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror
# 安装依赖包
yum install -y fontconfig java-11-openjdk
# 安装 jekins
yum install -y jenkins-2.387.3-1.1.noarch.rpm
# 修改配置文件
vim /etc/sysconfig/jenkins
JENKINS_USER="root" #修改默认运行账号
# 启动 jenkins
systemctl start jenkins
systemctl enable jenkins
systemctl status jenkins
# 查看端口:Jenkins 默认使用 8080 端口
netstat -antup | grep 8080
# 更改 jenkins 插件下载地址
# 更改 jenkins 插件下载地址为清华源,加快下载速度
sed -i 's/https:\/\/updates.jenkins.io\/download/http:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g' /var/lib/jenkins/updates/default.json && \
sed -i 's/http:\/\/www.google.com/https:\/\/www.baidu.com/g' /var/lib/jenkins/updates/default.json
systemctl restart jenkins
解锁 Jenkins
访问Jenkins:192.168.137.116:8080
4f9fbaced802496ca0bc57d53bda347a
安装 Jenkins 插件
选择默认即可,会安装通用的社区插件,剩下的可以在使用的时候再进行安装。
**注意:**如果在这里安装插件需要连网才能下载插件。
创建管理员账号
这里创建一个账号,如果点击的是使用 admin 账号继续,那么 admin 的密码就是刚才的激活密码。
手动安装插件
国内源https://mirrors.tuna.tsinghua.edu.cn/jenkins/plugins/
修改默认插件地址为国内源
https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
2、Jenkins 从 GitLat 拉取代码
安装 Jenkins 插件
需要安装以下插件:
|--------------------------------|---------------------------|
| Credentials Plugin | 签名证书管理插件(默认已经安装) |
| Gitlab Plugin | 安装后从 gitlab 获取代码 |
| Git Plugin 和 Git Client Plugin | 用于 jenkins 在 gitlab 中拉取源码 |
| GitLab Hook | gitlab 触发 jenkins 构建项目 |
| Gitlab Authentication | gitlab 和 jenkins 认证相关的插件 |
| SSH Plugin | 进程执行 shell 脚本 |
| Publish Over SSH | 用于通过 ssh 部署应用 |
① 安装 GitLab 插件
② 安装 Git 插件
Git 插件默认也已经安装,不用管
③ 安装 SSH 插件
在 node-16 上生成密钥对
把公钥配置到 gitlab 上
cat .ssh/id_rsa.pub
测试发现不需要密码就可以直接 clone 项目,免密 clone OK!
把 root 用户私钥配置到 jenkins 上
root 公钥在 gitlab,root 私钥在 jenkins,这样 jenkins 就可以直接拉取 gitlab 上的代码。
全局凭证(不受限制)
Jenkins 创建一个任务
分支 要么是 /master*,要么是** */main
注意 **:**如果设置git仓库出现如上错误,请拷贝主机的 known 文件到 jenkins 用户家目录下
cp .ssh/known_hosts /var/lib/jenkins/.ssh/known_hosts
Jenkins 测试拉取代码
3、将代码发布到 Web 服务器上
可以通过执行命令或脚本的方式进行代码发布,我使用 root 用户在各个 web 服务器上发布代码。大家也可以建立一些普通用户如果 www 或 apache 来发布。 如果使用普通用户发布代码,要保持所有服务器上的用户 id 一致,这样没有权限 的问题。 我们这里直接使用 root 用户来发布。
部署服务,配置免密、提权
①部署 apache 服务
# 在node-17、16上安装apache
yum install -y httpd
systemctl start httpd
②配置 免密登录
需要 jenkins 自动发布代码的服务器都需要配置免密认证
ssh-copy-id root@192.168.137.117
ssh-copy-id root@192.168.137.116
③配置 jenkins 用户 sudu 权限
[root@node-17 ~] visudo
jenkins ALL=(ALL) NOPASSWD: /usr/bin/ssh
创建自动上传web的脚本
# 创建自动上传 web 代码的脚本
vim deploy.sh
#------------------------------------------------
#!/bin/bash
echo $USER
cd /var/lib/jenkins/workspace/web-test
scp -r ./* root@192.168.1.12:/var/www/html/
scp -r ./* root@192.168.1.13:/var/www/html/
#------------------------------------------------
chmod +x deploy.sh
把脚本添加到 Jenkins 中
在 jenkins "增加构建步骤"写入上传代码脚本,方便 jenkins 使用脚本自动部署。
测试构建
4、实战:更新Gitlab代码触发Jenkins自动构建
实战场景:在公司的测试环境当中,当开发人员向 gitlab 仓库提交代码后,gitlab 自动通知 jenkins 进行构建项目、代码质量测试然后部署至测试环境,这里先暂时部署到测试环境。对于生产环境,后期使用手动部署代码。
配置身份验证令牌
需要安装的插件: Gitlab Hook Plugin(之前已经安装过)、Build Authorization Token Root 和 Build Token Trigger
# 生成身份令牌:在 jenkins 服务器上生成 Token,openssl rand 生成随机密码
[root@node-17 ~] openssl rand -hex 12 # 779a3654b0dbb0e71cf65659
- -hex:输出结果为 16 进制数据; 数字 12 是指定生成的随机字符为 12 字节, 即 24 个 16 进制个数。
Jenkins 上配置触发器
在gitlab项目 配置 webhook
URL格式:http://jenkins 地址/buildByToken/build?job=jenkins 项目名&token=token 值
http://192.168.137.117:8080/buildByToken/build?job=test&token=779a3654b0dbb0e71cf65659
**解决:**这是因为 gitlab 10.6 版本以后为了安全,不允许向本地网络发送 webhook 请求, 如果想向本地网络发送 webhook 请求,则需要使用管理员帐号登录,去修改配置。
综合测试:同步远程web项目
使用我们的 windows 客户端和 linux 客户端都可以,我这里使用 windows 客户端