Ove*_*ivr 3 docker gitlab-ci gitlab-ci-runner google-cloud-sdk
docker: command not found在 gitlab-ci 中运行以下 CI 脚本时出现错误。此错误发生在before_script部署阶段。
services:
- docker:dind
stages:
- build
- test
- deploy
before_script:
- docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
build:
stage: build
image: docker:latest
script:
- docker info
- docker version
- docker build --pull -t $SERVICE_NAME:$CI_COMMIT_REF_NAME .
- docker image list
- docker tag $SERVICE_NAME:$CI_COMMIT_REF_NAME $CI_REGISTRY_IMAGE/$SERVICE_NAME:$CI_COMMIT_REF_NAME
- docker push $CI_REGISTRY_IMAGE/$SERVICE_NAME:$CI_COMMIT_REF_NAME
test:
image: docker:latest
stage: test
script:
- docker pull $CI_REGISTRY_IMAGE/$SERVICE_NAME:$CI_COMMIT_REF_NAME
- docker image list
- docker run $CI_REGISTRY_IMAGE/$SERVICE_NAME:$CI_COMMIT_REF_NAME npm test
deploy:
image: google/cloud-sdk
stage: deploy
environment: Production
script:
- echo $DEPLOY_KEY_FILE_PRODUCTION > /tmp/GCLOUD_KEYFILE.json
- gcloud auth activate-service-account --key-file /tmp/GCLOUD_KEYFILE.json
- rm /tmp/GCLOUD_KEYFILE.json
- gcloud info
- gcloud components list
only:
- master
Run Code Online (Sandbox Code Playgroud)
我有点困惑,因为我将 docker-in-docker ( docker:dind) 作为服务运行,所以 docker 命令应该可用于所有阶段(如果我理解正确的话),但显然不是。
是因为与 google/cloud-sdk 的交互吗?
小智 5
你可能误解了什么services意思。从文档中,
services 关键字仅定义在您的作业期间运行的另一个 docker 映像,并链接到 image 关键字定义的 docker 映像。
您需要的是一个使用 dind 映像并预装 gcloud sdk 的自定义 docker 执行程序。你可以用这个构建这样的图像Dockerfile:
FROM docker:latest
RUN apk add --no-cache \
bash \
build-base \
curl \
git \
libffi-dev \
openssh \
openssl-dev \
python \
py-pip \
python-dev
RUN pip install docker-compose fabric
RUN curl https://sdk.cloud.google.com | bash -s -- --disable-prompts
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4186 次 |
| 最近记录: |