我们在基础架构中使用 GitlabHQ 和 Gitlab-CI。有了这样的持续集成设置,我们愿意在 CI 中自定义构建逻辑。
现在,新的提交 GitlabHQ 会触发 CI 的钩子,它会告诉 gitlab-ci-runner 运行构建或测试。
Runner 具有硬编码逻辑(至少在 Web UI 中不可定制),并且在运行用户定义的脚本之前会发出以下命令:
cd $HOMEDIR/gitlab-ci-runner/tmp/builds && git clone git@$GITLABSERVER:root/test1.git project-1 && cd project-1 && git checkout $COMMIT cd $HOMEDIR/gitlab-ci-runner/tmp/builds/project-1 && git reset --hard && git checkout $COMMIT
然后用户定义的脚本
我想要什么:
- 自定义传递给 git 的选项
- 在发出上述命令之前运行一些用户定义的脚本(就我而言,我想启动运行器上的虚拟机,以便获得干净的测试环境)
问题是:有人遇到过类似的情况吗?有没有好的方法来解决缺少所需选项的问题?
现在我正在使用一种非常肮脏的黑客技术:用名为“git”的 bash 脚本替换 git 二进制文件,它会捕获传递给 git 的选项并在虚拟机内运行它,但在我看来这似乎不是一个好方法。
答案1
不确定这是否是您想要的,但您可以通过将 GIT_STRATEGY 设置为 none 来完全禁用从 git 提取代码:
variables:
GIT_STRATEGY: none
https://docs.gitlab.com/ce/ci/yaml/#git-strategy
要在作业执行之前运行命令,可以使用“before_script”指令
before_script is used to define the command that should be run before all jobs, including deploy jobs, but after the restoration of artifacts. This can be an array or a multi-line string.
https://docs.gitlab.com/ce/ci/yaml/#before_script-and-after_script