背景:

我正在使用的Jenkins插件是:

  • Bitbucket插件
  • Bitbucket Pullrequest Builder插件

  • 我工作的公司正在使用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 整个分支。

    10-07 18:25
    查看更多