如何在使用Bitbucket Pullrequest Builder插件时只签出Jenkins文件而不是整个分支?

时间:2017-06-29 08:54:51

标签: git jenkins bitbucket jenkins-pipeline

背景

我正在使用的Jenkins插件是:

  • Bitbucket插件
  • Bitbucket Pullrequest Builder插件

我工作的公司正在使用Jira + Bitbucket。

我通过创建Jenkins" Bitbucket团队实现了Jenkins的自动构建。该作业自动扫描整个公司的Bitbucket组织存储库和每个存储库中的所有分支,并自动为每个存储库中的每个分支构建作业。

一旦拉开请求或将提交推送到其中一个存储库,Jenkins就会分别触发该分支的构建和拉取请求。

管道的Jenkinsfile在所有存储库中都是相同的。

这项工作有一些阶段需要运行Docker,为此安装了Docker的Jenkins奴隶。

其中一个阶段是运行docker-compose,为此它需要一个docker-compose.yml文件,该文件位于存储库中。

现在我的问题:

负责扫描BitBucket组织的工作驻留在Jenkins主机上,这意味着第一次结账是在Jenkins主工作区完成的,而构建的主要阶段之一(docker-compose)发生在Jenkins奴隶" Docker"因此当它到达那个阶段时,存储库中的文件丢失了,所以我在checkout scm中再次使用node('docker'){}将新提交的文件拉入docker机器工作区。

这意味着存储库被克隆了两次;一次是通过识别提交/ PR的扫描作业 - 进入Jenkins主工作室,第二次是Jenkins docker slave进入它的工作区。

目前公司的存储库并不是那么大,但未来它们可能会变大,我想确保工作尽快完成工作。

所以我想知道是否有可能以某种方式覆盖" BitBucket插件"只检查提交/ PR已经完成的分支中的Jenkinsfile而不是整个分支。

这样的事情可能吗?

2 个答案:

答案 0 :(得分:0)

如果要签出单个文件,可以使用以下命令在shell中执行此操作:

git archive --remote=git@git.xxx.xxx:project/your-repo.git HEAD:folder file | tar -x

答案 1 :(得分:0)

pipeline options中,您可以设置skipDefaultCheckout

  

默认情况下,在agent指令中跳过从源代码管理中签出代码。例如:options { skipDefaultCheckout() }

然后它将发现(并运行)您的Jenkinsfile,但不会自动检出整个分支。