当前位置: 首页 > news >正文

Jenkins持续集成入门指南:自动化构建与部署的最佳实践

目录

一、部署Jenkins

1. 安装

2.  查看初始化密码

3. 浏览器登录Jenkins

二、 Gitlab安装并创建测试项目

三、配置Jenkins连接Gitlab

1. 安装插件

2. 配置Gitlab凭证

3. 创建任务

四、配置邮件通知

1. 安装Email Extension插件

2. 配置SMTP服务器

3. 配置 Jenkins 任务的邮件通知

五、流水线

1. 安装插件

2. 创建Pipeline

3. 使用源代码管理

六、本地普通Java应用

1. Maven 构建示例

1.1 安装和配置maven

1.2 构建普通java应用

1. 2.1 创建一个简单的 Java 项目

(1)项目结构

(2)pom.xml 文件内容

(3) App.java 文件内容

1.3  使用 Maven 构建并测试该项目

(1)构建项目

(2) 运行项目

1.4 上传项目源代码到gitlab服务器

1.4.1 gitlab服务器上创建新的仓库

1.4.2 存放项目源代码的机器上执行如下操作

1.5 Jenkins 配置 Maven 构建

1.5.1 安装maven插件(安装完重启)

1.5.2 配置jdk环境

1.5.3 配置Maven环境

1.5.4 执行构建

七、Java web 应用

八、Jenkins pipeline构建前端node.js项目

1. tomcat服务器配置

2. jenkins服务器配置

(1)配置ssh凭据

(2)创建任务

​编辑(3) Jenkins用户的公钥传给tomcat服务器的root用户

3. gitlab服务器配置

(1)上传Jenkins公钥

(2) 创建项目和文件Jenkinsfile

4. 最终构建

九、Slave

1. 准备工作

1.1 系统信息

1.2 网络要求

2. Slave 节点配置

2.1 创建专用用户

2.2 配置环境变量

3. Master 节点配置

3.1 添加 SSH 凭证

3.2 创建 Slave 节点

4. 连接验证

5. 流水线测试

验证构建

十、Gitlab webhook

1. jenkins服务器配置

2. gitlab服务器配置

​编辑

3. 检测与验证

十一、参数化构建

1. Gitlab创建测试项目

1.1 创建新分支

1.2 Jenkinsfile

2. 创建参数化构建Job


一、部署Jenkins

1. 安装

# 注意以下命令需要“科学上网”

wget -O /etc/yum.repos.d/jenkins.repo \
    https://pkg.jenkins.io/redhat-stable/jenkins.repo
rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io-2023.key
yum upgrade #暂时未操作此步骤
yum install fontconfig java-21-openjdk -y
yum install jenkins git maven -y
systemctl daemon-reload
systemctl start jenkins

2.  查看初始化密码

cat /var/lib/jenkins/secrets/initialAdminPassword

3. 浏览器登录Jenkins

二、 Gitlab安装并创建测试项目

见 分布式版本控制系统Gitlab-CSDN博客

三、配置Jenkins连接Gitlab

1. 安装插件

2. 配置Gitlab凭证

3. 创建任务

# 可以查看一下Jenkins的工作目录(远程仓库的项目)

[root@Jenkins ~]# ls /var/lib/jenkins/workspace/FreeStyleTest
develop  docs  helloworld.py  os_info.py  README.md
[root@Jenkins ~]# cat /var/lib/jenkins/workspace/FreeStyleTest/helloworld.py 
#!/usr/bin/env python
print("Hello World!")[root@Jenkins ~]#

四、配置邮件通知

1. 安装Email Extension插件

2. 配置SMTP服务器

3. 配置 Jenkins 任务的邮件通知

五、流水线

1. 安装插件

Pipeline 插件之前已经安装了,仅需要安装Pipeline: Stage View

流水线创建有3种方式:

1.通过 Blue Ocean - 在 Blue Ocean 中设置一个流水线项目后,Blue Ocean UI 会帮你编写流水线的 Jenkinsfile 文件并提交到源代码管理系统。

2.通过经典 UI - 尽管 Jenkins 支持在经典 UI 中直接进入流水线,但通常认为最好的实践是在 Jenkinsfile 文件中定义流水线,Jenkins 之后会直接从源代码管理系统加载。

3.在源码管理系统中定义 - 你可以手动编写一个 Jenkinsfile 文件,然后提交到项目的源代码管理仓库中。

2. 创建Pipeline

3. 使用源代码管理

六、本地普通Java应用

1. Maven 构建示例

1.1 安装和配置maven

[root@tomcat ~]# yum -y install maven[root@tomcat ~]# mvn --version
Apache Maven 3.6.3 (Red Hat 3.6.3-22)
Maven home: /usr/share/maven
Java version: 17.0.16, vendor: Red Hat, Inc., runtime: /usr/lib/jvm/java-17-openjdk-17.0.16.0.8-2.el9.x86_64
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "5.14.0-592.el9.x86_64", arch: "amd64", family: "unix"

1.2 构建普通java应用

1. 2.1 创建一个简单的 Java 项目
(1)项目结构
my-java-project/
│
├── pom.xml
└── src/└── main/└── java/└── com/└── example/└── App.java
(2)pom.xml 文件内容

创建 pom.xml 文件,设置 Maven 构建工具和相关依赖项:

<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.example</groupId><artifactId>my-java-project</artifactId><version>1.0-SNAPSHOT</version><packaging>jar</packaging><dependencies><!-- JUnit 5 for testing --><dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter-api</artifactId><version>5.7.0</version><scope>test</scope></dependency></dependencies><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.8.1</version><configuration><source>17</source><target>17</target></configuration></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-jar-plugin</artifactId><version>3.1.0</version><configuration><archive><manifestEntries><Main-Class>com.example.App</Main-Class>  <!-- 入口类 --></manifestEntries></archive></configuration></plugin></plugins></build></project>
(3) App.java 文件内容

src/main/java/com/example/ 目录下创建 App.java 文件:

package com.example;public class App {public static void main(String[] args) {System.out.println("Hello, World!");}
}

1.3  使用 Maven 构建并测试该项目

(1)构建项目

在项目根目录下运行以下命令来构建项目:

[root@tomcat my-java-project]# pwd
/my-java-project
[root@tomcat my-java-project]# mvn clean package

构建完成后,target/ 目录下会出现一个 my-java-project-1.0-SNAPSHOT.jar 文件。

(2) 运行项目
[root@tomcat my-java-project]# java -jar target/my-java-project-1.0-SNAPSHOT.jar
Hello, World!

1.4 上传项目源代码到gitlab服务器

1.4.1 gitlab服务器上创建新的仓库
1.4.2 存放项目源代码的机器上执行如下操作
cd my-java-project/
rm -rf target/
git config --global init.defaultBranch main
git init
git config --global user.email "ink@java.com"
git config --global user.name "ink_java"
git add .
git commit -m "Initial commit"
git log
git remote add origin http://192.168.159.133/root/my-java-project.git
git pull origin main --rebase
git push -u origin main

1.5 Jenkins 配置 Maven 构建

1.5.1 安装maven插件(安装完重启)

1.5.2 配置jdk环境

1.5.3 配置Maven环境

1.5.4 执行构建

[root@Jenkins ~]# ls /var/lib/jenkins/workspace/my-java-project-build
pom.xml  README.md  src  target

七、Java web 应用

总体步骤和六、本地普通Java应用大体一致。

jenkins用户生成和传公钥给tomcat服务器的root用户!!!

注意java maven 的版本兼容问题!!!

八、Jenkins pipeline构建前端node.js项目

1. tomcat服务器配置

# 安装 Node.js 和 npm
[root@tomcat ~]# dnf install nodejs npm -y
[root@tomcat ~]# node --version
v16.20.2
[root@tomcat ~]# npm --version
8.19.4# 创建项目目录并初始化
[root@tomcat ~]# cd /opt/
[root@tomcat opt]# mkdir my-nodejs-movie-list
[root@tomcat opt]# cd my-nodejs-movie-list
[root@tomcat my-nodejs-movie-list]# npm init -y
Wrote to /opt/my-nodejs-movie-list/package.json:{"name": "my-nodejs-movie-list","version": "1.0.0","description": "","main": "index.js","scripts": {"test": "echo \"Error: no test specified\" && exit 1"},"keywords": [],"author": "","license": "ISC"
}[root@tomcat my-nodejs-movie-list]# tree
.
├── app.js
├── ecosystem.config.js
├── movieData.js
└── package.json0 directories, 4 files# 启动服务器
[root@tomcat my-nodejs-movie-list]# node app.js
🎬 个人电影清单服务器已启动!
📍 服务器运行在: http://localhost:3000
👉 试试在浏览器打开: http://你的服务器IP:3000/movies
🛑 要停止服务器,请按 Ctrl + C# 测试【另开启一个终端】
[root@tomcat ~]# curl http://localhost:3000/movies 
{"success":true,"data":[{"id":1,"name":"阿凡达","year":"2009"},{"id":2,"name":"泰坦尼克号","year":"1997"},{"id":3,"name":"盗梦空间","year":"2010"}]}[root@tomcat ~]# 

# 测试2:添加一部新电影
[root@tomcat ~]# curl -X POST -d "name=星际穿越&year=2014" http://localhost:3000/movies
{"success":true,"message":"电影添加成功!","data":{"id":4,"name":"星际穿越","year":"2014"}}[root@tomcat ~]# curl http://localhost:3000/movies 
{"success":true,"data":[{"id":1,"name":"阿凡达","year":"2009"},{"id":2,"name":"泰坦尼克号","year":"1997"},{"id":3,"name":"盗梦空间","year":"2010"},{"id":4,"name":"星际穿越","year":"2014"}]}[root@tomcat ~]## 测试4:删除一部电影(例如删除ID为2的电影)
[root@tomcat ~]# curl -X DELETE http://localhost:3000/movies/2[root@tomcat ~]# curl http://localhost:3000/movies 
{"success":true,"data":[{"id":1,"name":"阿凡达","year":"2009"},{"id":3,"name":"盗梦空间","year":"2010"},{"id":4,"name":"星际穿越","year":"2014"}]}

2. jenkins服务器配置

插件需求:

GitLab Plugin
SSH Pipeline Steps
NodeJS Plugin
Publish Over SSH
SSH Agent

(1)配置ssh凭据

(2)创建任务

(3) Jenkins用户的公钥传给tomcat服务器的root用户

[jenkins@Jenkins ~]$ ssh-copy-id root@192.168.159.239[jenkins@Jenkins ~]$ ssh root@192.168.159.239
Warning: your password will expire in 0 days.
Warning: your password will expire in 0 days.
Last login: Mon Nov  3 19:36:28 2025 from 192.168.159.134
[root@tomcat ~]# exit
logout
Connection to 192.168.159.239 closed.

3. gitlab服务器配置

(1)上传Jenkins公钥

(2) 创建项目和文件Jenkinsfile

pipeline {agent anystages {stage('Test SSH Connection') {steps {script {// 测试方法1:使用 sshagentsshagent(['jenkins-ssh-159-239']) {sh """echo "=== 测试 SSH 连接 ==="ssh -o StrictHostKeyChecking=no root@192.168.159.239 "echo '连接成功!'echo '当前用户: \$(whoami)'echo '当前目录: \$(pwd)'echo 'Node.js 版本:'node -vecho '系统信息:'uname -a""""}}}}}post {always {echo "SSH 连接测试完成"}}
}

4. 最终构建

以上配置完成,执行构建

查看控制台输出

Started by user Ink
Obtained Jenkinsfile from git git@192.168.159.133:root/nodejs.git
[Pipeline] Start of Pipeline
[Pipeline] node
Running on Jenkins in /var/lib/jenkins/workspace/nodejs
[Pipeline] {
[Pipeline] stage
[Pipeline] { (Declarative: Checkout SCM)
[Pipeline] checkout
Selected Git installation does not exist. Using Default
The recommended git tool is: NONE
using credential jenkins-ssh-159-239> git rev-parse --resolve-git-dir /var/lib/jenkins/workspace/nodejs/.git # timeout=10
Fetching changes from the remote Git repository> git config remote.origin.url git@192.168.159.133:root/nodejs.git # timeout=10
Fetching upstream changes from git@192.168.159.133:root/nodejs.git> git --version # timeout=10> git --version # 'git version 2.47.3'
using GIT_SSH to set credentials SSH Key For tomcat 192.168.159.239
[INFO] SELinux is present on the host and we could not confirm that it does not apply actively: will try to relabel temporary files now; this may complain if context labeling not applicable after all> /usr/bin/chcon --type=ssh_home_t /var/lib/jenkins/workspace/nodejs@tmp/jenkins-gitclient-ssh4028068105717078342.key
Verifying host key using known hosts file> git fetch --tags --force --progress -- git@192.168.159.133:root/nodejs.git +refs/heads/*:refs/remotes/origin/* # timeout=10> git rev-parse refs/remotes/origin/main^{commit} # timeout=10
Checking out Revision cd869dc0b9ca6ad3ee2bd62bb18f35809a3e0f98 (refs/remotes/origin/main)> git config core.sparsecheckout # timeout=10> git checkout -f cd869dc0b9ca6ad3ee2bd62bb18f35809a3e0f98 # timeout=10
Commit message: "添加Jenkinsfile"> git rev-list --no-walk cd869dc0b9ca6ad3ee2bd62bb18f35809a3e0f98 # timeout=10
[Pipeline] }
[Pipeline] // stage
[Pipeline] withEnv
[Pipeline] {
[Pipeline] stage
[Pipeline] { (Test SSH Connection)
[Pipeline] script
[Pipeline] {
[Pipeline] sshagent
[ssh-agent] Using credentials git (SSH Key For tomcat 192.168.159.239)
$ ssh-agent
SSH_AUTH_SOCK=/tmp/ssh-XXXXXXG6jrmK/agent.6473
SSH_AGENT_PID=6476
Running ssh-add (command line suppressed)
Identity added: /var/lib/jenkins/workspace/nodejs@tmp/private_key_16695974110225731368.key (jenkins@Jenkins)
[ssh-agent] Started.
[Pipeline] {
[Pipeline] sh
+ echo '=== 测试 SSH 连接 ==='
=== 测试 SSH 连接 ===
++ whoami
++ pwd
+ ssh -o StrictHostKeyChecking=no root@192.168.159.239 'echo '\''连接成功!'\''echo '\''当前用户: jenkins'\''echo '\''当前目录: /var/lib/jenkins/workspace/nodejs'\''echo '\''Node.js 版本:'\''node -vecho '\''系统信息:'\''uname -a'
Warning: your password will expire in 0 days.
连接成功!
当前用户: jenkins
当前目录: /var/lib/jenkins/workspace/nodejs
Node.js 版本:
v16.20.2
系统信息:
Linux tomcat 5.14.0-592.el9.x86_64 #1 SMP PREEMPT_DYNAMIC Fri Jun 6 09:58:38 UTC 2025 x86_64 x86_64 x86_64 GNU/Linux
[Pipeline] }
$ ssh-agent -k
unset SSH_AUTH_SOCK;
unset SSH_AGENT_PID;
echo Agent pid 6476 killed;
[ssh-agent] Stopped.
[Pipeline] // sshagent
[Pipeline] }
[Pipeline] // script
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (Declarative: Post Actions)
[Pipeline] echo
SSH 连接测试完成
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // withEnv
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
Finished: SUCCESS

检测

九、Slave

1. 准备工作

1.1 系统信息

组件IP 地址已安装软件
JenkinsMaster192.168.159.134Jenkins (已运行)
JenkinsSlave192.168.159.135JDK 21, Maven 3.6.3

1.2 网络要求

  • 确保 Master 和 Slave 之间网络互通

  • 检查防火墙设置,确保 SSH 端口(22)开放2. 

2. Slave 节点配置

2.1 创建专用用户

# 在 Slave 节点上执行
useradd -m -d /home/jenkins -s /bin/bash jenkins
passwd jenkins  # 设置密码,如设置为 123# 创建工作目录
mkdir -p /opt/jenkins/workspace
chown jenkins:jenkins /opt/jenkins/workspace

2.2 配置环境变量

# 切换到 jenkins 用户
su - jenkins# 编辑 .bashrc 文件,添加以下内容
vim ~/.bashrc
export JAVA_HOME=/usr/lib/jvm/java-21-openjdk-21.0.8.0.9-1.el9.x86_64
export MAVEN_HOME=/usr/share/maven
export PATH=$JAVA_HOME/bin:$MAVEN_HOME/bin:$PATH# 使配置生效
source ~/.bashrc# 验证安装
[jenkins@JenkinsSlave ~]$ java --version
openjdk 21.0.8 2025-07-15 LTS
OpenJDK Runtime Environment (Red_Hat-21.0.8.0.9-1) (build 21.0.8+9-LTS)
OpenJDK 64-Bit Server VM (Red_Hat-21.0.8.0.9-1) (build 21.0.8+9-LTS, mixed mode, sharing)
[jenkins@JenkinsSlave ~]$ mvn --version
Apache Maven 3.6.3 (Red Hat 3.6.3-22)
Maven home: /usr/share/maven
Java version: 21.0.8, vendor: Red Hat, Inc., runtime: /usr/lib/jvm/java-21-openjdk-21.0.8.0.9-1.el9.x86_64
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "5.14.0-592.el9.x86_64", arch: "amd64", family: "unix"

3. Master 节点配置

注意:将Master节点的Jenkins用户的公钥传给Slave节点的Jenkins用户!

3.1 添加 SSH 凭证

3.2 创建 Slave 节点

4. 连接验证

5. 流水线测试

pipeline {agent {label 'jdk21'  // 使用我们配置的标签}stages {stage('Check Environment') {steps {echo "Running on node: ${env.NODE_NAME}"sh 'java -version'sh 'mvn -v'sh 'echo "Workspace: $WORKSPACE"'}}}
}

验证构建

检查 /opt/jenkins/workspace目录下是否生成了构建产物

[jenkins@JenkinsSlave workspace]$ pwd
/opt/jenkins/workspace
[jenkins@JenkinsSlave workspace]$ ls
[jenkins@JenkinsSlave workspace]$ ls
caches  workspace

十、Gitlab webhook

在之前构建成功的项目基础上添加触发器配置(以node.js项目为基础)

1. jenkins服务器配置

2. gitlab服务器配置

3. 检测与验证

十一、参数化构建

1. Gitlab创建测试项目

1.1 创建新分支

1.2 Jenkinsfile

pipeline {agent anyparameters {string(name: 'VERSION', defaultValue: '1.0.0', description: '版本号')choice(name: 'ENVIRONMENT', choices: ['dev', 'staging', 'prod'], description: '选择部署环境')}stages {stage('Build') {steps {script {echo "构建版本:${params.VERSION}"echo "部署环境:${params.ENVIRONMENT}"// 模拟构建操作echo "正在构建项目..."// 假设我们在这里执行构建脚本,例如:// sh "mvn clean install -Dversion=${params.VERSION}"}}}stage('Deploy') {steps {script {echo "开始部署到环境: ${params.ENVIRONMENT}"if (params.ENVIRONMENT == 'dev') {echo "部署到开发环境..."} else if (params.ENVIRONMENT == 'staging') {echo "部署到预生产环境..."} else {echo "部署到生产环境..."}// 在实际情况下,你可以在这里执行部署脚本// 例如:// sh "./deploy.sh ${params.ENVIRONMENT} ${params.VERSION}"}}}stage('Test') {steps {script {echo "运行测试..."// 假设执行测试脚本// sh "mvn test"}}}}post {success {echo "构建和部署成功!"}failure {echo "构建或部署失败."}}
}

2. 创建参数化构建Job

http://www.dtcms.com/a/569949.html

相关文章:

  • 山西省建设信息网站汇点远程app下载安装
  • 阿里云手机网站建设打电话拉客户用网站做广告怎么做 好做吗
  • hexo做网站wordpress内容分页在哪改
  • 游戏网站后台建设美橙云建站
  • 数据备份策略:全量 / 增量 / 差异备份、备份周期规划
  • LeetCode 322. 零钱兑换
  • Redis黑马点评 Feed流
  • 域名后缀cn做网站河北手机网站建设
  • U-Net保姆级教程:从原理到医学细胞分割实战(PyTorch版)!
  • mini-bitcask学习笔记
  • 东莞网站建设公司哪家好电商平面设计主要做什么
  • 解决远程调用微服务之后无法通过上下文获取用户id问题
  • 网站代付系统怎么做大型网站seo策略
  • 国家住房城乡建设部网站住房和城乡建设部网站北京
  • 制作网站的程序网站查找工具
  • 网站建设 图片压缩网站开发多少费用
  • React Native App 自动检测版本更新完整实现指南
  • 网站建站是 什么企业网站托管运营
  • 字母象形的力量:单词速记之多种意象融合一体
  • xtuoj Binary
  • 南沙网站开发企业网站建设需要多少钱知乎
  • python 包 检测自己是否为 editable 模式安装的
  • ToB销售获客策略全解析:实现精准客户开发方法论
  • 成都医院手机网站建设湖北做网站找谁
  • 网站需求分析怎么写设计网站大全湖南岚鸿设计
  • css 画一个圆角渐变色边框
  • 网站路径问题国外h5建站
  • 数字营销技术应用网站大连网页搜索排名提升
  • 简化Java开发——Hutool工具使用案例
  • 某次钓鱼邮件安全事件应急