Jenkins pipeline简单片段

10次阅读
没有评论
Jenkins

克隆代码片段

stage('Clone') {
    echo "1.Clone Stage"
    git url: "https://github.com/cnych/jenkins-demo.git"
}

构建产物

stage('Build') {
    echo "3.Build Docker Image Stage"
    sh "docker build -t xadocker.cn/jenkins-demo:${build_tag} ."
}

构建产物并附加仓库提交版本号

stage('Clone') {
    echo "1.Clone Stage"
    git url: "https://github.com/cnych/jenkins-demo.git"
    script {
        build_tag = sh(returnStdout: true, script: 'git rev-parse --short HEAD').trim()
    }
}
stage('Build') {
    echo "3.Build Docker Image Stage"
    sh "docker build -t qienda/jenkins-demo:${build_tag} ."
}

打包推送产物

stage('Push') {
    echo "4.Push Docker Image Stage"
    sh "docker login -u xadocker -p xxxxx"
    sh "docker push xadocker.cn/jenkins-demo:${build_tag}"
}


// 或者推荐以下方式
stage('Push') {
    echo "4.Push Docker Image Stage"
    withCredentials([usernamePassword(credentialsId: 'harbor', passwordVariable: 'harborPassword', usernameVariable: 'harborUser')]) {
        sh "docker login -u ${harborUser} -p ${harborPassword}"
        sh "docker push xadocker.cn/jenkins-demo:${build_tag}"
    }
}

等待输入

stage('Deploy') {
    input {
        message "Should we continue?"
    }
    steps {
        echo "Continuing with deployment"
    }
}

对输入增加超时

stage('Deploy') {
    options {
        timeout(time: 30, unit: 'SECONDS') 
    }
    input {
        message "Should we continue?"
    }
    steps {
        echo "Continuing with deployment"
    }
}

输入参数选项

stage('select') {
    echo "5. Change YAML File Stage"
    def userInput = input(
        id: 'userInput',
        message: 'Choose a deploy environment',
        parameters: [
            [
                $class: 'ChoiceParameterDefinition',
                choices: "Dev\nQA\nProd",
                name: 'Env'
            ]
        ]
    )
    echo "This is a deploy step to ${userInput.Env}"
    sh "sed -i 's/<BUILD_TAG>/${build_tag}/' k8s.yaml"
    sh "sed -i 's/<BRANCH_NAME>/${env.BRANCH_NAME}/' k8s.yaml"
}

逻辑判断

stage('Deploy') {
    echo "6. Deploy Stage"
    if (userInput.Env == "Dev") {
      // deploy dev stuff
    } else if (userInput.Env == "QA"){
      // deploy qa stuff
    } else {
      // deploy prod stuff
    }
    sh "kubectl apply -f k8s.yaml"
}

script块获取命令输出

对于声明式pipeline,有一些逻辑处理语句可能不是很完善,没有脚本式那么丰富的处理方式,但是可以用script块来使用脚本式的语句

stage('Get JDK Version') {
    steps {
        script {
            try {
                JDK_VERSION = sh (script: "java --version | awk 'FNR==1'", returnStdout: true)
            } catch(err) {
                echo "CAUGHT ERROR: ${err}"
                throw err
            }
        }
    }
}
stage('Say JDK Version ') {
    steps {
        echo "${JDK_VERSION}"
    }
}

并发parallel

博主用得少,因为资源不足以支撑,资源充足得小伙伴可以用用,这种经常在多端多平台时编译或多cpu架构时用到,

1.同agent下的任务并发

stage('Build') {
    failFast true
    parallel {
        stage(’Branch UAT') {
            git url: "https://xxx.git",branch: "uat"
            steps {
                sh 'npm build:uat'
                sleep time: 10, unit: 'SECONDS'
            }
        }
        stage('Branch DEV') {
            git url: "https://xxx.git",branch: "dev"
            steps {
                sh 'cnpm i && cnpm build:dev'
                sleep time: 20, unit: 'SECONDS'
            }
        }
    }
}

2.不同agent下的并发

stage('Build') {
    failFast true
    parallel {
        stage('ARM') {
            agent { lable 'arm' }
            git url: "https://xxx.git",branch: "uat"
            steps {
                sh 'npm build:uat'
                sleep time: 10, unit: 'SECONDS'
            }
        }
        stage('x86') {
            agent { lable 'x86' }
            git url: "https://xxx.git",branch: "uat"
            steps {
                sh 'cnpm i && cnpm build:uat'
                sleep time: 20, unit: 'SECONDS'
            }
        }
    }
}

xadocker
版权声明:本站原创文章,由 xadocker 2019-07-14发表,共计2540字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)
验证码
载入中...
0.460