我有一个基于父子触发器的管道。我已启用 build_dir 覆盖并在 .yml 中提供克隆路径,如下所示。另请注意,其他一些开发人员也在使用相同的运行器同时进行一些实验,但没有 git 策略,并在特定目录中检查。
In config.toml
[runners.custom_build_dir]
enabled = true
builds_dir = "//opt/app/abc"
In parent yml
variables:
GIT_CLONE_PATH: $CI_BUILDS_DIR/$CI_PROJECT_PATH/project/pipeline
stages:
- build
- trigger-services
trigger_s1:
interruptible: false
stage: trigger-services
needs: [build]
trigger:
include: s1.gitlab-ci.yml
strategy: depend
rules:
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
changes:
paths:
- abc/**/*
allow_failure: false
In s1.yml
---------------------
variables:
GIT_CLONE_PATH: $CI_BUILDS_DIR/$CI_PROJECT_PATH/project/pipeline
workflow:
rules:
- if: $CI_PIPELINE_SOURCE == "parent_pipeline"
stages:
- test
test:
stage: test
script:
- echo "Running the Unit Test Cases!"
现在我面临的问题是
1-我可以看到克隆目录在多次运行中不断变化。例如,它间歇性地选择/home/abc,有时选择/opt/abc/
2-另一个问题是当它在父作业中选择正确的补丁时,子管道作业会抛出错误,例如
错误:作业失败:GIT_CLONE_PATH =“ Correct_path”必须位于“a_random_path”内
gitlab 是否正在某处查寻这些构建和克隆路径?有什么方法可以在执行之前清理/重置它吗?
3-实现此管道工作(将正确的存储库传递给子作业)的最佳方法是什么?
所以问题出在跑步者的工作方向上。如果您以非 root 用户身份启动 runner 并且不传递任何工作目录作为 arg,它将采用当前目录作为工作目录。 在管道上触发繁荣!它期望您的克隆路径应该与该运行程序的工作目录相同。 修复 - 从 builds_dir 运行运行程序或将其作为工作目录参数传递。
gitlab-runner run --working-directory='/opt/app/abc'