背景:
我正在使用的Jenkins插件是:
我工作的公司正在使用Jira + Bitbucket。
我通过创建Jenkins“Bitbucket团队”作业在Jenkins中实现了自动构建,该作业会自动扫描整个公司的Bitbucket组织存储库和每个存储库中的所有分支,并自动为每个存储库中的每个分支构建作业。
一旦拉取请求打开或将提交推入这些存储库之一,Jenkins就会分别触发该分支和该拉取请求的构建。
在所有存储库中,管道的
Jenkinsfile
均相同。这项工作的某些阶段需要运行Docker,为此,在Docker中安装了一个Jenkins从站。
其中一个阶段是运行
docker-compose
,为此需要驻留在存储库中的docker-compose.yml
文件。现在我的问题是:
负责BitBucket组织扫描的工作位于Jenkins主服务器上,这意味着第一个 checkout 在Jenkins主服务器工作区中完成,而构建的主要阶段之一(
docker-compose
)在Jenkins从服务器上进行。 Docker”计算机,因此到了那个阶段,存储库中的文件就在那里丢失了,所以我再次在checkout scm
中使用node('docker'){}
将新提交的文件拉入docker计算机工作空间。这意味着该存储库被克隆了两次;一次是通过扫描作业来识别提交/ PR-进入Jenkins主服务器的工作空间,第二次是由Jenkins docker从服务器进入其工作空间。
目前,公司的存储库还不算大,但将来可能会变大,我想确保这些工作尽快完成。
所以我想知道是否有可能重写“BitBucket插件”以仅从完成提交/ PR的分支中 check out Jenkinsfile,而不是整个分支。
这样的事情可能吗?
最佳答案
在pipeline options中,您可以设置skipDefaultCheckout
。
默认情况下,在agent
指令中跳过从源代码管理中 checkout 代码。例如:options { skipDefaultCheckout() }
然后它将发现(并运行)您的Jenkinsfile,但不会自动 check out 整个分支。