首页 > 解决方案 > ssh 部署机器和运行 python 文件即使存在也找不到错误

问题描述

我已经更改了用户的密码(让我们称他为 staging_user)gitlab-runner 将用于登录到另一台运行临时服务器的机器,

并且在.gitlab-ci.yml

staging_deploy:
  stage: deploy
  variables:
    SSH_EXEC: "ssh staging_user@staging_server"
    DEPLOY_PATH: "/home/staging_user/project_site"
  only:
    - staging
  script:
    - ${SSH_EXEC} "if [ -d ${DEPLOY_PATH} ]; then \rm -r ${DEPLOY_PATH}/*; else mkdir -p ${DEPLOY_PATH}; fi"
    - echo -e ${GITSSHKEY} > conf/.ssh/id_rsa
    - scp -r * staging-user@staging_server://home/staging_user/project_site/
    - ${SSH_EXEC} "cd ${DEPLOY_PATH}/; docker-compose build --no-cache --force-rm; docker-compose up -d"
    - ${SSH_EXEC} "docker exec website_staging python /var/www/website.com/src/manage.py collectstatic --no-input"

gitlab-runner 在 git01 机器上运行,从那里 gitlab-runner ssh 到 staging_server 用户是 staging_user (参见上面的 SSH_EXEC 值)

我注意到GITSSHKEY存储在 gitlab 项目下的 is 变量:gitlab.com/test_group/project_site/settings/ci_cd. 所以我认为需要更新这个 SSH 密钥,但我有点困惑,不知道在哪里运行 ssh-keygen 以生成新密钥并粘贴到这里,无论我是否在 gitlab-runner 正在 ssh 的 git01 上运行 ssh-keygen或在staging_server机器上。

我收到此错误

Service 'web' failed to build: error pulling image configuration: Get https://dseasb33srnrn.cloudfront.net/registry-v2/docker/registry/v2/blobs/sha256/0a/0a2bad7da9b55f3121f0829de061f002ef059717fc2ed23c135443081200000e/data?Expires=1526503430&Signature=LZNRPPcqYzFoeE94jHgdxyN7gONaewh3ZF2688IVPhrOFKt-DB20gcSZIytqiDff8Hk7CS60SFKoROkU4VWMroByNqAcrFeMJGEAG-GKSSLXKPqQUsxYeXyW5rRGGbC8CqARQKsj1GBR-fTvRstcrnfhQVrn9gv~IFtqRXNB-LM_&Key-Pair-Id=APKAJECH5M7VWIS5YZ6Q: net/http: TLS handshake timeout
website_web_1 is up-to-date
$ ${SSH_EXEC} "ls -lh /var/www/website.com/src/manage.py"
-rw-rw-r-- 1 staging_user staging_user 280 May 15 16:26 /var/www/website.com/src/manage.py
$ ${SSH_EXEC} "docker exec website_web_1 python /var/www/website.com/src/manage.py collectstatic --no-input"
python: can't open file '/var/www/website.com/src/manage.py': [Errno 2] No such file or directory

标签: dockergitlabssh-keysgitlab-ci-runner

解决方案


关于第一个问题的注意事项:更改密码不应影响 ssh 密钥,因为它依赖于远程服务器上的公钥~staging_user/.ssh/authorized_keys

需要在源机器(将启动 ssh 到远程机器的机器)上生成一个新的 ssh 密钥,并且您需要首先将公钥部署到远程~staging_user/.ssh/authorized_keys文件。

经过讨论,OP Ciasto piekarz评论中指出

我发现如果容器已经在运行,那么我们会收到这个错误,但是如果我们停止正在运行的容器并更新 gitlab-runner 的分支以运行管道,那么部署就会成功


推荐阅读