Я пытаюсь найти пример использования плагина Jenkins Copy Artifacts Plugin из конвейеров Jenkins (рабочих процессов).
Может ли кто-нибудь указать пример кода Groovy, который его использует?
Я пытаюсь найти пример использования плагина Jenkins Copy Artifacts Plugin из конвейеров Jenkins (рабочих процессов).
Может ли кто-нибудь указать пример кода Groovy, который его использует?
Если сборки не выполняются в одном конвейере, вы можете использовать прямой CopyArtifact
плагин, вот пример: https://www.cloudbees.com/blog/copying-artifacts-between-builds-jenkins-workflow и пример кода:
node {
// setup env..
// copy the deployment unit from another Job...
step ([$class: 'CopyArtifact',
projectName: 'webapp_build',
filter: 'target/orders.war']);
// deploy 'target/orders.war' to an app host
}
С декларативным Jenkinsfile вы можете использовать следующий конвейер:
pipeline {
agent any
stages {
stage ('push artifact') {
steps {
sh 'mkdir archive'
sh 'echo test > archive/test.txt'
zip zipFile: 'test.zip', archive: false, dir: 'archive'
archiveArtifacts artifacts: 'test.zip', fingerprint: true
}
}
stage('pull artifact') {
steps {
copyArtifacts filter: 'test.zip', fingerprintArtifacts: true, projectName: '${JOB_NAME}', selector: specific('${BUILD_NUMBER}')
unzip zipFile: 'test.zip', dir: './archive_new'
sh 'cat archive_new/test.txt'
}
}
}
}
До версии 1.39 CopyArtifact вы должны заменить второй этап следующим (спасибо @Yeroc):
stage('pull artifact') {
steps {
step([ $class: 'CopyArtifact',
filter: 'test.zip',
fingerprintArtifacts: true,
projectName: '${JOB_NAME}',
selector: [$class: 'SpecificBuildSelector', buildNumber: '${BUILD_NUMBER}']
])
unzip zipFile: 'test.zip', dir: './archive_new'
sh 'cat archive_new/test.txt'
}
}
С CopyArtifact
я использую «${JOB_NAME}» в качестве имени проекта, который является текущим запущенным проектом.
Селектор по умолчанию, используемый CopyArtifact
, использует последний успешный номер сборки проекта, а не текущий (потому что он еще не успешен или нет). С помощью SpecificBuildSelector
вы можете выбрать «${BUILD_NUMBER}», который содержит текущий номер сборки текущего проекта.
Этот конвейер работает с параллельными этапами и может управлять огромными файлами (я использую файл размером 300 МБ, он не работает с stash/unstash)
Этот конвейер отлично работает с моим Jenkins 2.74, если у вас есть все необходимые плагины.
SpecificBuildSelector
я догадался, проанализировав код плагина
- person Nelson G.; 18.10.2017
copyArtifacts filter: 'test.zip', fingerprintArtifacts: true, projectName: '${JOB_NAME}', selector: specific('${BUILD_NUMBER}')
- person Yeroc; 17.03.2018
projectName: '${JOB_NAME}', selector: specific('${BUILD_NUMBER}')
на projectName: env.JOB_NAME, selector: specific(env.BUILD_NUMBER)
(см. также stackoverflow.com/a/55377899/758165).
- person Pit; 27.03.2019
Если вы используете подчиненные устройства в своем мастере и хотите копировать артефакты между собой, вы можете использовать stash/unstash, например:
stage 'build'
node{
git 'https://github.com/cloudbees/todo-api.git'
stash includes: 'pom.xml', name: 'pom'
}
stage name: 'test', concurrency: 3
node {
unstash 'pom'
sh 'cat pom.xml'
}
Вы можете увидеть этот пример по этой ссылке:
https://dzone.com/refcardz/continuous-delivery-with-jenkins-workflow
name = "/" + "${env.JOB_NAME}"
def archiveName = 'relNum'
try {
step($class: 'hudson.plugins.copyartifact.CopyArtifact', projectName: name, filter: archiveName)
} catch (none) {
echo 'No artifact to copy from ' + name + ' with name relNum'
writeFile file: archiveName, text: '3'
}
def content = readFile(archiveName).trim()
echo 'value archived: ' + content
попробуйте это с помощью плагина копирования артефакта