快速搭建 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_netdocker 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/jenkinsimage: jenkins/jenkins 指定了这个服务应该使用哪个 Docker 镜像。在这个例子中,它使用的是公开的 Jenkins 镜像。
container_name: aly_jenkinscontainer_name: aly_jenkins 设置了 Docker 容器的名字。这个名字在你的 Docker 主机上必须是唯一的。
user: rootuser: root 设置了在容器内部运行进程的用户身份。在这个例子中,所有的进程都会以 root 用户身份运行。
networks:
- jenkins_netnetworks: 定义了这个服务应该连接到哪些网络。在这个例子中,它连接到一个名为 jenkins_net 的网络。
ports:
- 8080:8080
- 50000:50000ports: 映射容器的端口到宿主机的端口。在这个例子中,容器的 8080 端口映射到宿主机的 8080 端口,容器的 50000 端口映射到宿主机的 50000 端口。
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- /home/jenkins/jenkins_home:/var/jenkins_homevolumes: 挂载宿主机的目录或文件到容器中。在这个例子中,宿主机的 /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.216environment: 设置环境变量。在这个例子中,设置了四个环境变量: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.ymlCTEL + 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 c39c94ee5328c39c94ee5328 是 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: rootuser: 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 psdocker 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_rsaPS 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 -kscp 命令介绍
# 使用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 用户有权限执行这些操作。

7. 项目中如何配置 Jenkinsfile

