Bash 使gitlab作业不必等待任何来自;脚本“;部分

Bash 使gitlab作业不必等待任何来自;脚本“;部分,bash,gitlab,gitlab-ci,Bash,Gitlab,Gitlab Ci,在gitlab管道(gitlab ci.yml)中,我使用SSHPASS通过临时IP来配置基于linux的设备,以实现自动化 script: - sshpass -p $TARGET_password ssh -o StrictHostKeyChecking=no $TARGET_username@$TARGET_IP 'bash -s' < $configfile 脚本: -sshpass-p$TARGET\u password ssh-o strichostkeychecking

在gitlab管道(gitlab ci.yml)中,我使用SSHPASS通过临时IP来配置基于linux的设备,以实现自动化

script:
  - sshpass -p $TARGET_password ssh -o StrictHostKeyChecking=no $TARGET_username@$TARGET_IP 'bash -s' < $configfile
脚本:
-sshpass-p$TARGET\u password ssh-o strichostkeychecking=no$TARGET\u username@$TARGET\u IP'bash-s'<$configfile
我正在发送一个包含大量命令的脚本,最后一个命令是配置永久IP。 一旦脚本更改了IP,作业就会挂起并无限等待任何返回,因为它丢失了与临时IP的会话

问题:

  • 是否可以发送更改IP的命令并立即断开连接,而不等待任何返回
  • 是否有gitlab ci指令不等待“脚本”部分的任何返回?
    我知道有“成功论”和“失败论”,但这些都是假设我们有一个标准或标准的复述

如果您知道脚本的大致执行时间(即10秒),您可以使用
timeout
实用程序,例如

timeout 10 <your command here>
timeout 10 <your command here> || { EXITCODE=$?; if [ $EXITCODE != 124 ]; then exit $EXITCODE; fi; }
超时10
timeout最妙的一点是,如果达到了timeout,它将退出,错误代码为124,因此如果您的脚本没有将此退出代码用于任何事情,您可以

timeout 10 <your command here>
timeout 10 <your command here> || { EXITCODE=$?; if [ $EXITCODE != 124 ]; then exit $EXITCODE; fi; }
timeout 10 | |{EXITCODE=$?;如果[$EXITCODE!=124];则退出$EXITCODE;fi;}
如果脚本以0或124以外的任何内容退出,则管道将失败

通过以下方式进行测试:

echo sleep 11>晚安.txt
超时10 ssh某些主机“bash-s”

检查其他ssh超时选项

是否可以将
$configfile
输入拆分为所有与更改ip无关的内容,然后再拆分为一个更改ip的小脚本?ip是如何改变的?太棒了@Andrew!非常感谢,timeout和ssh timeout选项都非常有用。