当我将Copy Artifact Plugin用于Jenkins时,如何从同一管道运行(下游)的另一个作业中检索正确的工件?现在我正在使用“最新成功构建”中的工件,但这可能也是错误的,因为我从中获取工件的工作可能已经再次运行并产生了另一个工件。
对完整设置的更多解释:
对于我的项目,我正在使用Jenkins构建&自动部署到Nexus,HockeyApp和Play商店。我创建了一个使用以下JenkinsFile(简化版)的Multibranch Pipeline:
#!groovy
node('android') {
def branchName = env.BRANCH_NAME
def params = [string(name: 'BRANCH_NAME', value: branchName)]
echo "Using branch: ${branchName}"
stage('Build & Unittests') {
build job: 'Android - Unittests', parameters: params
}
if (branchName == 'master') {
stage('Nexus publish') {
build job: 'Android - Nexus publish', parameters: params
}
stage('HockeyApp') {
build job: 'Android - HockeyApp', parameters: params
}
stage('Google Play Store') {
build job: 'Android - Play Store', parameters: params
}
}
}
所有其他作业都是具有2轴的多配置项目:FLAVOR和TYPE
作业'Android - Unittests'将创建.apk的工件,可供所有后续工作使用。为此,我使用了Copy Artifact Plugin。
例如,这是我的工作'Android - Nexus publish'的构建配置:
那么如何使用'Android-Unittests'工作中的正确工件?
PS。这在我的案例中非常重要,因为我正在与几个分支机构合作。经常会发生几个分支将启动管道,因此“上次成功构建”并不总是正确的:“Android - Play Store”作业可能是在另一个分支已经启动后构建的
答案 0 :(得分:2)
您可以根据生成它的构建的ID复制工件。
要做到这一点,你需要:
所以,你的' Android - Unittests'管道应如下所示:
#!groovy
node('android') {
def branchName = env.BRANCH_NAME
def params = [string(name: 'BRANCH_NAME', value: branchName)]
echo "Using branch: ${branchName}"
def buildAnUnitTestJobId
stage('Build & Unittests') {
def buildAnUnitTestJob = build job: 'Android - Unittests', parameters: params
// Note that buildAnUnitTestJob will be null if 'Android - Unitttests' fails
buildAnUnitTestJobId = buildAnUnitTestJob.id
}
if (branchName == 'master') {
stage('Nexus publish') {
build job: 'Android - Nexus publish', parameters: params + [string(name:'BUILD_AND_UNIT_TEST_JOB_ID', value: buildAnUnitTestJob)]
}
stage('HockeyApp') {
build job: 'Android - HockeyApp', parameters: params
}
stage('Google Play Store') {
build job: 'Android - Play Store', parameters: params
}
}
}