【DevOps】Pipeline功能语法

news/2025/1/16 16:13:04/

Pipeline_2">Pipeline功能语法

一、options全局配置

# 在pipeline下一层添加即可
options {timestamps ()  // 打印日志时间timeout(time: 10, unit: 'MINUTES')  // 设置流水线执行超时时间 天(DAYS)(HOURS) 分钟(MINUTES)(SECONDS)}

二、tools全局工具

 tools {        maven "M3"   // 定义maven build的使用工具,M3是在jenkins中全局工具中定义的名称}

三、post构建后的操作

 # 此配置取决于定义的位置,在谁的steps后面添加,那么就是谁的构建后的操作,此步骤是只有上一步构建成功才会执行post {success {junit '**/target/surefire-reports/TEST-*.xml'  // 将所有符合 **/target/surefire-reports/TEST-*.xml 模式的文件作为 JUnit 测试报告发布,以便在 Jenkins UI 中展示测试结果。archiveArtifacts 'target/*.jar'  // 将所有符合 target/*.jar 模式的文件归档,这些通常是构建好的 JAR 文件,便于后续发布或部署使用(可以直接通过web页面下载jar包)}}   # 构建后操作大全            
success:构建成功时执行的操作。
failure:构建失败时执行的操作。
always:无论构建成功还是失败,总是执行的操作。
unstable:构建不稳定时执行的操作。
changed:构建状态发生变化时执行的操作。
notBuilt:构建未执行时执行的操作。                       

四、Tag参数化构建

# 在顶级pipeline下面添加即可
parameters {gitParameter name: 'BRANCH_TAG',     // 参数的名称type: 'PT_BRANCH_TAG',  // 构建参数(分支或标签)//  branchFilter: 'origin/(.*)',   // 正则表达式匹配所有分支或标签branchFilter: 'refs/tags/*',   // 只使用标签参数化构建defaultValue: 'v1.0',      // 默认版本(必须真实存在)selectedValue: 'DEFAULT',sortMode: 'DESCENDING_SMART',  // 根据提交的标签时间来选择排序description: '请选择您的标签'  // 构建描述}# Git拉取代码修改如下
stage('Git') {steps {checkout([$class: 'GitSCM', branches: [[name: "${params.BRANCH_TAG}"]], doGenerateSubmoduleConfigurations: false, extensions: [], gitTool: 'Default', submoduleCfg: [], userRemoteConfigs: [[url: 'http://192.168.93.102/gitlab-instance-d7dfeb22/web.git',credentialsId: '45a7db8a-55fc-4802-bed1-6ca83bcbf527',]]])}}

五、environment 化境变量

pipeline {agent anyenvironment {CI = 'true'	// 定义一个名称CI的变量值为true}stages {stage('ENV') {steps {echo "${CI}"}}}
}
}

Pipeline_93">六、Pipeline执行远程命令代码

6.1、远程主机执行shell命令

# 在远程主机执行shell命令
pipeline {  agent any  stages {  stage('Remote SSH') {  steps {  script {  def name = 'root'   // 定义局部变量def password = 'wzh.2005'def remote = [:]    // 定义一个名为remote的变量remote.name = '执行shell'  // 起个名字remote.host = '192.168.93.102'  // 要执行的远程主机IPremote.user = "${name}"   // 远程主机用户名(root)remote.password = "${password}"  // 远程主机密码remote.allowAnyHosts = true  // 跳过密钥匹配sshCommand remote: remote, command: "rm -rf /root/*"    // 在远程主机执行的命令sshCommand remote: remote, command: "touch /root/1.txt"  sshCommand remote: remote, command: "date > /root/1.txt"  sshCommand remote: remote, command: "cat /root/1.txt" }  }  }  }  
}

6.2、获取远程主机文件/目录

# 获取远程主机的文件或目录
pipeline {agent anystages {stage('Remote SSH-GET') {steps {script {def name = "root"def password = 'wzh.2005'def remote = [:]remote.name = '获取远程主机文件或目录'remote.host = '192.168.93.102'remote.user = "${name}"remote.password = "${password}"remote.allowAnyHosts = truestage ('Remote SSH-GET') {// 把远程主机/etc/hosts文件,复制到jenkins本机的/root目录下名叫wzh-hosts// override: true:目标文件在本地已经存在时将覆盖本地文件sshGet remote: remote, from: '/etc/hosts', into: '/root/wzh-hosts', override: true// 获取远程目录(提前进行tar打包) sshGet remote: remote, from: '/tmp/mydirectory.tar.gz', into: '/root/mydirectory.tar.gz', override: true}}}}}
}

6.3、发送本机文件/目录到远程主机

# 将本机文件或目录发送到远程主机
pipeline {agent anystages {stage('Remote SSH-PUT') {steps {script {def name = "root"def password = 'wzh.2005'def remote = [:]remote.name = '将本地文件或目录放到远程主机上'remote.host = '192.168.93.102'remote.user = "${name}"remote.password = "${password}"remote.allowAnyHosts = truestage ('Remote SSH-PUT') {// abc.sh文件路径为jenkins工程目录里面writeFile file: 'abc.sh', text: 'ls -lrt'	// 创建一个abc.sh文件往里面写入ls -lrt内容sshPut remote: remote, from: 'abc.sh' , into: '/root'	// 将jenkins本机abc.sh文件发送到远程主机/root下}}}}}
}

6.4、删除远程主机或目录

# 删除远程主机文件或目录
pipeline {agent anystages {stage('Remote SSH-Remove') {steps {script {def name = "root"def password = 'wzh.2005'def remote = [:]remote.name = '将本地文件或目录放到远程主机上'remote.host = '192.168.93.102'remote.user = "${name}"remote.password = "${password}"remote.allowAnyHosts = truestage ('Remote SSH-Remove') {sshRemove remote: remote, path: "/root/abc.sh"}}}}}
}

6.5、在远程主机执行脚本

pipeline {agent anystages {stage('Remote SSH-Remove') {steps {script {def name = "root"def password = 'wzh.2005'def remote = [:]remote.name = '将本地文件或目录放到远程主机上'remote.host = '192.168.93.102'remote.user = "${name}"remote.password = "${password}"remote.allowAnyHosts = truestage ('Remote SSH-Remove') {writeFile file: 'abc.sh', text: 'ls -lrt'	// 创建一个abc.sh文件往里面写入ls -lrt内容sshPut remote: remote, from: 'abc.sh' , into: '/root'	// 将jenkins本机abc.sh文件发送到远程主机/root下sshScript remote: remote, script: "/root/abc.sh"}}}}}
}

七、使用Docker代理

pipeline {agent {docker {  image 'node:6-alpine'	// 镜像可以随意选择,根据自己的项目需要进行选择args '-p 3000:3000 -p 5000:5000'   // 运行容器时开启的端口}}environment {CI = 'true'CD = 'true'}stages {stage('Build') {steps {script {sh 'cat /etc/hosts'}}}stage('Test') {steps {echo "${CI}"}}}
}

五、when条件判断

5.1、基础构建结果的条件判断

pipeline {agent anystages {stage('Build') {steps {echo "Building..."// sh 'exit 1'}}stage('Deploy') {when {expression { return currentBuild.result == 'SUCCESS' } // 使用表达式来检查构建状态}steps {echo "Deployment"}}}
}

5.1、基于环境变量的条件判断

pipeline {agent anyenvironment {ENV_VAR = 'prod'  // 设置环境变量}stages {stage('Build') {steps {echo "Building..."}}stage('Deploy') {when {expression { return env.ENV_VAR == 'prod' } // 只有变量ENV_VAR的值等于prod的时候才会构建此步骤}steps {echo "Deployment"}}}
}

六、Input人机交互

pipeline {  agent any  stages {  stage('传入image版本') {  steps {  script {  // 获取输入并存储为环境变量  def userInput = input(  message: "----是否继续----",  ok: "是",  submitter: "admin",  parameters: [  string(name: "api", defaultValue: "", description: "发布的镜像版本(api)"),  string(name: "im", defaultValue: "", description: "发布的镜像版本(im)")  ]  )  // 将输入参数赋值给环境变量  env.API_VERSION = userInput.api  env.IM_VERSION = userInput.im  }  }  }  stage('发版到101') {  steps {  script {  // 现在可以使用全局环境变量  echo "在 101 阶段: API 版本: ${env.API_VERSION}"  echo "在 101 阶段: IM 版本: ${env.IM_VERSION}"  }  }  } stage('发版到102') {  steps {  script {  // 现在可以使用全局环境变量  echo "在 102 阶段: API 版本: ${env.API_VERSION}"  echo "在 102 阶段: IM 版本: ${env.IM_VERSION}"  }  }  }  }  
}

Pipeline_Push_Git_Code_391">七、Pipeline Push Git Code

stage('Git Push Application') {steps {script {// 使用 withCredentials 来提供 Git 推送所需的凭据withCredentials([usernamePassword(credentialsId: 'gitlab', usernameVariable: 'GIT_USERNAME', passwordVariable: 'GIT_PASSWORD')]) {// 执行 shell 命令来更新 deploy.yaml 并推送更改sh """pwdrm -rf /var/jenkins_home/workspace/xzs-argocd/xzs-applicationgit clone http://192.168.93.102/root/xzs-application.gitcd xzs-applicationsed -i "s#^ *image: .*#        image: 192.168.93.103:80/xzs-argocd/xzs:${BUILD_NUMBER}#" deploy.yamlgit config --local user.name "my-dlq"git config --local user.email "mynamedlq@163.com"git add .git commit -m "v1"# 使用 Git 凭据帮助器推送更改(注意:这种方法可能不是所有 Git 服务器都支持)# 更安全的方法是配置 Git 以使用 SSH 密钥进行身份验证# 如果您使用的是 HTTP/HTTPS,并且服务器支持基本身份验证,则下面的命令可能有效git push --set-upstream http://\${GIT_USERNAME}:\${GIT_PASSWORD}@192.168.93.102/root/xzs-application.git main# 或者,如果您的 Git 服务器配置了接受凭据帮助器的 URL(不常见),则使用:# git push -u origin main# 但在这种情况下,您需要在之前配置凭据帮助器,这通常不是推荐的做法"""// 注意:上面的 git push 命令中使用了直接的用户名和密码,这通常不是安全的做法。// 更安全的方法是使用 SSH 密钥进行身份验证,或者在 Jenkins 中配置一个安全的凭据存储机制。// 上面的命令仅作为示例,您可能需要根据您的 Git 服务器配置进行调整。}}}}

http://www.ppmy.cn/news/1563653.html

相关文章

redis监控会不会统计lua里面执行的命令次数

问题:redis lua里面执行的命令会不会计算到监控的qps中 假设: lua 脚本中对数据库操作了1w次。 执行一次lua 脚本, 虽然内部对数据库操作了1w次, 但是从redis 监控上看只是执行了一次lua脚本, lua内部对数据库的1w次不…

小程序如何引入腾讯位置服务

小程序如何引入腾讯位置服务 1.添加服务 登录 微信公众平台 注意:小程序要企业版的 第三方服务 -> 服务 -> 开发者资源 -> 开通腾讯位置服务 在设置 -> 第三方设置 中可以看到开通的服务,如果没有就在插件管理中添加插件 2.腾讯位置服务…

(STM32笔记)十二、DMA的基础知识与用法 第二部分

我用的是正点的STM32F103来进行学习,板子和教程是野火的指南者。 之后的这个系列笔记开头未标明的话,用的也是这个板子和教程。 DMA的基础知识与用法 二、DMA传输设置1、数据来源与数据去向外设到存储器存储器到外设存储器到存储器 2、每次传输大小3、传…

网络层协议-----IP协议

目录 1.认识IP地址 2.IP地址的分类 3.子网划分 4.公网IP和私网IP 5.IP协议 6.如何解决IP地址不够用 1.认识IP地址 IP 地址(Internet Protocol Address)是指互联网协议地址。 它是分配给连接到互联网的设备(如计算机、服务器、智能手机…

lqb.key按键全套

#include "stc15.h" #define FOSC 11059200L //#define T1MS (65536-FOSC/1000) //1T模式 #define T1MS (65536-FOSC/12/1000) //12T模式typedef unsigned char u8; typedef unsigned int u16; typedef unsigned long u32;#define LY 1 //…

C语言数据结构与算法(排序)详细版

大家好,欢迎来到“干货”小仓库!! 很高兴在CSDN这个大家庭与大家相识,希望能在这里与大家共同进步,共同收获更好的自己!!无人扶我青云志,我自踏雪至山巅!!&am…

微调的种类

微调的种类 flyfish 全参数微调(Full Fine-Tuning): 对预训练模型的所有参数进行调整,以优化其在特定任务上的性能。 指令微调(Instruction Fine-Tuning): 通过提供特定任务的明确指令或示例来…

C语言| 求两个整数的最小值

C语言| 无参函数、有参函数、形参、实参 C语言| 函数声明、函数的返回值 【程序代码】 #include <stdio.h> //主函数&#xff0c;有且只有一个 int main(void) { int Min(int x, int y); //对Min函数的声明&#xff0c;x,y为形参 int a 111, b 222; pri…