如何在多个 gitlab 运行器配置中的作业之间共享“构建存储库目录”?

如何在多个 gitlab 运行器配置中的作业之间共享“构建存储库目录”?

我正在使用 gitlab runner 部署应用程序 -shared gitlab runner 并且并发数为 4

/etc/gitlab-runner/config.toml
        concurrent = 4
        check_interval = 0
        executor = shell

所有作业都在不同的阶段运行。

.gitlab-ci.yml

stages:
  - build-prod-stage
  - deploy-prod-stage

BUILD_PROD_JOB:
  stage: build-prod-stage
  variables:    
    GIT_CLEAN_FLAGS: none      
  script:
    - xxxxxx
    - xxxxx

DEPLOY_PROD_JOB:
  variables:
    GIT_CLEAN_FLAGS: none 
  stage: deploy-prod-stage
  script: 
    - xxxxxx
    - xxxxxx*

通常,BUILD_PROD_JOB 和 DEPLOY_PROD_JOB 在同一个构建目录中运行。但有时它们彼此使用不同的目录

gitlab-runner 日志

构建生产任务 正在获取更改,并将 git 深度设置为 50... 已在 /xxxx/gitlab-runner/builds/(gitlab-runner 名称)/ 中初始化空的 Git 存储库1/(存储库名称)/.git/.....

部署_生产_作业 正在获取更改,并将 git 深度设置为 50... 已在 /xxxx/gitlab-runner/builds/(gitlab-runner 名称)/ 中初始化空的 Git 存储库0/(存储库名称)/.git/....

我猜到了为什么会发生这些事情。

  • BUILD_PROD_JOB 在其他作业正在运行时开始运行。因此,CI_CONCURRENT_ID 为 1
  • DEPLOY_PROD_JOB 在其他作业完成后开始运行,因此 CI_CONCURRENT_ID 为 0

在这种情况下,我可以强制“DEPLO_PROD_JOB”在与“BUILD_PROD_JOB”相同的 build_dir 中运行吗?

  • BUILD_PRODJOB --> /xxxx/gitlab-runner/builds/(gitlab-runner 名称)/1/(存储库名称)/.git/
  • DEPLOY_PRODJOB --> /xxxx/gitlab-runner/builds/(gitlab-runner 名称)/1/(存储库名称)/.git/

答案1

您需要使用工件和依赖项在作业之间传递数据:

stages:
  - build-prod-stage
  - deploy-prod-stage

BUILD_PROD_JOB:
  stage: build-prod-stage
  variables:    
    GIT_CLEAN_FLAGS: none      
  script:
    - xxxxxx
    - xxxxx
  artifacts:
    paths:
    - path-to-the-folder-you-want-to-share-between-jobs

DEPLOY_PROD_JOB:
  variables:
    GIT_CLEAN_FLAGS: none 
  stage: deploy-prod-stage
  script: 
    - xxxxxx
    - xxxxxx*
  needs:
    - job: BUILD_PROD_JOB
      artifacts: true

相关内容