当我的 sh 脚本在内部失败时,我如何失败 docker 运行
How do i fail docker run when my sh script fails inside
我有一个文件可以安装我们需要的一些工具。安装工具后,我的 sh 脚本正在验证安装,如果未找到任何工具,则它应该会失败。我在我的 gitlab-ci 文件中使用这种方法。
sh 脚本工作正常并退出,但是当我在 docker 运行 中使用它时,docker 不会因错误退出。
test.sh:
echo "Validating Docker Installation"
which docker
if [ $? -eq 0 ]
then
docker --version | grep "Docker Version"
if [ $? -eq 0 ]
then
echo "Docker installed successfully"
else
echo $?
exit 1
fi
else
echo "Docker didnt installed"
exit 1
fi
gitlab-ci.yml(测试作业)
test_job:
stage: test
script:
- docker pull $DOCKER_REGISTRY/$DOCKER_REPO:$BUILD_VERSION
- docker run --rm $DOCKER_REGISTRY/$DOCKER_REPO:$BUILD_VERSION sh ./test.sh
GitLab 的作业将在作业以非 0 状态代码从上一个命令退出时失败。所以真的,你在这里问的问题是“我如何让 docker run
return 成为容器内脚本 运行 的状态代码?”答案是你不能 - 一旦容器完成 运行ning,你必须查询脚本的状态代码,然后使用“退出”来引发相同的状态代码。如果你 运行 exit 0
,作业就会成功。如果你 运行 exit 1
,它将失败。将其与您的示例放在一起,您将获得以下示例,使用 docker inspect
命令提取 运行 容器的退出代码,我现在将其命名为 test
以便我们可以在下一个命令中轻松提取退出代码。
现在,如果您的容器 return 是一个非 0 的退出代码,下一个命令基本上会回显该退出代码,从而导致您的作业根据 运行 的状态通过或失败容器。
test_job:
stage: test
script:
- docker pull $DOCKER_REGISTRY/$DOCKER_REPO:$BUILD_VERSION
- docker run --name test --rm $DOCKER_REGISTRY/$DOCKER_REPO:$BUILD_VERSION sh ./test.sh
- exit $(docker inspect test --format='{{.State.ExitCode}}')
我有一个文件可以安装我们需要的一些工具。安装工具后,我的 sh 脚本正在验证安装,如果未找到任何工具,则它应该会失败。我在我的 gitlab-ci 文件中使用这种方法。
sh 脚本工作正常并退出,但是当我在 docker 运行 中使用它时,docker 不会因错误退出。
test.sh:
echo "Validating Docker Installation"
which docker
if [ $? -eq 0 ]
then
docker --version | grep "Docker Version"
if [ $? -eq 0 ]
then
echo "Docker installed successfully"
else
echo $?
exit 1
fi
else
echo "Docker didnt installed"
exit 1
fi
gitlab-ci.yml(测试作业)
test_job:
stage: test
script:
- docker pull $DOCKER_REGISTRY/$DOCKER_REPO:$BUILD_VERSION
- docker run --rm $DOCKER_REGISTRY/$DOCKER_REPO:$BUILD_VERSION sh ./test.sh
GitLab 的作业将在作业以非 0 状态代码从上一个命令退出时失败。所以真的,你在这里问的问题是“我如何让 docker run
return 成为容器内脚本 运行 的状态代码?”答案是你不能 - 一旦容器完成 运行ning,你必须查询脚本的状态代码,然后使用“退出”来引发相同的状态代码。如果你 运行 exit 0
,作业就会成功。如果你 运行 exit 1
,它将失败。将其与您的示例放在一起,您将获得以下示例,使用 docker inspect
命令提取 运行 容器的退出代码,我现在将其命名为 test
以便我们可以在下一个命令中轻松提取退出代码。
现在,如果您的容器 return 是一个非 0 的退出代码,下一个命令基本上会回显该退出代码,从而导致您的作业根据 运行 的状态通过或失败容器。
test_job:
stage: test
script:
- docker pull $DOCKER_REGISTRY/$DOCKER_REPO:$BUILD_VERSION
- docker run --name test --rm $DOCKER_REGISTRY/$DOCKER_REPO:$BUILD_VERSION sh ./test.sh
- exit $(docker inspect test --format='{{.State.ExitCode}}')