我们当前的Jenkins管道如下所示:
pipeline {
agent {
docker {
label 'linux'
image 'java:8'
args '-v /home/tester/.gradle:/.gradle'
}
}
environment {
GRADLE_USER_HOME = '/.gradle'
GRADLE_PROPERTIES = credentials('gradle.properties')
}
stages {
stage('Build') {
steps {
sh 'cp ${GRADLE_PROPERTIES} ${GRADLE_USER_HOME}/'
sh './gradlew clean check'
}
}
}
post {
always {
junit 'build/test-results/**/*.xml'
}
}
}
我们挂载/.gradle
是因为我们想在构建之间重用缓存的数据。问题是,如果该计算机是全新的构建计算机,则主机上的目录尚不存在。
我在哪里放置在之前运行的设置逻辑,以便可以确保在运行docker映像之前该目录存在?
答案 0 :(得分:1)
您可以在所有阶段之前运行准备阶段,并在此之后更改代理
pipeline {
agent { label 'linux' } // slave where docker agent needs to run
environment {
GRADLE_USER_HOME = '/.gradle'
GRADLE_PROPERTIES = credentials('gradle.properties')
}
stages {
stage('Prepare') {
// prepare host
}
stage('Build') {
agent {
docker {
label 'linux' // should be same as slave label
image 'java:8'
args '-v /home/tester/.gradle:/.gradle'
}
}
steps {
sh 'cp ${GRADLE_PROPERTIES} ${GRADLE_USER_HOME}/'
sh './gradlew clean check'
}
}
}
post {
always {
junit 'build/test-results/**/*.xml'
}
}
}
Pipeline在Manage Jenkins页面和Folder级别提供了一个全局选项,用于指定要使用哪些代理(按Label)来运行基于Docker的管道。
How to restrict the jenkins pipeline docker agent in specific slave?