【发布时间】: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