快速搭建 Jenkins 平台
一、所需环境
我的是 轻应用服务器(CPU - 4 核 内存 - 16GB) -
你学习用途可以不用那么高, 轻应用服务器 2 核 内存 4GB 基本可以
Jenkins 官网-系统要求 https://www.jenkins.io/zh/doc/book/installing/
最低推荐配置:
256MB可用内存
1GB可用磁盘空间(作为一个Docker容器运行jenkins的话推荐10GB)
为小团队推荐的硬件配置:
1GB+可用内存
50 GB+ 可用磁盘空间
- 云服务 CentOS 操作系统
要查看您的 CentOS 版本,使用 cat 命令查看 /etc/centos-release 文件:
你的 CentOS 版本可以比我这个更高
[root@VM-20-6-centos home]# cat /etc/centos-release
CentOS Linux release 7.9.2009 (Core)
- 云服务器 CentOS 安装
docker
、docker compose
, 版本信息如下
当然可以比我的版本更高
安装 docker
、docker compose
的官方文档地址 https://docs.docker.com/engine/install/centos/
[root@VM-20-6-centos home]# docker --version
Docker version 20.10.21, build baeda1f
[root@VM-20-6-centos home]# docker compose version
Docker Compose version v2.12.2
[root@VM-20-6-centos home]#
二、使用 docker 运行 Jenkins
Jenkins 官网 https://www.jenkins.io/zh/doc/book/installing/
- 创建 Jenkins 目录
mkdir -p /home/jenkins
- docker run 的方式 - 运行 Jenkins
docker network create jenkins_net
docker run -d \
--name aly_jenkins \
--network jenkins_net \
-p 8080:8080 \
-p 50000:50000 \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /home/jenkins/jenkins_home:/var/jenkins_home \
-e VIRTUAL_HOST=jenkins.ffffee.com \
-e VIRTUAL_PORT=8080 \
-e aly_username=root \
-e txy_server_ip=101.42.150.216 \
jenkins/jenkins
这个命令的解析如下:
docker run -d
:使用 Docker 运行一个新的容器,-d
参数表示容器在后台运行,并返回容器 ID。--name aly_jenkins
:设置容器的名字为aly_jenkins
。--network jenkins_net
:指定容器连接到jenkins_net
网络。-p 8080:8080 -p 50000:50000
:映射宿主机与容器的端口,格式为-p <宿主机端口>:<容器内端口>
。-v /var/run/docker.sock:/var/run/docker.sock -v /home/jenkins/jenkins_home:/var/jenkins_home
:挂载宿主机的目录到容器内的目录,格式为-v <宿主机目录>:<容器内目录>
。-e VIRTUAL_HOST=jenkins.ffffee.com -e VIRTUAL_PORT=8080 -e aly_username=root -e txy_server_ip=101.42.150.216
:设置环境变量,格式为-e <环境变量名>=<环境变量值>
。jenkins/jenkins
:要运行的 Docker 镜像。
这个 docker run
命令的作用和你的 docker-compose.yml
文件是相同的。
- docker-compose.yml - 运行 Jenkins
services:
aly_jenkins:
image: jenkins/jenkins
container_name: aly_jenkins
user: root
networks:
- jenkins_net
ports:
- 8080:8080
- 50000:50000
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- /home/jenkins/jenkins_home:/var/jenkins_home
environment:
- VIRTUAL_HOST=jenkins.ffffee.com
- VIRTUAL_PORT=8080
- aly_username=root
- txy_server_ip=101.42.150.216
networks:
jenkins_net:
这个文件是一个 Docker Compose 配置文件,用于定义和配置一个或多个 Docker 容器。
下面将会逐行解析这个文件:
services:
services:
开始定义了你希望 Docker Compose 运行的服务列表。在 Docker Compose 中,一个“服务”基本上就是一个运行特定镜像的容器。
aly_jenkins:
aly_jenkins:
是这个服务的名字。你可以自由地给它命名,只需要这个名字在这个文件中是唯一的即可。
image: jenkins/jenkins
image: jenkins/jenkins
指定了这个服务应该使用哪个 Docker 镜像。在这个例子中,它使用的是公开的 Jenkins 镜像。
container_name: aly_jenkins
container_name: aly_jenkins
设置了 Docker 容器的名字。这个名字在你的 Docker 主机上必须是唯一的。
user: root
user: root
设置了在容器内部运行进程的用户身份。在这个例子中,所有的进程都会以 root 用户身份运行。
networks:
- jenkins_net
networks:
定义了这个服务应该连接到哪些网络。在这个例子中,它连接到一个名为 jenkins_net
的网络。
ports:
- 8080:8080
- 50000:50000
ports:
映射容器的端口到宿主机的端口。在这个例子中,容器的 8080 端口映射到宿主机的 8080 端口,容器的 50000 端口映射到宿主机的 50000 端口。
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- /home/jenkins/jenkins_home:/var/jenkins_home
volumes:
挂载宿主机的目录或文件到容器中。在这个例子中,宿主机的 /var/run/docker.sock
文件被挂载到容器的同一位置,宿主机的 /home/jenkins/jenkins_home
目录被挂载到容器的 /var/jenkins_home
目录。
environment:
- VIRTUAL_HOST=jenkins.ffffee.com
- VIRTUAL_PORT=8080
- aly_username=root
- txy_server_ip=101.42.150.216
environment:
设置环境变量。在这个例子中,设置了四个环境变量:VIRTUAL_HOST
,VIRTUAL_PORT
,aly_username
,txy_server_ip
。
networks:
jenkins_net:
networks:
定义了 Docker Compose 应该创建的网络。在这个例子中,它创建了一个名为 jenkins_net
的网络。
- 进入 Jenkins 目录
cd /home/jenkins/
- 创建 docker-compose.yml
touch docker-compose.yml
- 写入 docker-compose.yml 内容
vim docker-compose.yml
CTEL + V 或者 Windows 鼠标右键,把剪切板内容粘贴上去
英文状态下
- ESC 键
- Ctrl + : 键 - 输入 wq
- 回车
- 查看是否写入 docker-compose.yml
cat docker-compose.yml
- 使用 docker compose 启动 Jenkins
docker compose up -d
[root@VM-20-6-centos jenkins]# docker compose up -d
[+] Running 14/14
⠿ aly_jenkins Pulled
⠿ 34df401c391c Pull complete
⠿ 77112ac9b508 Pull complete
⠿ 9523019861c2 Pull complete
⠿ 8f223c71f218 Pull complete
⠿ 4e1229fae46c Pull complete
⠿ 3b06bbef91e1 Pull complete
⠿ 06e9e0811252 Pull complete
⠿ 5600a22169a2 Pull complete
⠿ 161df662cb15 Pull complete
⠿ 99ac35e9b178 Pull complete
⠿ 1a672221424a Pull complete
⠿ be697b0f60e7 Pull complete
⠿ 3f4ea89b49ee Pull complete
[+] Running 2/2
⠿ Network jenkins_jenkins_net Created 0.0s
⠿ Container aly_jenkins Started 3.1s
- docker ps -a
正常的情况如下
[root@VM-20-6-centos jenkins]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS
NAMES
18c22eca7e9a jenkins/jenkins "/usr/bin/tini -- /u…" 9 seconds ago Up 8 seconds 0.0.0.0:8080->8080/tcp, :::8080->8080/tcp, 0.0.0.0:50000->50000/tcp, :::50000->50000/tcp aly_jenkins
失败状态如下
如果状态 是 Exited (143)
就是失败的
失败的 需要查看 日志
docker logs c39c94ee5328
c39c94ee5328 是 CONTAINER ID 值
[root@VM-20-6-centos jenkins]# docker logs c39c94ee5328
touch: cannot touch '/var/jenkins_home/copy_reference_file.log': Permission denied
Can not write to /var/jenkins_home/copy_reference_file.log. Wrong volume permissions?
你遇到的问题是关于 Docker 容器中的权限问题。容器试图在 /var/jenkins_home/
目录下创建文件,但是由于权限不足,导致失败。
下面是解决此问题的一种可能方法:
改变主机上挂载目录的所有者。
在你的主机上,将 /home/jenkins/jenkins_home
的所有者改为 Jenkins 用户。
Jenkins 默认的用户 ID 和组 ID 是 1000。
所以你可以使用如下命令:
sudo chown -R 1000:1000 /home/jenkins/jenkins_home
然后,你应该能够再次启动你的 Jenkins 容器,而不会出现权限问题。
这种方法的优点是简单直接。然而,它可能不适用于所有情况,特别是当你的主机上已经有其他服务正在使用 /home/jenkins/jenkins_home
目录时,更改所有者可能会影响这些服务。
配置 docker-compose.yml user 为 root
docker-compose.yml
user: root
user: root
设置了在容器内部运行进程的用户身份。在这个例子中,所有的进程都会以 root 用户身份运行。
三、端口放行 - 访问 Jenkins 界面
访问的云服务器的 IP + 8080 端口,比如:101.42.150.216:8080
此时你会访问不到,需要配置防火墙
这里以腾讯云为例子
云服务器实例 - 防火墙 - 添加规则 - 端口字段 - 输入 8080 - 备注写上 Jenkins - 确定
重新访问 101.42.150.216:8080
四、获取密码
- 使用
docker exec
进入容器 - 输入
cat /var/jenkins_home/secrets/initialAdminPassword
获取第一次加载的密码 - 把密码拷贝,粘贴到刚刚浏览器的地方就可以
- 会到 刚刚的容器 输入 exit 退出容器
[root@VM-20-6-centos ~]# docker exec -it aly_jenkins bash
root@18c22eca7e9a:/# cat /var/jenkins_home/secrets/initialAdminPassword
5a96b68310b04754b5744446db88251d
root@18c22eca7e9a:/# exit
exit
[root@VM-20-6-centos ~]#
五、自定义 Jenkins - 选择插件来安装
进去后 - 点击 无 - 滚动到底部 - 选择Localization: Chinese (Simplified)
- 安装
只安装一个插件 Localization: Chinese (Simplified)
六、出现这个-新手入门-和一个插件正在安装
七、创建第一个管理员用户
输入用户名、密码、确认密码 - 点击 保存并完成
八、实例配置
点击 保存并完成
点击 - 开始使用Jenkins
九、创建 hello world 任务
- 点击
新建Item
- 输入任务名称 - 选中 Freestyle project - 点击确定
回到页面 首页 - 点击 hello world
点击左侧的 立即构建
十、配置插件源
修改插件源步骤:
- Dashboard
- Manage Jenkins
- 插件管理
- Advanced settings
- 升级站点
URL 由 https://updates.jenkins.io/update-center.json 改成 https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
以下是一些较为常见的国内 Jenkins 插件镜像源:
- 清华大学开源软件镜像站:Jenkins 插件镜像地址为 https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json 。
- 阿里云镜像站:Jenkins 插件镜像地址为 https://mirrors.aliyun.com/jenkins/updates/update-center.json 。
- 网易镜像站:Jenkins 插件镜像地址为 https://mirrors.163.com/jenkins/updates/update-center.json 。
- 中科大镜像站:Jenkins 插件镜像地址为 https://mirrors.ustc.edu.cn/jenkins/updates/update-center.json。
步骤:
点击管理 Jenkins-插件管理
选择-Advanced-settings
滚动到底部 - 升级站点-修改成清华大学的源
十一、重启 Jenkins
- docker ps
[root@VM-20-6-centos ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS
NAMES
18c22eca7e9a jenkins/jenkins "/usr/bin/tini -- /u…" 2 hours ago Up 3 minutes 0.0.0.0:8080->8080/tcp, :::8080->8080/tcp, 0.0.0.0:50000->50000/tcp, :::50000->50000/tcp aly_jenkins
- docker restart
docker restart 18c22eca7e9a
- 重新访问或者刷新浏览器
使用一开始设置的管理员 用户名和密码登录
十二、远程触发构建
Jenkins 官网 - 跨站请求伪造保护:https://www.jenkins.io/doc/book/security/csrf-protection/
Jenkins 远程触发 403 No valid crumb was included in the request https://www.jianshu.com/p/00fcfa4a53b5
1. 禁用 CSRF 跨站伪造请求攻击保护
系统管理 - 脚本命令行
输入下面脚本 - 点击运行
hudson.security.csrf.GlobalCrumbIssuerConfiguration.DISABLE_CSRF_PROTECTION = true
2. 勾选-匿名用户具有可读写权限
3. 配置-触发远程构建.png
进入项目 - 配置 - 触发远程构建
4. 远程触发构建
浏览器 输入 JENKINS_URL/job/hello%20world/build?token=TOKEN_NAME 或者 /buildWithParameters?token=TOKEN_NAME
比如我的是: http://101.42.150.216:8080/job/hello world/build?token=ed82049b-57b0-402a-b00a-ec10da4f3efc
十三、Jenkins 拉取远程代码 - 构建任务 - 查看日志
1. 创建一个自由风格的项目 - 项目名称 为 node-express-sequelize-mysql
项目地址 https://gitee.com/fe521/node-express-sequelize-mysql
2. 创建完成后 - 如何拉取源码?
3. 安装 Git 插件 - 系统管理 - 插件管理 - Available Plugins
输入 Git
选择第一个
- 插件安装进度-勾选-安装完成后重启 Jenkins
如果这一步没有自动重启 安装完成后手动重启
docker ps
docker restart [container_id]
5. 重启 Jenkins 后 - 重新进入 刚刚创建的 Jenkins 任务
源码管理 的地方 将会多出一个 Git - 选中它
6. 拷贝项目地址-https-复制
https://gitee.com/fe521/node-express-sequelize-mysql
https://gitee.com/fe521/node-express-sequelize-mysql.git
7. 保存任务
8. 点击 立即构建
9. 查看控制台输出-日志信息
十四、Jenkins 拉取私有仓库 - 凭据配置
1. 创建一个私有仓库 - vite + vue3 项目
2. 拉取代码 - 失败
dashborad -> 新建任务
创建任务
源码管理 - 点击 Git
3. 配置凭据 - 用户名和密码的方式
十五、配置 Node.js 环境 - 打包 vite + vue3 项目
1. 安装 Node.js 插件
- 系统管理
- 插件管理
- Available plugins
- 输入“nodejs”
- 选中 checkbox
- 右上角 点击 “安装”
- 安装完成 - 重新启动 docker Jenkins
2. 全局配置 Node.js 版本
系统管理
全局工具配置
- 往下滚动 找到 “NodeJS 安装”
https://registry.npmmirror.com/binary.html?path=node/
3. Jenkins 任务 - 配置 Node.js 环境
构建环境
勾选
Provide Node & npm bin/ folder to PATH
- 测试 nodejs 环境是否生效
- 查看日志
4. 执行打包命令 - npm run build
5. 使用 tar 命令压缩 ./dist 目录
- 把 ./dist 文件夹压缩为 dist.tar.gz
tar zcvf dist.tar.gz ./dist
- 把 dist.tar.gz 文件夹解压到 ./rtd 文件夹中
tar zxvf dist.tar.gz -C ./dist
十六、把打包好的文件 - 使用 ssh 拷贝到远程服务器
1. 介绍本地如何拷贝一个文件到远程服务器
拷贝文件到远程服务器通常涉及使用网络传输协议,如 SSH(Secure Shell)的 SCP(Secure Copy Protocol)或者 SFTP(SSH File Transfer Protocol)。对于 Windows PowerShell 和 Mac 终端,方法略有不同,以下是每个平台的基本步骤。
在 Windows PowerShell 中使用 SCP
在 Windows 上,如果你没有内置的 SCP 命令,你可能需要安装一个像是 PuTTY 或 WinSCP 的第三方程序来提供 SCP 功能。
从 Windows 10 版本 1809 开始,你可以安装并使用 Windows 的 OpenSSH 客户端,这将提供 SCP 功能。
以下是使用 Windows PowerShell 通过 SCP 拷贝文件的步骤:
安装 OpenSSH 客户端(如果尚未安装,一把现在的电脑都安装了,所以这步骤可以忽略):
- 打开“设置” > “应用” > “应用和功能” > “可选功能”。
- 点击“添加功能”,然后选择“OpenSSH 客户端”,点击“安装”。
使用 SCP 命令拷贝文件:
- 打开 PowerShell。
- 使用以下命令格式拷贝文件:bash
scp C:\path\to\local\file.txt username@remotehost:/path/to/remote/directory
- 替换
C:\path\to\local\file.txt
为本地文件路径,username@remotehost
为你的用户名和服务器地址,/path/to/remote/directory
为服务器上的目标路径。
在 Mac 终端中使用 SCP
Mac OS 自带了 SCP 工具,因此你可以直接在终端使用它来拷贝文件到远程服务器。以下是步骤:
打开终端。
使用 SCP 命令拷贝文件:
- 输入以下命令:bash
scp /path/to/local/file.txt username@remotehost:/path/to/remote/directory
- 替换
/path/to/local/file.txt
为你的本地文件路径,username@remotehost
为你的用户名和服务器地址,/path/to/remote/directory
为服务器上的目标路径。
- 输入以下命令:
注意
- 在使用 SCP 命令时,你可能需要输入远程服务器的密码,除非你已经设置了 SSH 密钥认证。
- 确保远程服务器的 SSH 服务已经启动,并且你有权限访问该服务。
- 你可以通过添加
-P port_number
来指定 SSH 服务使用的非默认端口,如:scp -P 2222 /path/to/file.txt username@remotehost:/remote/path
。
2. 安装 ssh-agent 插件
- Dashboard - 系统管理 - 插件管理
- 安装完成后 记得重启 Jenkins
3. Jenkins 任务中 - 配置 - ssh agent 插件
- 本地生成密钥对
输入下面命令 连续多次回车即可
ssh-keygen -o -f ./id_rsa
PS C:\Users\Administrator\Documents\mycode\aly_jenkins> ssh-keygen -o -f ./id_rsa
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in ./id_rsa
Your public key has been saved in ./id_rsa.pub
The key fingerprint is:
SHA256:6fhGKlzOR8kkJXfKgoHnoZC2mZ9/nW/SQ0J+j7nRHqU administrator@DESKTOP-O05GRPI
The key's randomart image is:
+---[RSA 3072]----+
| . . |
|o.. + . o . |
|..++ + = o |
| +. o o +o |
| . . =S. . |
| o .o=o o. o |
| ..+.+o *.+E |
| o.+oo+ *o.. |
| ..o. +oo. |
+----[SHA256]-----+
PS C:\Users\Administrator\Documents\mycode\aly_jenkins>
PS C:\Users\Administrator\Documents\mycode\aly_jenkins>
- 把公钥(
id_rsa.pub
)拷贝到远程服务器中
scp ./id_rsa.pub root@remotehost:~
# 登录云服务器
PS C:\Users\Administrator\Documents\mycode\aly_jenkins> ssh root@remotehost
The authenticity of host 'wx.mrlishaohai.com (101.42.150.216)' can't be established.
ECDSA key fingerprint is SHA256:UZ+XBZmUmvcuyzbKyKhlDLucZMb7ktr4GdAbGMhJ4oA.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'wx.mrlishaohai.com,101.42.150.216' (ECDSA) to the list of known hosts.
root@remotehost's password:
Last login: Wed Jun 1 19:19:58 2022 from 114.241.244.79
# 查看是否有刚刚复制过来的文件
[root@VM-20-6-centos ~]# ls
id_rsa.pub
# 查看 ~/.ssh/ 目录下是否有 authorized_keys 文件
[root@VM-20-6-centos ~]# ls ~/.ssh/
id_rsa id_rsa.pub known_hosts
# 把刚刚 scp 拷贝到云服务器上的公钥 追加 到 当前服务器的 ~/.ssh/authorized_keys 文件上
[root@VM-20-6-centos ~]# cat id_rsa.pub >> ~/.ssh/authorized_keys
# 查看是否追加成功
[root@VM-20-6-centos ~]# cat ~/.ssh/authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAAAA....
# 退出云服务器
[root@VM-20-6-centos ~]# exit
logout
- 把私钥拷贝粘贴到凭据中, ssh 凭据
4. 修复-执行 ssh 不同主机 - 导致拷贝失败
scp 和 ssh 失败的命令
# 检查Node.js的版本
node -v
# 检查npm的版本
npm -v
# 安装项目依赖
npm install
# 构建项目,通常是编译代码、打包等
npm run build
# 列出当前目录的文件,以确认构建结果
ls
# 将dist目录打包成dist.tar.gz压缩文件
tar zcvf dist.tar.gz ./dist
# 再次列出当前目录的文件,确认压缩文件已创建
ls
# 启动ssh-agent,这个代理会管理SSH私钥,用于无密码登录
eval $(ssh-agent -s)
# 添加私钥到 ssh-agent
ssh-add /ssh-agent/id_rsa
# 将dist.tar.gz文件复制到远端服务器的主目录
# -v 选项提供详细的输出,方便调试
scp -v dist.tar.gz root@ffffee.com:~
# 连接到远程服务器,执行一系列命令,并在完成后退出连接
# "cd ~" 切换到用户的主目录
# "rm -rf dist" 删除dist目录及其内容,确保无旧数据干扰
# "tar zxvf dist.tar.gz -C ./" 解压dist.tar.gz到当前目录,会生成dist目录
# "exit" 退出SSH会话
ssh -v root@ffffee.com "cd ~; rm -rf dist; tar zxvf dist.tar.gz -C ./; exit"
# 结束 ssh-agent 会话
ssh-agent -k
scp 命令介绍
# 使用scp命令将dist.tar.gz文件传输到ffffee.com主机的家目录下,
# 并启用了StrictHostKeyChecking选项进行主机密钥检查,且输出详细调试信息。
scp -o StrictHostKeyChecking=yes -v dist.tar.gz root@ffffee.com:~
# 使用scp命令将dist.tar.gz文件传输到ffffee.com主机的家目录下,
# 并禁用了StrictHostKeyChecking选项进行主机密钥检查,但缺少了空格导致了参数错误。
scp -o StrictHostKeyChecking=no -v dist.tar.gz root@ffffee.com:~
5. 拷贝压缩压缩好的文件到远程服务器
# 检查Node.js的版本
node -v
# 检查npm的版本
npm -v
# 安装项目依赖
npm install
# 构建项目,通常是编译代码、打包等
npm run build
# 列出当前目录的文件,以确认构建结果
ls
# 将dist目录打包成dist.tar.gz压缩文件
tar zcvf dist.tar.gz ./dist
# 再次列出当前目录的文件,确认压缩文件已创建
ls
# 启动ssh-agent,这个代理会管理SSH私钥,用于无密码登录
eval $(ssh-agent -s)
# 添加私钥到 ssh-agent
ssh-add /ssh-agent/id_rsa
# 将dist.tar.gz文件复制到远端服务器的主目录
# -o StrictHostKeyChecking=yes 选项确保在第一次连接时验证主机的密钥
# -v 选项提供详细的输出,方便调试
scp -o StrictHostKeyChecking=yes -v dist.tar.gz root@ffffee.com:~
# 连接到远程服务器,执行一系列命令,并在完成后退出连接
# "cd ~" 切换到用户的主目录
# "rm -rf dist" 删除dist目录及其内容,确保无旧数据干扰
# "tar zxvf dist.tar.gz -C ./" 解压dist.tar.gz到当前目录,会生成dist目录
# "exit" 退出SSH会话
ssh -o StrictHostKeyChecking=yes -v root@ffffee.com "cd ~; rm -rf dist; tar zxvf dist.tar.gz -C ./; exit"
# 结束 ssh-agent 会话
ssh-agent -k
远程服务器效果
6. 执行 docker 命令-自动化部署
十七、Gitee Webhook 自动化部署
1. 什么是 Git Webhook
Git Webhook 是一种自动化机制,用于在 Git 仓库发生特定事件(如代码提交、分支合并等)时触发自定义的 HTTP 回调。这些 Webhook 可以配置为向外部系统或服务发送通知,从而自动启动一系列响应动作,例如自动部署、持续集成、测试或其他自定义的脚本任务。
2. 配置 Webhook
Gitee 如何配置 webhook
在 Gitee(一个基于 Git 的代码托管平台)配置 webhook 的步骤如下:
登录并选择项目: 首先,你需要登录到 Gitee 平台并选择你想要配置 webhook 的项目。
进入项目设置: 在项目主页上,找到并点击“设置”选项。
管理 Webhooks: 在设置菜单中,选择“Webhooks”选项,这将带你到 webhook 管理页面。
添加 Webhook: 点击“增加 Webhook”按钮来创建一个新的 webhook。
配置 Webhook: 在添加 webhook 的页面,你需要填写一些必要的信息:
- URL: 输入接收 webhook HTTP 请求的服务器地址。
- 触发事件: 选择你希望触发 webhook 的事件类型,例如推送(push)、合并请求(merge request)等。
- 密钥(可选): 如果需要,你可以设置一个密钥,以便接收方验证接收到的 HTTP 请求的真实性。
- 推送类型: 通常可以选择 JSON 或者 Form 格式。
保存并测试: 完成配置后,保存设置。Gitee 允许你发送测试钩子来验证配置是否正确。
Jenkins 配置 webhook
3. git push 提交代码 -实现自动化部署
十八、Jenkins 流水线配置
1. 安装 Pipeline
和Jenkins Pipeline
插件
2. 安装 Pipeline Stage view
插件 (阶段视图)
3. 三个插件安装完成
4. 重启 Jenkins
5. 配置流水线任务
6. Jenkinsfile
一个基本的 Jenkinsfile 结构,它包括环境设置、阶段定义和执行 Shell 脚本命令的步骤。
pipeline {
agent any // 定义在任何可用的代理上执行
// tools {
// nodejs 'node-configured-in-jenkins'
// }
tools {
// 名称一定要和
nodejs 'NodeJS 中国镜像'
}
environment {
SSH_CREDENTIALS_ID = '41083f70-508d-42d2-822e-4fb406c060e4' // 定义SSH凭证的ID
}
stages {
stage('Checkout') {
steps {
// 从 Git 获取源代码
checkout scm
}
}
stage('Prepare') {
steps {
// 检查Node.js和npm的版本,安装依赖,构建项目
script {
sh 'node -v'
sh 'npm -v'
sh 'npm install'
sh 'npm run build'
sh 'ls' // 列出文件确认构建结果
}
}
}
stage('Package') {
steps {
// 打包构建结果
sh 'tar zcvf dist.tar.gz ./dist'
sh 'ls' // 再次列出文件确认压缩文件已创建
}
}
stage('Deploy') {
steps {
// 使用ssh-agent插件自动处理SSH密钥
sshagent(credentials: [env.SSH_CREDENTIALS_ID]) {
// 复制文件到远端服务器并执行远程命令
sh 'scp -o StrictHostKeyChecking=yes -v dist.tar.gz root@ffffee.com:~'
sh '''
ssh -o StrictHostKeyChecking=yes -v root@ffffee.com "cd ~; rm -rf dist; tar zxvf dist.tar.gz -C ./; exit"
'''
}
}
}
}
post {
always {
// 构建完成后的清理工作
echo 'Cleaning up...'
}
}
}
解释:
- agent any - 指示 Jenkins 在任何可用的代理上执行这个 Pipeline。
- environment - 定义环境变量,例如 SSH 凭证的 ID。
- stage('Prepare') - 准备阶段,运行 Node.js 相关命令,包括版本检查、依赖安装和项目构建。
- stage('Package') - 打包阶段,将构建结果打包成 tar.gz 文件。
- stage('Deploy') - 部署阶段,使用 ssh-agent 和 scp 命令将包传输到远程服务器并执行相关命令。
- post { always { ... }} - 不论构建成功还是失败,总会执行的步骤,用于执行清理任务。
注意事项:
- 确保 Jenkins 有安装和配置必需的插件,如 SSH Agent 插件。
- 确保已经在 Jenkins 的凭证系统中正确配置了 SSH 密钥,并正确设置了环境变量
SSH_CREDENTIALS_ID
。 - 在实际部署之前,检查远程服务器的权限和路径设置,确保 Jenkins 用户有权限执行这些操作。