背景
我正在使用的Jenkins插件是:
我工作的公司正在使用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而不是整个分支。
这样的事情可能吗?
答案 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,但不会自动检出整个分支。