我有一个包含 3 个步骤的 GitLab CI 管道:
buildreleasedeploy在我的deploy脚步中,我;通过 SSH 进入我的 DO 框,登录 GitLab 注册表,下载最新的 docker 镜像并运行它。我还尝试使用以下方法删除现有的容器/图像:
docker rm -f $(docker ps -aq)
docker rmi $(docker images -q)
Run Code Online (Sandbox Code Playgroud)
.gitlab.yml
cache:
key: "${CI_COMMIT_REF_NAME} node:latest"
paths:
- node_modules/
stages:
- build
- release
- deploy
build:
...
release:
...
deploy:
stage: deploy
image: gitlab/dind:latest
only:
- master
environment: production
when: manual
before_script:
- mkdir -p ~/.ssh
- echo "${DEPLOY_SERVER_PRIVATE_KEY}" | tr -d '\r' > ~/.ssh/id_rsa
- chmod 600 ~/.ssh/id_rsa
- eval "$(ssh-agent -s)"
- ssh-add ~/.ssh/id_rsa
- ssh-keyscan -H ${DEPLOYMENT_SERVER_IP} >> ~/.ssh/known_hosts
script:
- ssh root@${DEPLOYMENT_SERVER_IP}
"echo 'CONTAINERS';
docker ps -aq;
echo 'IMAGES';
docker images -q;
docker rm -f $(docker ps -aq);
docker rmi $(docker images -q);
docker login -u ${CI_REGISTRY_USER} -p ${CI_REGISTRY_PASSWORD} ${CI_REGISTRY};
docker pull ${CI_REGISTRY}/${CI_PROJECT_PATH}:latest;
docker run -d ${CI_REGISTRY}/${CI_PROJECT_PATH}:latest;"
Run Code Online (Sandbox Code Playgroud)
在尝试删除容器/映像 ID 之前,我会注销它们的结果。该构建步骤的
(部分)输出是:
您可以看到该docker ps -aq命令注销了1 个现有容器 ID,并docker images -q注销了4 个现有映像 ID。为什么我会收到以下错误:
“docker rm”需要至少 1 个参数
...和...
“docker rmi”需要至少 1 个参数
当我可以看到存在现有容器/图像时?
看起来像是 subshell 的问题,但xargs如果 gitlib 中的 subshell 存在问题,您可以尝试一下。
echo 'IMAGES';
docker images -q;
docker ps -aq | xargs docker rm -f;
docker images -q | xargs docker rmi;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9241 次 |
| 最近记录: |