Gitlab Runner - 每次构建新建文件夹

9
我正在使用Gitlab CI进行项目开发。当我在develop分支上推送代码时,它会运行测试并更新我的测试环境(远程服务器)中的代码。
但是,Gitlab Runner已经在使用相同的构建文件夹:builds/a3ac64e9/0/myproject/myproject 然而,我希望每次创建一个新的文件夹:
  • builds/a3ac64e9/1/yproject/myproject
  • builds/a3ac64e9/2/yproject/myproject
  • builds/a3ac64e9/3/yproject/myproject
  • 以此类推
使用这种方式,我只需更改指向最后一个Runner目录的符号链接即可更新网站。
有没有一种方法可以配置Gitlab Runner以此方式?

根据 https://docs.gitlab.com/runner/configuration/advanced-configuration.html#the-runners-section ,你不能这样做。 - djuarezg
3个回答

12
虽然将构建目录用作部署目录没有意义,但您可以设置自定义构建目录。
在文本编辑器中打开 config.toml:(有关其位置的更多信息在这里
[runners.custom_build_dir]下设置enabled = true(更多信息在这里)。
[runners.custom_build_dir]
  enabled = true

在您的 .gitlab-ci.yml 文件中,在 variables 下设置 GIT_CLONE_PATH,它必须以 $CI_BUILDS_DIR/ 开头,例如 $CI_BUILDS_DIR/$CI_JOB_ID/$CI_PROJECT_NAME,这可能会给您所需的内容,但如果您有多个阶段,则它们将具有不同的作业 ID。或者您可以尝试 $CI_BUILDS_DIR/$CI_COMMIT_SHA,它将为每个提交提供一个唯一的文件夹。(更多信息请参见 此处)
variables:
    GIT_CLONE_PATH: '$CI_BUILDS_DIR/$CI_JOB_ID/$CI_PROJECT_NAME'

很遗憾,在使用GIT_CLONE_PATH时,如果你正在使用Windows和Powershell,那么GIT_BUILDS_DIR目前存在问题,因此如果所有运行程序都具有相同的构建目录,则可能需要执行以下操作来解决问题:GIT_CLONE_PATH:'C:\ GitLab-Runner / builds / $ CI_JOB_ID / $ CI_PROJECT_NAME'。您可能需要查看可用变量预定义变量)以找到最适合您路径的变量。

应该是GIT_CLONE_PATH: $CI_BUILDS_DIR/$CI_JOB_ID/$CI_PROJECT_NAME,而不是GIT_CLONE_PATH: '$CI_BUILDS_DIR/$CI_JOB_ID/$CI_PROJECT_NAME',是吗? - tiguero
@tiguero,对我来说,使用引号可以正常工作。 - Stephen Oberauer
完美,两者的组合对我很有效。由于我们需要缩短路径的总字符数以避免Windows 260个字符的限制,我们将C:\builds作为build_dir目录名称,同时保持变量"GIT_CLONE_PATH"简短,使得使用GIT_CLONE_PATH可以进行并行构建:''$CI_BUILDS_DIR/$CONCURRENT_ID/$CI_PROJECT_NAME'',这将导致类似于C:\builds\0\project的结果。 - drecunion

4
您可能想阅读以下答案:更改gitlab-runner的构建中间路径 我会在此处重新发布我的答案:
从概念上讲,这种方法不是可行的方法; 构建目录不是部署目录,它是一个临时目录,用于构建或从中部署,而在shell执行器上,可以通过修复此问题。
因此,您需要按照下面的gitlab-ci.yml脚本从该目录部署到正确的部署目录。
stages:
- deploy

variables:
  TARGET_DIR: /home/ab12/public_html/$CI_PROJECT_NAME

deploy:
  stage: deploy
  script:
     mkdir -pv $TARGET_DIR
     rsync -r --delete ./ $TARGET_DIR
  tags:
    - myrunner

这将把你的 projectfiles 移动到 /home/ab12/public_html/。
命名你的项目为 project1 .. projectn,所有的项目都可以使用这个相同的 .gitlab-ci.yml 文件。

1
您无法仅通过Gitlab CI Runner配置来实现此目标,但您可以创建2个Runner,并使用onlytags关键字的组合将它们分配给每个分支。假设您的两个分支分别命名为masterdevelop,并且已经对两个Runner打上了master_runnerdevelop_runner标签,则您的.gitlab-ci.yml文件应如下所示:
master_job:
   <<: *your_job
   only:
     - master
   tags:
     - master_runner

develop_job:
   <<: *your_job
   only:
     - develop
   tags:
     - develop_runner

<<: *your_job 是您可以分解的实际工作)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接