让 gitlab 作业不等待“脚本”部分的任何返回
Posted
技术标签:
【中文标题】让 gitlab 作业不等待“脚本”部分的任何返回【英文标题】:Make gitlab job not wait for any return from "script" section 【发布时间】:2021-07-13 17:37:35 【问题描述】:在 gitlab 管道 (gitlab-ci.yml) 中,我使用 SSHPASS 通过临时 IP 配置基于 linux 的设备以实现自动化。
script:
- sshpass -p $TARGET_password ssh -o StrictHostKeyChecking=no $TARGET_username@$TARGET_IP 'bash -s' < $configfile
我正在发送一个包含一堆命令的脚本,最后一个是配置永久 IP。 一旦脚本更改了 IP,作业就会挂起并不确定地等待任何返回,因为它丢失了与临时 IP 的会话。
问题:
是否可以发送更改 IP 的命令并立即断开连接而不等待任何返回。 是否有 gitlab-ci 指令不等待“脚本”部分的任何返回? 我知道有“on-success”和“on-failure”,但这些假设我们有一个 stdout 或 stderr retuen。【问题讨论】:
是否可以将$configfile
输入拆分为与更改 ip 无关的所有内容,然后拆分为更改 ip 的单个小脚本? ip是怎么改的?
【参考方案1】:
如果您知道脚本的大致执行时间(即 10 秒),您可以使用 timeout
实用程序,例如
timeout 10 <your command here>
关于超时的巧妙之处在于,如果达到超时,它会以错误代码 124 退出,因此如果您的脚本不使用此退出代码进行任何操作,您可以进行类似的操作
timeout 10 <your command here> || EXITCODE=$?; if [ $EXITCODE != 124 ]; then exit $EXITCODE; fi;
如果您的脚本以 0 或 124 以外的任何值退出,它将使您的管道失败
测试:
echo sleep 11 > good_night.txt
timeout 10 ssh some_host 'bash -s' < good_night.txt || EXITCODE=$?; echo $EXITCODE; if [ $EXITCODE != 124 ]; then exit $EXITCODE; fi;
124
检查 How to set ssh timeout? 以获取其他 ssh 超时选项
【讨论】:
出色的@Andrew!非常感谢,超时和 ssh 超时选项都很有用。以上是关于让 gitlab 作业不等待“脚本”部分的任何返回的主要内容,如果未能解决你的问题,请参考以下文章
如果前一个管道中正在运行相同的作业,如何等待 GitLab 作业?