1.在GitLab所在服务器生成新的SSH密匙对

ssh-keygen -t rsa -C "ssh-connect-test" -b 4096

2.保存公钥到目标服务器

ssh-copy-id -i  ~/.ssh/id_rsa.pub 用户名@目标服务器IP

该命令会自动将公钥追加到远程 ~/.ssh/authorized_keys 文件,并设置正确权限。

3.转到GitLab项目CI/CD变量

>1.新增一个变量 SSH_PRIVATE_KEY 保存刚才生成的私钥

由于GitLab变量值不能包含空格,需将私钥转为base64编码

cat ~/.ssh/id_rsa | base64 -w0

执行后复制对应值并设置

>2.新增一个变量 SSH_KNOWN_HOSTS 保存目标服务器公钥

同样转为base64编码保存

ssh-keyscan 目标服务器IP | base64 -w0

>3.还可新增其它变量 DEPLOY_USER、DEPLOY_HOST分别保存目标服务器用户名、IP

4.部署阶段

GitLab项目中增加文件.gitlab-ci.yml

stages:
  - deploy

deploy_production:
  stage: deploy
  only:
    - master
  before_script:
    - 'which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y )'
    - eval $(ssh-agent -s)
    - echo "$SSH_PRIVATE_KEY"
    - echo -n  "$SSH_PRIVATE_KEY" | base64 -d | ssh-add - > /dev/null
    - mkdir -p ~/.ssh
    - chmod 700 ~/.ssh
    - echo -n "$SSH_KNOWN_HOSTS" | base64 -d  > ~/.ssh/known_hosts
    - chmod 644 ~/.ssh/known_hosts
  script:
    - ssh $DEPLOY_USER@$DEPLOY_HOST "date"

每次master分支代码变更时,GItLab runner自动连接目标服务器并执行date

更多推荐