Jenkins Pipeline设置人工干预
  TEZNKK3IfmPf 2023年11月13日 29 0
 

一、设置人工干预,决定是否部署到生产环境

1.1.脚本

#!groovy

stage("确认部署到生产"){
     
       
    def inputResp = input id: "input_${BUILD_NUMBER}", message: '''确认部署到生产请输入:approve''', parameters: [string(defaultValue: '', description: '''确认是否部署到生产,输入指令后点击Proceed,终止请点击Abort''', name: 'action')]
    
    if(inputResp != "approve")
    {
     
       
        throw new Exception("The input is incorrect, we abort this job..")
    }
    println "开始部署到生产......"
}

1.2.执行效果

Jenkins Pipeline设置人工干预

二、设置人工干预,定义执行动作(可从失败的stage执行)

传入stagesRun的参数确定的情况

脚本

#!groovy

def ansible_path = "/etc/ansible/ansible_playbooks"
timestamps{
     
           
    try {
     
       
        node(){
     
       
        	stage("配置安装参数"){
     
       
                echo "配置安装参数"
            }
            stage("安装docker"){
     
       
                stagesRun("installDocker",ansible_path)
            }        
        }//node
    }//try
    catch(Exception err){
     
       
        throw new Exception("*******Caught an exception: ${err}")
    }//catch
}

//install docker
def installDocker(ansible_path){
     
       
    dir(ansible_path){
     
       
        ansiblePlaybook become: true, 
        becomeUser: 'root',				//相当于sudo
        disableHostKeyChecking: true, 
        inventory: '/etc/ansible/hosts', 
        playbook: 'install_docker.yml',
        colorized: true
        // extraVars: [
        // DBPasswd: DB_pwd
        // ]
    }
}

def stagesRun(stage_name,ansible_path){
     
       
    def nodeId = "node" +  new SimpleDateFormat("YYYYMMddHHmmss").format(Calendar.getInstance().getTime())
    def errorFlag = false
    while(true)
    {
     
       
        if (errorFlag)
        {
     
       
            def desc = '''请选择下一步动作指令后点击Proceed,要终止请点击Abort'''
            def inputResp = input id: "input_${nodeId}", 
                                        message: "${stage_name}执行失败,请选择下一步动作:", 
                                        parameters: [choice(choices:['retry','skip'], description: desc, name: 'action')]
            if ('skip' == inputResp)
            {
     
       
                return
            }
            if('retry' == inputResp)
            {
     
       
                echo "重试"
            }
        }//if (errorFlag)
        try
        {
     
       
            "${stage_name}"("${ansible_path}")
            break
        }
        catch(Exception err)
        {
     
       
            errorFlag = true
            echo "Caught: ${err}"
        }
    }//while(true)
}

传入的参数不确定的情况

主程序

function = load "${WORKSPACE}/jenkinsfile/common.groovy"
def parmList = [a,b,c,d]		//将要传入的参数放到列表里面
function.stagesRun("flywayUpgradeSql",gitProduct,parmList)	

common.groovy

#!groovy
/** * @description: 通过flyway升级数据库 * @param: [数据库用户名,密码,jdbc_url,flyway升级sql的路径] * @return: null */
def flywayUpgradeSql(paramList){
     
       
    def dbUser = paramList[0]
    def dbPwd = paramList[1]
    def dbUrl = paramList[2]
    def sqlPath = paramList[3]
    sh """ source /etc/profile [[ ! -d ${sqlPath} ]] && echo "ERROR:${sqlPath} Not Found" && exit 1 /home/admin/flyway-4.2.0/flyway \\ -user=${dbUser} -password=${dbPwd} \\ -url=${dbUrl} -locations=filesystem:${sqlPath} \\ -baselineOnMigrate=true -validateOnMigrate=false -placeholderReplacement=false \\ repair migrate """
}

//运行stage
def stagesRun(stageName,gitProduct,parmList){
     
       
    def errorFlag = false
    while(true)
    {
     
       
        if (errorFlag)
        {
     
       
            def desc = '''请选择下一步动作指令后点击Proceed,要终止请点击Abort'''
            def inputResp = input id: "input_${BUILD_NUMBER}",
                    message: "${stageName}执行失败,请选择下一步动作:",
                    parameters: [choice(choices:['retry','skip'], description: desc, name: 'action')]
            if ('skip' == inputResp)
            {
     
       
                return
            }
            if('retry' == inputResp)
            {
     
       
                echo "重试"
                sh """ for name in `echo ${gitProduct}` do { name=\${name##*/} cd ${WORKSPACE}/\$name git pull } & done wait cd ${WORKSPACE}/devops && git pull """
            }
        }//if (errorFlag)
        try
        {
     
       
            "${stageName}"(parmList)
            break
        }
        catch(Exception err)
        {
     
       
            errorFlag = true
            echo "Caught: ${err}"
        }
    }//while(true)
}

return this		//这句一定得写,不然不能调用

2.2.执行效果

Jenkins Pipeline设置人工干预

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月13日 0

暂无评论

推荐阅读
  TEZNKK3IfmPf   2023年11月13日   19   0   0 jenkins
  TEZNKK3IfmPf   2023年11月14日   23   0   0 jenkins
  TEZNKK3IfmPf   2023年11月14日   24   0   0 jenkins
  TEZNKK3IfmPf   2023年11月13日   26   0   0 节点jenkins
  TEZNKK3IfmPf   2024年03月22日   58   0   0 jenkins
  TEZNKK3IfmPf   2023年11月14日   21   0   0 jenkins
  TEZNKK3IfmPf   2023年11月14日   29   0   0 linuxtomcatjenkins
  TEZNKK3IfmPf   2023年11月13日   30   0   0 jenkins
TEZNKK3IfmPf