【问题标题】:Build with declarative pipeline does not work Jenkins, but works with Scripted pipeline使用声明性管道构建不适用于 Jenkins,但适用于脚本化管道
【发布时间】:2019-07-26 00:01:00
【问题描述】:

我从git 获取源,下一步是替换这些源中所需的变量,下一步在 docker 容器中构建这些源。它如何与脚本化管道一起工作。

node('jenkinsslave') {
  stage('Remove old sources'){
     sh 'rm -rf /var/lib/jenkins/workspace/$JOB_NAME/*'
  }
  stage('Get sources'){
     checkout scm
  }
  stage('Replace variables'){
      sh """
      /scripts/replace_variables.sh "/var/lib/jenkins/workspace/$JOB_NAME"
      """
  }
  stage('Run in container')
  docker.image('maven').inside('-u root:root') {
      sh "mvn clean install"
  }
  stage('Chown to user Jenkins'){
      sh "sudo chown -R jenkins:jenkins /var/lib/jenkins/workspace/$JOB_NAME/"
  }
}

它可以正常工作,没有任何问题。因此,我尝试将其重写为声明性管道。请看。

pipeline {
    agent {label 'jenkinsslave'}

    stages {
        stage('Remove old sources'){
            steps {
                echo 'remove old resources'
                sh 'rm -rf /var/lib/jenkins/workspace/$JOB_NAME/*'
                }
        }
        stage('Checkout SCM') {
            steps {
                echo '> Checking out the source control ...'
                checkout scm
            }
        }
        stage('Replace variables') {
            steps {
                echo '> Replace needed variables ...'
                sh """
                /scripts/replace_variables.sh "/var/lib/jenkins/workspace/$JOB_NAME"
                """
            }
        }
        stage('Build') {
            agent {
                docker {
                   image 'maven:latest'
                   args '-u root:root'
                   }
            }
            steps {
                sh "mvn clean install"
            }
        }
        stage('Chown to user Jenkins'){
            steps {
            echo 'Chown to user Jenkins'
            sh "sudo chown -R jenkins:jenkins /var/lib/jenkins/workspace/$JOB_NAME/"
            }
        }
    }
}

在第二个变体中,是的,它构建源代码,但在第二个工作区中。当然,我替换所需变量的步骤不起作用。 例如,我有工作区my_job。但它创建了my_job@2。另外,我尝试添加

    options {
        skipDefaultCheckout(true)
    }

结果是一样的。我该如何解决?

【问题讨论】:

    标签: bash jenkins jenkins-pipeline dsl jenkins-declarative-pipeline


    【解决方案1】:

    首先,您可以在每次构建后使用它来清理您的 WS,这将很好地清理工作区:

         post { 
          always { 
              cleanWs()
          }
      }
    

    关于 my_job@2。您是否正在运行并发构建?如果不是,那么我将登录到 jenkins 机器并删除与此作业相关的工作区,并在您的声明性管道中引用前面提到的 post 块。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-05-01
      • 1970-01-01
      • 2018-11-10
      • 2013-11-17
      • 2013-02-26
      • 2020-06-11
      • 1970-01-01
      相关资源
      最近更新 更多