我想知道一个理论问题,我有几个 gitlab 运行程序作为主机上的 Docker 容器,端点设备通过以太网电缆连接到主机上。
我希望仅当 Gitlab 调用特定的 Gitlab-runner 时才打开端点设备(端点设备是单独控制的),并在作业完成且给定的 gitlab-runner 暂时失业时立即关闭。
我还不知道如何解决这个问题,有什么建议吗?
Gitlab 服务器 - 16.0.3-CE Gitlab-runner - 16.0.1
感谢所有的想法
您可以通过几种方法来实现这一点。
运行器配置有两个关键配置参数:
pre_build_script
和post_build_script
,可用于在作业运行之前和之后运行脚本。您可以配置 pre_build_script
以打开设备,并配置 post_build_script
以关闭设备。
这些可以在跑步者中设置
config.toml
:
[[runners]]
# ...
pre_build_script = /usr/local/bin/turn-on-device
post_build_script = /usr/local/bin/turn-off-device
警告:这假设您的运行程序配置为一次仅允许一项作业(
concurrent
设置设置为1
)。否则,如果您计划让并发作业同时访问设备,则需要 pre_build
和 post_build
脚本来确定设备是否已打开或正在被其他作业使用,以确保您的 post_build
当另一个作业正在使用该设备时,脚本不会关闭设备。
与上面类似,自定义执行器可以定义一个
prepare_exec
程序来运行以准备作业环境,以及一个cleanup_exec
程序来在作业完成后清理作业环境,您可以将其配置为执行用于转变您的作业环境的脚本。设备打开和关闭。
如果您已经出于其他原因使用自定义执行器,这可能是一种有用的方法。
[[runners]]
name = "custom"
executor = "custom"
# ...
[runners.custom]
# ...
prepare_exec = "/usr/local/bin/turn-on-device"
# ...
cleanup_exec = "/usr/local/bin/turn-off-device"
# ...
另一种方法是实现与上述方法类似的方法,但使用
before_script:
和 after_script:
步骤来打开和关闭设备作为工作本身的一部分。
before_script:
- ./turn-device-on.sh # or whatever
after_script:
- ./turn-device-off.sh # or whatever
此方法非常适合您无法控制运行器配置的情况。
警告:在某些情况下,
after_script:
可能无法运行,例如运行系统出现故障,或者作业被取消