gpt4 book ai didi

linux - Shell执行器是如何运行脚本的?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:18:47 25 4
gpt4 key购买 nike

我们最近搬到了 Gitlab 并开始使用管道。我们已经设置了一个构建服务器(一个 Ubuntu 16.04 实例)并安装了一个使用 Shell 执行器的运行器,但我不确定它实际上是如何执行 .gitlab-ci.yml 中定义的脚本的> 文件。考虑以下代码片段:

script:
- sh authenticate.sh $DEPLOY_KEY
- cd MAIN && sh deploy.sh && cd ..
- sh deploy_service.sh MATCHMAKING
- sh deauthenticate.sh

我的印象是它将这些命令通过管道传递给 Bash,因此我期待默认的 Bash 行为。然而,发生的是 deploy.sh 由于 ssh 错误而失败; Bash 然后继续执行 deploy_service.sh(这是预期的行为)但是这失败并出现 can't open deploy_service.sh 错误并且作业终止而 Bash 没有执行最后一个声明。

据我了解,如果您先执行 set -e,Bash 只会在出现错误时中止,因此我期望所有语句都被执行。我尝试将 set -e 添加为第一条语句,但这没有任何区别 - 它不会在第一个 ssh 错误时终止。

我在下面添加了 Gitlab 的确切输出:

没有 set -e

$ cd MAIN && sh deploy.sh && cd ..
deploy.sh: 72: deploy.sh: Bad substitution
Building JS bundles locally...

> better-npm-run build

running better-npm-run in x
Executing script: build

to be executed: node ./bin/build
-> building js bundle...
-> minifying js bundle...
Uploading JS bundles to server temp folder...
COMMENCING RESTART. 5,4,3,2,1...
ssh: Could not resolve hostname $: Name or service not known
$ sh deploy_service.sh MATCHMAKING
sh: 0: Can't open deploy_service.sh
ERROR: Job failed: exit status 1

使用set -e

$ set -e
$ cd MAIN && sh deploy.sh && cd ..
deploy.sh: 72: deploy.sh: Bad substitution
Building JS bundles locally...

> better-npm-run build

running better-npm-run in x
Executing script: build

to be executed: node ./bin/build
-> building js bundle...
-> minifying js bundle...
Uploading JS bundles to server temp folder...
COMMENCING RESTART. 5,4,3,2,1...
ssh: Could not resolve hostname $: Name or service not known
$ sh deploy_service.sh MATCHMAKING
sh: 0: Can't open deploy_service.sh
ERROR: Job failed: exit status 1

为什么在没有 set -e 的情况下会因错误而终止(另外,为什么它仅在第二个错误而不是 ssh 错误时终止)?任何见解将不胜感激。

最佳答案

Gitlab脚本 block 实际上是一个shell脚本数组。 https://docs.gitlab.com/ee/ci/yaml/#script数组中每个元素的失败都会使整个数组失败。要解决此问题,请将您的脚本 block 放在某些 script.sh 文件中

喜欢

script:
- ./script.sh

关于linux - Shell执行器是如何运行脚本的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46828038/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com