我正在尝试通过以下步骤在Docker容器中运行已安装的shell脚本:
有人可以解释该怎么做吗?
查看行: #- ?? HERE I SHOULD RUN THE TEST: /test/check.sh ??
services:
- docker:dind
stages:
- build
- test
before_script:
- docker info
# Build the docker image
build:
image: docker:latest
services:
- docker:dind
before_script:
- docker login docker.example.com -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD
only:
- master
script:
- docker build -t our-docker .
- docker save our-docker > our-docker.tar
artifacts:
paths:
- our-docker.tar
expire_in: 1 week
stage: build
test:
image: docker:latest
only:
- master
script:
- docker load < our-docker.tar
- docker run --volume source="$(pwd)/test",target="/test" our-docker
#- ?? HERE I SHOULD RUN THE TEST: /test/check.sh ??
stage: test
答案 0 :(得分:0)
首先,docker run
命令本身存在问题:
docker run --volume source="$(pwd)/test",target="/test" our-docker # buggy
设置bind-mount的语法是:
docker run -v "$PWD/test":"/test" our-docker
-v
是--volume
的缩写)docker run --mount type=bind,source="$PWD/test",target="/test" our-docker
(注意:我在"$(pwd)"
上方替换了特殊的shell变量"$PWD"
,这样可以避免旋转另一个进程。)
接下来,您不能仅在/test/check.sh
行之后追加docker run
行,因为您确实需要在docker run
上下文中运行该命令。为此,您可能要使用我在另一个SO线程中建议的模式:How do I set docker-credential-ecr-login in my PATH before anything else in GitLab CI(在该模式的上下文中包含有关set -e
的更多详细信息/说明,引号和外壳转义)。
更准确地说,您可以尝试对.gitlab-ci.yml
进行以下修改吗? (我添加了一些ls
命令,这些命令应该有助于调试您的配置):
services:
- docker:dind
stages:
- build
- test
before_script:
- docker info
# Build the docker image
build:
image: docker:latest
services:
- docker:dind
before_script:
- docker login docker.example.com -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD"
only:
- master
script:
- docker build -t our-docker .
- docker save our-docker > our-docker.tar
artifacts:
paths:
- our-docker.tar
expire_in: 1 week
stage: build
test:
image: docker:latest
# note: use /bin/sh below as this image doesn't provide /bin/bash
only:
- master
script:
- docker load < our-docker.tar
- echo "$PWD"
- ls
- ls -Rhal test
- |
docker run --rm -v "$PWD/test":"/test" our-docker /bin/sh -c "
set -ex
ls -Rhal /test
/test/check.sh
"
stage: test