我有一个项目托管在 gitlab.com 上作为私有存储库。当代码推送到 master 分支时,我想使用 gitlab ci/cd 自动将我的项目部署到远程服务器 QA_SERVER。以下是迄今为止的 .gitlab-ci.yml 内容:
image: ubuntu:latest
stages:
- deploy
deploy_QA:
stage: deploy
environment:
name: Staging
url: "$QA_URL"
before_script:
- 'which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y )'
- mkdir -p ~/.ssh
- eval $(ssh-agent -s)
- '[[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config'
script:
- ssh-add <(echo "$PRIVATE_KEY")
- ssh -o StrictHostKeyChecking=no user@"$QA_SERVER" 'rm -rf /var/www/html/*'
- scp -P22 -r . ubuntu@"$QA_SERVER":/var/www/html
我需要生成私钥并将其作为变量 PRIVATE_KEY 存储在 gitlab 项目中。如何生成此密钥?我需要运行 ssh-keygen 吗?在哪里运行它?
请注意给出的指令
我不清楚。
答案1
您提供的链接提供了所有信息。分步说明:
- 在您的本地机器上运行
ssh-keygen
。- 你必须这样做不是用密码保护您的密钥 - 否则它不能在非交互式脚本中使用。
- 对密钥使用非默认文件路径可能是明智之举。我们假设其为
~/.ssh/ubuntu_rsa
。具体名称无关紧要。
- 密钥生成后,您将在指定位置拥有 2 个文件:ubuntu_rsa和ubuntu_rsa.pub. 出于安全原因,请确保ubuntu_rsa只有您可以访问(例如
chmod 600 ~/.ssh/ubuntu_rsa
) - 您需要访问 CI 作业将使用的 QA_SERVER 上的帐户,并且必须可以通过 ssh 访问 - 从脚本中我假设它的Ubuntu
- 使用
ssh-copy-id
将公钥添加到 QA_SERVER 以Ubuntu:ssh-copy-id -i ~/.ssh/ubuntu_rsa.pub ubuntu@QA_SERVER
. 系统将提示您输入Ubuntu户口密码。 - 在你的项目中添加 gitlab 变量 -查看文档。假设它名为 SSH_PRIVATE_KEY,并将其值设置为
~/.ssh/id_rsa
来自本地机器的值。 - 你的 gitlab-ci.yml 中的脚本必须包含类似以下内容:
SRC_DIR=. # replace with whatever is needed here
echo $SSH_PRIVATE_KEY | ssh-add
scp -r $SRC_DIR ubuntu@QA_SERVER:/var/www/html