如何使用Jenkins的Pipeline与Jenkinsfile结合实现自动化部署

Jenkins 自动部署 Pipeline 脚本详解 在现代软件开发中,自动化部署是提升开发效率和稳定性的关键步骤。本文将详细介绍如何使用 Jenkins Pipeline 来实现 前端 和 后端 项目的自动化部署。优点自动化部署:前后端都实现了自动化流程,减少了手动操作。高效构建前端:支持 pnpm 构建,提高安装速度。后端:支持 maven 直接打包并传输 jar 包到远程服务器。多服务器部署:可一次性部署到多个服务器,支持分布式架构。日志追踪:Jenkins 提供详细日志,方便排查问题。这种CI/CD方案适用于微服务架构、DevOps。 阅读详情

说明

在刚开始使用Jenkins的时候,大部分的使用方式都是采用FreeStyle进行构建自动化部署的配置,但是随着业务的不断增加与变化也要创建N多个Job来进行管理,甚至当服务器环境迁移之类的事情产生之后发现这种管理方式太过于低效,需要手工来维护这些大量的配置信息,并且相关配置一旦改过之后无法追溯到某个版本,还有脚本的灵活度也不高,所以后来研究使用Pipeline的方式创建Job,然后创建Jenkinsfile文件跟随项目仓库存放,这样灵活度与可追溯性大大加强,利于自动化部署更上一层台阶。

注意:此篇文档针对的是Jenkins 2.46.2 版本下进行撰写的,不同的版本可能有些步骤需要举一反三进行处理。

防爬虫专用,作者的主要博客地址:点击这里, 全路径:blog.youkuaiyun.com/littlebrain4solving。

Pipeline 示例结构

以下给出了基础结构,在此结构中定义了整个自动构建的流程,以及我们使用agent来指定了在哪个节点运行。

pipeline {
    agent any

    stages {
        stage("Build") {
            steps {
                sh 'Hello World'
            }
        }
    }

    post {
        always {
            sh 'Hello World'
        }
    }
}

分支checkout

由于我们在配置Pipeline的时候需要指定SCM版本仓库地址,所以在Jenkinfiles中无需再次指定,只需要执行下面这行命令就可以了。

checkout scm

wrap用法

在FreeStyle中,通过Build Environment一系列Checkbox的方式进行管理设置,在Jenkinsfile中我们可以利用wrap进行替代,参考以下片段,注意:插件需要支持继承SimpleBuildWrapper。

wrap([$class: 'TestInProgressBuildWrapper']) {
    sh '''
        mvn test
    '''
}

自定义此插件注意:继承了SimpleBuildWrapper的插件必须要实现Serializable接口,如果有些无法序列化的则需要在成员变量加transient修饰,如:Socket、IO有关的是无法被序列化的,切记!

step用法

在FreeStyle Build过程中,我们利用step来进行执行相关步骤,注意:插件需要支持继承SimpleBuildStep类。

step([$class: 'Publisher', reportFilenamePattern: '**/testng-results.xml'])

环境变量

在Build的时候如何获取变量,这个很简单,只需要通过${}进行获取即可,当然也支持写成$XXX,两种方式皆可,更多变量可以参考文档:点击这里。

sh '${BUILD_ID}'

工具使用

在执行相关命令的时候要先确保是否存在这个命令,这个时候在脚本中需要使用tools来指定预先在全局工具配置与系统配置中配置好的工具名称;预设置位置在:(Manage Jenkins > Global Tool Configuration > JDK)中。

tools {
    jdk "8u91"
}

完整示例

下列这段示例主要围绕自动化测试展开的配置,利用MAVEN来运行测试用例并查看实时运行状态并把结果信息通过报告界面展示出来。

pipeline {
    agent { node { label "agent-2" } }

    tools {
        jdk "8u91"
        maven "3.3.9"
    }

    stages {
        stage("Build") {
            steps {
                wrap([$class: 'TestInProgressBuildWrapper']) {
                    checkout scm

                    sh '''
                        echo "PATH = ${PATH}"
                        echo "M2_HOME = ${M2_HOME}"
                        mvn test
                    '''
                }
            }
        }
    }

    post {
        always {
            step([$class: 'Publisher', reportFilenamePattern: '**/testng-results.xml'])
        }
   }
}

创建Job接口

Jenkins提供了API方便我们利用代码调用来创建Job,地址:http://xxx/createItem?name=$jobname,注意是POST提交。并且’Content-Type’必须是application/xml,Body为XML格式内容,如果创建的Job要在某个View下面就可以利用地址:http://xxx/view/$viewname/createItem?name=$jobname创建就可以了。

提示:这段XML格式可以从Jenkins的目录($JENKINS_HOME/job/xxx)中获取借鉴。

BRANCH_NAME="test" && 
XML_DATA="<?xml version=\\"1.0\\" encoding=\\"UTF-8\\"?> \
                <flow-definition plugin=\\"workflow-job@2.11\\"> \
                  <description></description> \
                  <keepDependencies>false</keepDependencies> \
                  <properties> \
                    <org.jenkinsci.plugins.workflow.job.properties.PipelineTriggersJobProperty> \
                      <triggers/> \
                    </org.jenkinsci.plugins.workflow.job.properties.PipelineTriggersJobProperty> \
                  </properties> \
                  <definition class=\\"org.jenkinsci.plugins.workflow.cps.CpsScmFlowDefinition\\" plugin=\\"workflow-cps@2.30\\"> \
                    <scm class=\\"hudson.plugins.git.GitSCM\\" plugin=\\"git@3.3.0\\"> \
                      <configVersion>2</configVersion> \
                      <userRemoteConfigs> \
                        <hudson.plugins.git.UserRemoteConfig> \
                          <url>https://gitlab.xxxx.com/xxx/autotester.git</url> \
                          <credentialsId>049ef8c4-d01c-4304-b1eb-22d26ef26a8e</credentialsId> \
                        </hudson.plugins.git.UserRemoteConfig> \
                      </userRemoteConfigs> \
                      <branches> \
                        <hudson.plugins.git.BranchSpec> \
                          <name>*/${BRANCH_NAME}</name> \
                        </hudson.plugins.git.BranchSpec> \
                      </branches> \
                      <doGenerateSubmoduleConfigurations>false</doGenerateSubmoduleConfigurations> \
                      <submoduleCfg class=\\"list\\"/> \
                      <extensions/> \
                    </scm> \
                    <scriptPath>Jenkinsfile</scriptPath> \
                    <lightweight>true</lightweight> \
                  </definition> \
                  <triggers/> \
                  <disabled>false</disabled> \
                </flow-definition>" && 
curl -u username:password -H "Content-Type: application/xml" -XPOST https://jenkins.xxx.com/createItem?name=${BRANCH_NAME} -d "${XML_DATA}"

相关文档

https://jenkins.io/doc/book/pipeline/
https://jenkins.io/doc/pipeline/steps/

k8s jenkins pipeline 多分支发布_Gitlab+Jenkins Pipeline+k8s在生产环境中的应用 系统环境说明GitLab Community Edition 11.9.8Jenkins ver. 2.190.3仓库使用阿里的镜像仓库Kubernetes v1.14.2gitlab和jenkins-master可以选择自建或者部署到k8s中,当前场景是部署在k8s集群之外;镜像仓库可以选择使用harbor或者阿里镜像仓库,当前场景使用的是阿里的镜像仓库;编译发布流程流程很简单,提交代码到不同的... 阅读详情

相关推荐

基于GitLab和Jenkins的前端Webpack项目自动化部署

在"Pipeline"部分,将"Definition"设置为"Pipeline script from SCM",然后选择Git作为"SCM"。Jenkins将根据Jenkinsfile中定义的步骤,从GitLab拉取指定分支的代码,执行构建命令,并将构建好的静态文件部署到目标服务器上。当然,实际的前端项目部署流程可能更加复杂,涉及到更多的配置和步骤。但是通过上述的基本示例,您可以了解到使用GitLab和Jenkins进行自动化部署的基本原理和流程,并可以根据具体的项目需求进行相应的调整和扩展。

DkDebug的博客 197

Jenkinsfile配置记录

【代码】Jenkinsfile配置记录。

liulyly的博客 433

VSLAM框架对比

格VSLAM特点介绍: (一)ORB-SLAM2 (二)ORB-SLAM3 (三)LSD-SLAM (四)

ljtx200888的博客 2294

Jenkins Pipeline 手记(3)—— 自定义Checkout的陷阱

引言 最近在pipeline中checkout代码时遇到了无法序列化的问题。这个问题只在特定的场景下能重现,虽然影响不大,但如果深入研究一下,可以加深对Jenkins Pipeline的理解。 问题 我们知道,在使用Multi-branch pipeline时,可以在job的配置中指定源代码的来源,如git url,credentials,clone options,submodule options等等。然后在pipeline中,可以直接调用: checkout scm 下载代码。这个scm对象对象由J

技术玄关 1万+

eDP、DP与HDMI——现代显示接口的核心解析

eDP、DP和HDMI各有千秋:eDP以嵌入式设备的低功耗见长,DP凭借开放生态和高带宽成为专业领域首选,而HDMI则依靠庞大的消费电子生态稳居家庭市场。未来,随着Type-C接口的普及和超高清内容的爆发,三者的技术边界可能进一步融合,但各自的核心优势仍将长期共存。对于用户而言,选择接口需基于设备需求——游戏玩家青睐HDMI的VRR,设计师依赖DP的多屏扩展,而轻薄本则离不开eDP的紧凑设计。

麟的博客 8411

1104全部报表版本号-银监会报表

G4B_Ⅲ(a)X1《与非中央交易对手的衍生具交易对手信用风险违约风险计算表(现期风险暴露法)(第一档)》G4B_Ⅲ(b)X1《与非中央交易对手的证券融资交易对手信用风险违约风险计算表(权重法)(第一档)》G4B_Ⅲ(a1)X2《与非中央交易对手的衍生具交易对手信用风险违约风险计算表(标准法)(第二档)》Ⅲ(a)X2《与非中央交易对手的衍生具交易对手信用风险违约风险计算表(现期风险暴露法)(第二档)》Ⅲ(a1)X1《与非中央交易对手的衍生具交易对手信用风险违约风险计算表(标准法)(第一档)》

数字化老司机 6289

Jenkins 用户手册 - 使用 Jenkinsfile

原文地址 本节基于 入门章节 中的信息,并介绍了更多有用的步骤,常见模式,并演示了一些不重要的 Jenkinsfile 示例。 创建 Jenkinsfile 并上传到源代码控制,会带来几个直接的好处: 基于 Pipeline 的代码审查和迭代 审核追踪 Pipeline Pipeline 的来源单一真实,可以由项目的多个成员查看和编辑 Pipeline 支持两种语法,声明式和脚本式。这...

kikajack的博客 1万+

移动端UI自动化测试新框架Maestro:声明式语法与实战指南

UI自动化测试是保障移动应用质量的关键环节,其核心原理是通过脚本模拟用户操作,对应用界面进行自动验证。传统命令式框架(如基于Selenium WebDriver的Appium)虽然控制粒度细,但脚本编写和维护成本较高。声明式测试框架则通过描述“做什么”而非“怎么做”,显著降低了技术门槛和维护复杂度,其技术价值在于提升测试脚本的可读性、编写效率与跨团队协作能力。在移动端测试领域,这尤其适用于需要快速验证核心业务流程、进行冒烟测试和回归测试的场景。本文聚焦的**Maestro框架**,正是这一理念的杰出实践。它

weixin_32921023的博客 713

Jenkins扩展篇-流水线脚本语法

JenkinsFile可以通过两种语法来声明流水线结构,一种是声明式语法,另一种是脚本式语法。 脚本式语法以Groovy语言为基础,语法结构同Groovy相同。 由于Groovy学习不适合所有初学者,所以Jenkins团队为编写Jenkins流水线提供一种更简单、更有主见的语法-声明式。

主要分享测试的学习资源,帮助快速了解测试行业,帮助想转行、进阶、小白成长为高级测试工程师。 977

Mac mini M2 部署 OpenClaw:最稳 7×24 本地 AI 服务器

Mac mini M2 凭借其强大的 M2 芯片、低功耗和静音特性,成为部署 OpenClaw AI 服务器的理想平台。本文详细介绍了从系统配置到 OpenClaw 部署的全过程,包括 Docker 环境搭建、docker-compose 编排、性能优化方案以及开机自启设置。通过统一内存架构和高效 SSD,M2 版 Mac mini 在 AI 推理速度上显著优于前代产品,同时保持极低的功耗(仅 8W),适合 7×24 小时稳定运行。部署方案充分利用了容器化技术,确保了服务的可靠性和可维护性。

一键难忘的博客 2953

Aurix TC3xx系列MCU DMA模块配置方法(二)

本文主要基于英飞凌Aurix TC3xx系列MCU,通过EB tresos配置工具,介绍DMA驱动模块的配置方法。

m0_38045338的博客 2850

jenkins教程:jenkinsfile语法之environment、options

Declarative pipeline也包含了各种指令,比如environment,options,parameters,triggers等,指令不是必须出现的指令。stage的options指令类似于Pipeline的options指令。在stage中,在进入agent或检查任何 when条件之前调用options指令中的步骤。定义 Pipeline或stage运行时的环境变量,位于pipeline块顶部的。的步骤,或者与stage相关的声明性选项,比如。定义的环境变量适用于流水线中的所有步骤,

学亮编程手记 1225

高云FPGA系列教程(7):ARM GPIO外部中断

高云GN1NSR-4C共有16个GPIO,每个GPIO可配置成输入或输出模式,支持中断输入,触发方式可选择:上升沿、下降沿、高电平、低电平触发。中断优先级可通过NVIC进行设置,支持 0-7 级可编程中断优先级。

whik1194的博客 1375

python pipeline转jenkins_浅谈Jenkins Pipeline

已经很久很久没有更新我的空间了, 最近刚好工作上的变动让我有时间去静下心来去整理一下这一年来学到的东西.谈到Jenkins, 大家肯定耳熟能详, 持续集成/持续交付, 自动化部署工具, 测试工具, 配合目前我们绝大多说开发工具, 简直是万能的瑞士军刀.接触Devops这个概念两年有余, 使用了很多开发工具诸如JIRA, Gitlab, Ansible, SVN, NEXUS, CHEF, FISH...

weixin_39934302的博客 153

安卓手机部署酒馆 SillyTavern 全攻略(Termux 本地安装教程)

本文详细介绍了如何在安卓手机上通过 Termux 环境本地部署 SillyTavern,一个功能丰富的角色扮演对话 AI。步骤包括安装 Termux、Git,克隆 SillyTavern 仓库,安装 Node.js 和依赖,启动 SillyTavern,以及可选的高阶玩法——安装 TAI-Extras 扩展模块。文章还提供了常见问题的解决方案和优化技巧,如更新 SillyTavern、处理报错、文件访问、添加快捷命令和禁用安卓后台进程杀死。通过本教程,用户可以在安卓手机上体验本地部署的 AI 对话,享受更高

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 1万+

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

云原生系列 - Jenkins

Jenkins Jenkins,原名 Hudson,2011 年改为现在的名字。它是一个开源的实现持续集成的软件工具。 官方网站(英文):https://www.jenkins.io/ 官方网站(中文):https://www.jenkins.io/zh/ 我们需要三台服务器 服务器名 ip 准备条件 Jenkins-GitLab-ssh 192.168.119.134 至少4C、5G Jenkins-Server 192.168.119.135 安装jdk1.8 TestServ

知行 2016

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Jenkins 使用 Pipeline 构建部署 Spring Boot 应用

前言 在本文开始前可以先看看这篇文章: Jenkins + Gitlab + Maven + Tomcat 持续集成部署 SpringBoot 应用实践,除了 Jenkins 构建项目的方式不一样之外,其他配置都一样。 关于 pipeline 的简介和 pipeline 的两种语法模型的区别可以看这篇文章: Pipeline 声明式和脚本式的主要区别 Spring Boot 项目准备 这里创建了一个简单的 Spring Boot 项目,功能简单,运行后会提供一个可访问的 index 页面。结构图如下: 项

YekonGLE 3307

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

jenkins之pipeline及结合ansible参数化构建

pipelineJenkins的Pipeline可以让项目的发布整体流程可视化,明确执行的阶段,可以快速的定位问题。并且整个项目的生命周期可以通过一个Jenkinsfile文件管理,而且Jenkinsfile文件是可以放在项目中维护。所以Pipeline相对自由风格或者其他的项目风格更容易操作。安装ssh agent插件新建流水线项目复制一下脚本并做相应修改pipeline {agent any #定义在所有agent跑stages {

m0_46652469的博客 848

jenkins 自动化部署的实现(10)

1.介绍   前面第6章介绍过使用pipeline编写各阶段,包括:checkout、nuget restore,Build, Publish。这些属于CI 也就是持续集成。在第9章介绍过多分支构建,本篇在6,9章基础上继续。   后续还需要的阶段包括:pack(打包),根据分支不同上传到不同的服务器再执行脚本部署,这些属于CD 也就是持续部署。   本节重点讲如何打包zip上传到目标服务器。...

weixin_43394129的博客 420

实操教程:使用 Jenkins Pipeline 构建 “代码拉取→编译→部署” 的自动化流程

本教程将指导您逐步实现一个完整的自动化流程,使用 Jenkins Pipeline 实现代码从版本控制系统(如 Git)拉取、编译代码、以及部署到目标环境。整个过程基于 Jenkins 的声明式 Pipeline,确保流程可靠、可重复。通过本教程,您已构建了一个完整的自动化流程,能显著提升开发效率。以下步骤将流程分解为“代码拉取”、“编译”和“部署”三个阶段,每个阶段使用 Jenkins Pipeline 的。示例,适用于 Java 项目(使用 Maven 编译,部署到远程服务器)。

2501_93891276的博客 648

Jenkins实践(二)------ Jenkinsfile

Jenkins 能做的事情太多了,如果要一一讲解肯定讲不完,因此此系列文章只以多分支流水线任务(Pipeline)为例。 我们要实现的是,能够通过 Jenkins 的 pipeline,拉取代码,编译,发布 docker 镜像,部署 docker 服务器。 我们使用 git 作为代码版本管理工具,使用 nexus3 私服作为jar包、docker 镜像的仓库。Pipeline 中,主要是使用 ...

2462

Docker+jenkinsPipeline运行实现python自动化测试

这些资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!凡事要趁早,特别是技术行业,一定要提升技术功底。

HUACE5400的博客 798

使用Jenkins+Docker构建企业级持续集成环境(七)

Dockerfile文件如下 #使用的基础镜像 FROM java:8 COPY ./target/*.jar /app.jar CMD ["--server.port=8080"] ENTRYPOINT ["java","-jar","/app.jar"] COPY ./target/*.jar /app.jar 因为Jenkins的操作目录就是当前项目的工作目录,而我们生成的jar就在target目录下 所以这里主要是将jar包拷贝到容器中并重命名为app.jar 修改Jenkinsfile如下所示

qq_39046786的博客 785

【Jenkins】使用 Jenkins 的pipeline进行持续交付

背景 介绍 Jenkins Pipeline,该工具扩展了流行的 CD(Continuous Delivery) 应用程序以管理最复杂的软件管道并帮助您持续高效地交付。 Jenkins Pipeline Pipeline 为 Jenkins 添加了一套强大的自动化工具。它支持从简单的持续集成任务到全面的持续交付管道的软件交付。构建、测试和交付每个应用程序的步骤成为应用程序本身的一部分,存储在 Jenkinsfile 中。 Jenkins Pipeline 提供了一种特定领域的语言来创建、编辑、查看和

baidu_31295661的博客 668
上一篇: 黑群晖(XPEnology)无法启动&重建系统并保留数据经验总结
下一篇: Git常用命令汇总
littlebrain4solving
博客等级 码龄12年 252粉丝 50原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值