基本上我到目前为止的工作如下:
GitLab 共享运行者 CI/CD
"*/client:latest",将其暴露到端口 80
😊
第 6 步是唯一似乎运行成功的步骤,但是当我访问我的域时,没有任何东西在运行🤕,尽管 CI 工作已成功完成!
但是,当我尝试使用 PuTTY 手动执行相同的操作,从注册表中提取图像并在端口 80 上运行时,当我检查我的域时一切正常!
如果有人能看到我可能做错了什么,我将不胜感激,谢谢。
这是我的 GitLab YAML 配置文件;
image: docker:latest
services:
- docker:dind
stages:
- deploy
deploy:
stage: deploy
before_script:
- eval $(ssh-agent -s)
- echo "$SERVER_SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add -
- mkdir -p ~/.ssh
- chmod 700 ~/.ssh
- ssh-keyscan -H $SERVER_IP >> ~/.ssh/known_hosts
- chmod 644 ~/.ssh/known_hosts
script:
- docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN $CI_REGISTRY
- docker-compose --file docker-compose.prod.yml build --force-rm --no-cache
- docker push registry.gitlab.com/[MY_GITLAB_ACCOUNT]/app/client:latest
- ssh -o StrictHostKeyChecking=no $SERVER_USER@$SERVER_HOST
- docker pull registry.gitlab.com/[MY_GITLAB_ACCOUNT]/app/client:latest
- docker images --all
- docker run -p 80:8080 --detach registry.gitlab.com/[MY_GITLAB_ACCOUNT]/app/client:latest
- docker ps --all
谢谢
最佳答案
在您的 GitLab CI 作业中,您的 SSH 命令正在执行,然后在进入下一个 shell 步骤之前立即关闭远程 shell。所以,你只是在运行 docker run
在您的 GitLab 工作中,而不是在您的服务器上。
要在远程服务器上运行命令,您需要使用 ssh
内联要运行的命令。命令。
script:
# ...
- ssh -o StrictHostKeyChecking=no $SERVER_USER@$SERVER_HOST "docker run --pull -p 80:8080 -d registry.gitlab.com/[MY_GITLAB_ACCOUNT]/app/client:latest"
请记住,您的远程服务器还需要配置身份验证才能从您的注册表中提取。
关于ubuntu - 如何使用共享运行器运行从 GitLab 容器注册表中提取的 Docker 容器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72241034/