事前准备

  1. 在 runner 所在的服务器上生成 ssh

    1. ssh-keygen -t rsa -b 2048 -C "<comment>"
  2. 在 gitlab repo 的 seetings -> CI/CD -> variables 下新建变量 SSH_PRIVATE_KEY,value 填写 ~/.ssh/id_xxx.pub的内容

image.png

  1. 关键步骤 将本地的私钥通过 ssh-copy-id命令注册到要部署的服务器上
    1. ssh-copy-id -i ~/.ssh/id_rsa.pub root@149.129.57.229

yml 配置

  1. workflow:
  2. rules:
  3. - if: '$CI_COMMIT_REF_NAME == "master"'
  4. stages:
  5. - build
  6. - deploy
  7. build_prod:
  8. stage: build
  9. cache:
  10. key: build_prod
  11. paths:
  12. - node_modules/
  13. script:
  14. - yarn install --registry=http://registry.npm.taobao.org/
  15. - yarn build
  16. - ls
  17. artifacts:
  18. expire_in: 60 mins
  19. paths:
  20. - dist
  21. deploy_prod:
  22. stage: deploy
  23. dependencies:
  24. - build_prod
  25. before_script:
  26. - 'command -v ssh-agent >/dev/null || ( apt-get update -y && apt-get install openssh-client -y )'
  27. - eval $(ssh-agent -s)
  28. - echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add -
  29. - mkdir -p ~/.ssh
  30. - chmod 700 ~/.ssh
  31. - '[[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config'
  32. script:
  33. - ssh -t root@149.129.57.229 "cd /home/nginx-server/1995 && rm -rf *"
  34. - scp -r dist/* root@149.129.57.229:/home/nginx-server/1995/