Docker 如何在Jenkins声明性管道中的代理安装过程中运行某些东西?
我们目前的Jenkins管道如下所示:Docker 如何在Jenkins声明性管道中的代理安装过程中运行某些东西?,docker,jenkins,gradle,Docker,Jenkins,Gradle,我们目前的Jenkins管道如下所示: pipeline { agent { docker { label 'linux' image 'java:8' args '-v /home/tester/.gradle:/.gradle' } } environment { GRADLE_USER_HOME = '/.gradle' GRADLE_PROPERTIES = credentials('gradle.pro
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映像之前存在此目录?您可以在所有阶段之前运行准备阶段,然后更改代理
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'
}
}
}
管道在Manage Jenkins页面和文件夹级别提供了一个全局选项,用于指定运行基于Docker的管道所使用的代理(按标签)
如何确保
代理{docker{label'linux'}}
将获得与准备阶段相同的代理?已更新以限制某些主机上的docker代理。因此,此处是否有隐藏的详细信息?这两次它都只指定了一个标签,但是否可以保证即使有18台主机具有相同的标签,您也会得到相同的主机?您不能有重复的节点名(Jenkins Slaves)用作dockerWe的主机。实际上,我们没有重复的节点名“linux”是我们应用于18台主机的标签,这些主机都运行各种linux发行版。无论如何,我们当然不能将自己简化为在一台主机上运行,我们几乎没有足够的处理能力来按原样构建一切(