Jenkins:从Multibranch管道复制工件

时间:2017-04-03 13:18:53

标签: jenkins jenkins-plugins jenkins-pipeline

我是Jenkin的新手,我在Bitbucket有4个回购说A,B,C,D。 我必须拿A,B& C repos,使用 gradle build 构建它们,这将产生战争。 现在我必须在D \ warsFolder中复制这些战争 我创建了Multibranch管道并生成了管道语法,该语法提取A,B和B管道。来自git的C并构建它们。看起来像这样的事情

    node {
    checkout([$class: 'GitSCM', branches: [[name: '*/master']], doGenerateSubmoduleConfigurations: false, extensions: [[$class: 'RelativeTargetDirectory', relativeTargetDir: 'A']], submoduleCfg: [], userRemoteConfigs: [[credentialsId: 'id', url: 'http://.../A.git']]])
    dir('A') {
        bat 'gradle build -i --info --stacktrace --debug'
    }
    checkout([$class: 'GitSCM', branches: [[name: '*/master']], doGenerateSubmoduleConfigurations: false, extensions: [[$class: 'RelativeTargetDirectory', relativeTargetDir: 'B']], submoduleCfg: [], userRemoteConfigs: [[credentialsId: 'id', url: 'http://.../B.git']]])
    dir('B') {
        bat 'gradle build -i --info --stacktrace --debug'
    }
checkout([$class: 'GitSCM', branches: [[name: '*/master']], doGenerateSubmoduleConfigurations: false, extensions: [[$class: 'RelativeTargetDirectory', relativeTargetDir: 'C']], submoduleCfg: [], userRemoteConfigs: [[credentialsId: 'id', url: 'http://.../C.git']]])
    dir('C') {
        bat 'gradle build -i --info --stacktrace --debug'
    }

    }

在Jenkinsfile中添加了上面的脚本,我把它放在了A repo。

现在我创建了一个Multibranch管道 Fetch_all 并在分支源中创建了>单一存储库&分支 - >存储库URL我添加了http://.../A.git(有Jenkinsfile)。 到目前为止一切正常,我能够获取源并构建它们。

我在源代码管理中创建了Freestyle的新职位 - > Git - >存储库URL将为http://.../D.git。 我正在尝试复制 Fetch_all 管道中生成的战争但在Build - >中从项目名称不接受Multibranch管道的另一个项目复制工件。它像

一样抛出错误
ERROR: Unable to find project for artifact copy: 
This may be due to incorrect project name or permission settings; see help for project name in job configuration.

感谢任何帮助。

2 个答案:

答案 0 :(得分:2)

最后得到它,当我给pipe_name / branchname,即Fetch_all /%00时,它工作正常。

答案 1 :(得分:0)

花了一些时间来找出正确的语法。 Coyartifact Plugin的文档有些混乱,因为它提到了encoding of special characters。实际上,不必对空格进行编码,而必须对斜杠进行编码。

复制工件的Jenkins文件位于“其他文件夹/多分支管道测试/”中,并在此内容中复制“文件夹/多分支管道/功能%2Fallow-artifact”的最后一次成功构建的工件。复制项目

copyArtifacts(
    projectName: 'Folder/Multi branch Pipeline/feature%2Fallow-artifact-copy',// the name of project, as you find it from the root of jenkins
    selector: lastSuccessful(),             // selector to select the build to copy from. If not specified, latest stable build is used.
    filter: 'projects/Output/myzip.zip',    // ant-expression to filter artifacts to copy, Attention! Filter is case sensitive
    target: 'sources/deploy/',              // target directory to copy to, intermediate folders will be created
    flatten: true,                          // ignore directory structures of artifacts, Artifact will be placed at 'sources/deploy/myzip.zip'. Is the option false, you find it at 'projects/Outpu/myzip.py'
    optional: false,                        // do not fail the step even if no appropriate build is found.
    fingerprintArtifacts: true,             // fingerprint artifacts to track builds using those artifacts
)

并且不要忘记允许在要从中获取工件的项目中复制工件。将此添加到“文件夹/多分支管道/功能%2Fallow-artifact-copy”的Jenkins文件中。使用绝对路径,以免在移动某些项目时出现问题。

options {
     disableConcurrentBuilds()
     timeout(time: 30, unit: 'MINUTES')
     copyArtifactPermission('/Other-folder/Multi branch Pipeline Test/*, /second Folder/*') // allow all the projects or branches of 'Other-folder/Multi branch Pipeline Test' and 'second Folder' to copy artifacts of this job
} // end of options