bash - 将容器从 GitLab 部署到 EC2 的正确方法
问题描述
我尝试将我的容器从 gitlab 注册表部署到 EC2 实例,我到达部署我的容器,但是当我更改某些内容并想再次部署时,需要删除旧容器和旧图像并再次部署,为此我创建此脚本以删除所有内容并再次部署。
...
deploy-job:
stage: deploy
only:
- master
script:
- mkdir -p ~/.ssh
- echo -e "$SSH_PRIVATE_KEY" > ~/.ssh/id_rsa
- chmod 600 ~/.ssh/id_rsa
- '[[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config'
- ssh -i ~/.ssh/id_rsa ec2-user@$DEPLOY_SERVER "docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN registry.gitlab.com &&
docker stop $(docker ps -a -q) &&
docker rm $(docker ps -a -q) &&
docker pull registry.gitlab.com/doesntmatter/demo:latest &&
docker image tag registry.gitlab.com/doesntmatter/demo:latest doesntmatter/demo &&
docker run -d -p 80:8080 doesntmatter/demo"
当我尝试这个脚本时,我得到了这个错误:
"docker stop" requires at least 1 argument. <<-------------------- error
See 'docker stop --help'.
Usage: docker stop [OPTIONS] CONTAINER [CONTAINER...]
Stop one or more running containers
Running after script
00:01
Uploading artifacts for failed job
00:01
ERROR: Job failed: exit code 1
如果你仔细观察,我$(docker ps -a -q)
会在 docker stop 之后使用。
问题:
- 我知道这不是进行部署的好方法(这里是开发人员),您能否建议其他方法,只需使用 gitlab 和 ec2。
- 当我的机器中有或没有容器时,有什么方法可以避免这个错误?
解决方案
推荐阅读
- asp.net - 如何将时间条目合并到单行中以用于每周报告?
- python - 保存时如何忽略我的表单集的未更改表单?
- python - 将许多变量传递给 Jinja render_template() 时的风格好吗?
- r - Reshape2:dcast() 返回 - 'sum' 对因子没有意义
- elasticsearch - Elasticsearch - 将视频目录信息建模为一个索引与多个索引
- javascript - FontAwesome 图标未显示按钮
- java - 最终提交请求后,我在成功页面中得到空响应
- python - Kubernetes Python 客户端 - 一次查找待处理作业并安排所有 pod 或如何安排待处理作业
- mercurial - Windows 10 上的 Tortoisehg 工作台无法打开
- c++ - C++/WinRT,Windows SDK 17134 的一部分与 Visual Studio 15.8 Preview 3 不兼容