[英]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.