簡體   English   中英

使用聲明性管道構建不適用於Jenkins,但可用於腳本化管道

[英]Build with declarative pipeline does not work Jenkins, but works with Scripted pipeline

我從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)
    }

結果是一樣的。 我該如何解決?

首先,您可以在每次構建后使用它來清理您的WS,這將很好地清理工作區:

     post { 
      always { 
          cleanWs()
      }
  }

關於my_job @ 2。 您正在運行並發構建嗎? 如果不是,那么我將登錄到jenkins機器並刪除與此作業相關的工作空間,並在聲明式管道中更早地引用post塊。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM