使用python image和if条件编写了下面的gitlab管道。
.chk-bracket:
image: "python:3.7"
before_script:
- apt update
- apt install jq -y
- pip install awscli
script:
- echo $CI_COMMIT_MESSAGE
- |
if [[ $CI_COMMIT_MESSAGE = *"_test"* ]]; then
echo "testing"
fi
rules:
- if: $CI_COMMIT_BRANCH =~ /^develop/ && $CI_COMMIT_MESSAGE =~ /.*build_test.*/
后来我们用docker image代替python image进行了重构,if条件开始失败,它没有打印测试,当然我在原来复杂的gitlab管道代码中简化了if条件
.chk-bracket:
image: "docker:stable"
before_script:
- apk update
- apk add py-pip jq bash
- pip install awscli
script:
- echo $CI_COMMIT_MESSAGE
- |
if [[ $CI_COMMIT_MESSAGE = *"_test"* ]]; then
echo "testing"
fi
rules:
- if: $CI_COMMIT_BRANCH =~ /^develop/ && $CI_COMMIT_MESSAGE =~ /.*build_test.*/
有什么线索说明为什么这种情况在docker图像中不起作用吗?
2条答案
按热度按时间czfnxgou1#
这是因为python:3.7使用debian作为它的基础映像,而docker:stable使用alpine作为它的基础映像,Alpine使用ash作为默认shell而不是bash。
xe55xuns2#
正如@antoniomerlin所描绘的,dind的图像是阿尔卑斯山。
There is a ubuntu-dind version,也许还有更多...
在alpine中安装aws cli(v2)是一个真实的的痛苦,there is already a detailed answer how to do that