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

【DevOps】Pipeline功能语法

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 any
    environment {
        CI = 'true'	// 定义一个名称CI的变量值为true
    }
    stages {
        stage('ENV') {
            steps {
               echo "${CI}"
            }
        }
    }
}
}

六、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'  // 要执行的远程主机IP
                    remote.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 any

    stages {
        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 = true
                stage ('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 any

    stages {
        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 = true
                stage ('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 any

    stages {
        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 = true
                stage ('Remote SSH-Remove') {
                        sshRemove remote: remote, path: "/root/abc.sh"
                     }
                }
            }
        }
    }
}

6.5、在远程主机执行脚本

pipeline {
    agent any

    stages {
        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 = true
                stage ('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 any

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

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

pipeline {
    agent any
    environment {
        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

stage('Git Push Application') {
            steps {
                script {
                    // 使用 withCredentials 来提供 Git 推送所需的凭据
                    withCredentials([usernamePassword(credentialsId: 'gitlab', usernameVariable: 'GIT_USERNAME', passwordVariable: 'GIT_PASSWORD')]) {
                        // 执行 shell 命令来更新 deploy.yaml 并推送更改
                        sh """
                            pwd
                            rm -rf /var/jenkins_home/workspace/xzs-argocd/xzs-application
                            git clone http://192.168.93.102/root/xzs-application.git
                            cd xzs-application
                            sed -i "s#^ *image: .*#        image: 192.168.93.103:80/xzs-argocd/xzs:${BUILD_NUMBER}#" deploy.yaml
                            git 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.kler.cn/a/505133.html

相关文章:

  • C++|CRC校验总结
  • Flink系统知识讲解之:容错与State状态管理
  • 信号与系统初识---信号的分类
  • 软件测试 —— Selenium常用函数
  • 【HTML+CSS+JS+VUE】web前端教程-36-JavaScript简介
  • 【Linux】操作系统与进程概念
  • 从0到1搭建推荐系统 -- 数据驱动的算法与架构设计(带数据集)
  • 脚本练习3
  • 统计学习算法——逻辑斯谛回归
  • vue3计算属性
  • G1原理—5.G1垃圾回收过程之Mixed GC
  • 报告分享 | 大语言模型安全和隐私研究综述
  • 使用 WPF 和 C# 绘制覆盖网格的 3D 表面
  • CF 368A.Sereja and Coat Rack(Java实现)
  • uniapp 小程序 textarea 层级穿透,聚焦光标位置错误怎么办?
  • next-auth v5 结合 Prisma 实现登录与会话管理
  • NVIDIA PyTorch Docker 镜像安装
  • RustDesk ID更新脚本
  • macos 一直报错 XXX 将对你的电脑造成伤害。你应该将它移到废纸篓
  • VSCode开发STM32,并支持C++
  • Spring官网构建Springboot工程
  • 【llama_factory】qwen2_vl训练与批量推理
  • DAMA GDPA 备考笔记(二)
  • 3.flask蓝图使用
  • 【优选算法篇】--双指针篇
  • C# PDF下载地址转图片(Base64 编码)