CICD篇之通过Jenkins中书写pipeline构建编译打包发布流程

ops/2024/12/25 14:43:43/

1. Jenkins中Pipeline作用

在 Jenkins 中使用 Pipeline 来构建、打包、编译和发布代码的流水线,可以帮助团队实现自动化的持续集成与持续交付(CI/CD)。
我们可以通过 Jenkins Pipeline 管道,自动化执行从代码检出、构建、测试到发布的所有步骤。

2. Jenkins Pipeline 基本概念

Jenkins 提供了两种主要的 Pipeline 类型:

  1. Declarative Pipeline:声明式 Pipeline,采用简洁的语法,易于配置。
  2. Scripted Pipeline:脚本化 Pipeline,使用自由格式的 Groovy 语言,适用于复杂场景,但相对复杂。

3. Jenkins Pipeline 打包编译代码的流程

一个典型的流水线过程包括以下几个步骤:

  • Checkout 代码:从代码仓库(如 Git)检出源代码。
  • 构建编译:执行编译构建操作(如 Maven、Gradle、Ant 等)。
  • 单元测试:运行单元测试,验证代码质量。
  • 打包:将构建的代码打包成可部署的文件(如 JAR、WAR、Docker 镜像等)。
  • 存档构建产物:保存构建产物,以供后续步骤使用。
  • 部署到测试环境:将打包好的应用部署到测试环境。
  • 通知:发送构建结果的通知(如成功或失败)。
  • 清理:进行资源清理,确保环境的整洁。

4. Jenkins Pipeline 完整示例

pipeline {agent any  // 代表可以在任何可用的节点上运行流水线environment {MAVEN_HOME = '/usr/local/maven'  // 设置 Maven 安装路径APP_NAME = 'your-app-name'  // 应用名称DEPLOY_DIR = '/path/to/deploy'  // 部署目录}stages {stage('Checkout') {steps {// 从 Git 仓库检出代码git 'https://github.com/your-repository/your-project.git'}}stage('Build') {steps {// 使用 Maven 进行构建script {sh "'${MAVEN_HOME}/bin/mvn' clean install -DskipTests"}}}stage('Test') {steps {// 运行单元测试script {sh "'${MAVEN_HOME}/bin/mvn' test"}}}stage('Package') {steps {// 使用 Maven 打包应用script {sh "'${MAVEN_HOME}/bin/mvn' package"}}}stage('Archive Artifacts') {steps {// 存档构建产物,以便后续步骤使用archiveArtifacts artifacts: 'target/*.jar', allowEmptyArchive: true}}stage('Deploy to Test Environment') {steps {script {// 将应用部署到测试环境echo 'Deploying to test environment...'sh 'scp target/your-app.jar user@your-test-server:/path/to/deploy/'}}}stage('Notify') {steps {script {if (currentBuild.result == 'SUCCESS') {echo 'Build successful! Deploying to test environment...'} else {echo 'Build failed! Please check the logs.'}}}}}post {always {// 在构建完成后执行,进行必要的清理echo 'Pipeline completed.'}success {echo 'Build was successful.'}failure {echo 'Build failed.'}}
}
参数解释:
1. agent any:
代表流水线可以在任何可用的 Jenkins 节点上执行。这意味着 Jenkins 会根据可用的节点选择合适的执行环境。
2. environment:
在 environment 部分,可以设置全局环境变量,例如 Maven 安装路径、应用名称和部署目录。这样可以在整个流水线中使用这些环境变量。
3. stages:
定义了流水线的多个阶段,每个阶段执行不同的任务。
- git:用于从 Git 仓库检出代码。
- sh:执行 Shell 命令,比如运行 Maven 构建、测试和打包。
- archiveArtifacts:存档构建产物,方便后续步骤使用或下载。
- Checkout:从 Git 仓库中检出代码。
- Build:使用 Maven 进行构建,通常会执行 clean install 来清理旧的构建并安装依赖。
- Test:执行单元测试,通常会运行 mvn test 来确保代码质量。
- Package:使用 Maven 打包应用,生成 JAR、WAR 等文件。
- Archive Artifacts:存档构建产物(如 JAR 文件),以便后续步骤可以使用或部署。
- Deploy to Test Environment:将打包的文件部署到测试环境。可以使用 scp 或其他工具将文件复制到远程服务器。
- Notify:发送构建通知,通知团队构建是否成功。
4. post:
在流水线执行完后,无论成功与否,都会执行的部分。包括:
- always:始终执行的步骤,通常用来执行清理操作。
- success:当构建成功时执行的步骤。
- failure:当构建失败时执行的步骤。

5. 高级功能

5.1. 并行执行

如果你希望在流水线中并行执行多个任务,可以使用 parallel 来并行执行不同的阶段。

stage('Parallel Build') {parallel {stage('Unit Tests') {steps {sh 'mvn test'}}stage('Integration Tests') {steps {sh 'mvn verify'}}}
}

5.2. 集成外部工具

你可以集成 SonarQube 进行代码质量分析,或者使用 Docker 来容器化构建和部署。
1. SonarQube 集成示例:

stage('SonarQube Analysis') {steps {script {sh "'${MAVEN_HOME}/bin/mvn' sonar:sonar -Dsonar.projectKey=your-project-key"}}
}

2. Docker 构建示例:

pipeline {agent { docker { image 'maven:3.8-jdk-11' } }stages {stage('Build') {steps {sh 'mvn clean install'}}}
}

5.3. 通知团队

在流水线完成后,发送通知到 Slack、邮件 或其他平台。
Slack 通知示例:

post {success {slackSend (channel: '#build-notifications', message: "Build SUCCESS")}failure {slackSend (channel: '#build-notifications', message: "Build FAILED")}
}

5.4. 构建多环境发布

如果你有多个部署环境(如开发、测试、生产),可以根据需要在不同的阶段发布到不同的环境。你可以使用 when 条件来实现这一点。

6. 总结

通过 Jenkins Pipeline,我们可以将代码从版本控制系统中检出,经过编译、测试、打包后,自动化发布到目标环境,实现真正的持续集成与持续交付(CI/CD)。上述示例展示了一个典型的流水线流程,你可以根据自己的项目需求和工具链,进一步扩展和优化流水线的步骤。


http://www.ppmy.cn/ops/144866.html

相关文章

修改采购订单BAPI学习研究-BAPI_PO_CHANGE

这里是修改采购订单BAPI,修改订单数量和交货日期的简单应用 文章目录 修改数量代码运行结果 修改交货日期代码运行结果 修改数量 代码 *&---------------------------------------------------------------------* *& Report Z_BAPI_PO_CHANGE *&----…

网络安全(一)主动攻击之DNS基础和ettercap实现DNS流量劫持

alittlemc,个人原创,个人理解和观点。若有错误、不理解请与我联系,谢谢! 介绍了DNS的解析过程。DNS劫持的思路和实践。 DNS 域名 以为live.bilibili.com为例子,从后到前依次为顶级(一级)域名…

渗透测试学习路线

渗透测试学习之前基础: 计算机网络、操作系统(对Windows、Linux操作系统熟悉,对常用命令了解)、数据库、编程语言、web应用开发(前端后端) ⼊门级别的《Web安全渗透剖析》 进阶级别的《⽩帽⼦讲web安全》…

部署前后端分离若依项目--Window版本

1、准备条件 nssm,nginx,win11,后端jar包,前端html文件,可用的redis与mysql 2、后端启动 1、编写run.bat文件 echo off echo. echo run start echo.cd %~dp0set JAVA_OPTS-Xms256m -Xmx1024m -XX:MetaspaceSize12…

【蓝桥杯——物联网设计与开发】基础模块8 - RTC

目录 一、RTC (1)资源介绍 🔅简介 🔅时钟与分频(十分重要‼️) (2)STM32CubeMX 软件配置 (3)代码编写 (4)实验现象 二、RTC接口…

Rasa框架的优点和缺点

优点 1. 开源和免费 Rasa 是开源的,无需支付许可费用,可自由下载和修改源码,适合预算有限或需要定制化解决方案的团队。企业可以完全掌控自己的对话系统,无需依赖外部服务。 2. 数据隐私和安全 Rasa 支持完全本地部署&#xf…

【华为OD-E卷-木板 100分(python、java、c++、js、c)】

【华为OD-E卷-木板 100分(python、java、c、js、c)】 题目 小明有 n 块木板,第 i ( 1 ≤ i ≤ n ) 块木板长度为 ai。 小明买了一块长度为 m 的木料,这块木料可以切割成任意块,拼接到已有的木板上,用来加…

决策树(理论知识1)

目录 何为决策树决策树的组成决策树的构建 何为决策树 决策树(Decision Tree)是一种分类和回归方法,是基于各种情况发生的所需条件构成决策树,以实现期望最大化的一种图解法。由于这种决策 分支画成图形很像一棵树的枝干,故称决策树。它的运…