所以我有一个 ec2 实例,并将其连接到一个域名,我想为我的 Django 项目构建一个 CI/CD 管道,因此 Github 工作流程 ssh 进入我的实例,并在我的实例发生更改时提取代码
main
Github 存储库中的分支,我遵循了 thenewboston tutorial,每当到达工作流程中的 Run deploy
步骤时,我都会收到一条错误消息,这是运行部署步骤中的调试错误:
##[debug]Evaluating condition for step: 'Run deploy'
##[debug]Evaluating: success()
##[debug]Evaluating success:
##[debug]=> true
##[debug]Result: true
##[debug]Starting: Run deploy
##[debug]Loading inputs
##[debug]Loading env
Run ssh target "cd my_repo/ && docker-compose down && git pull && docker-compose build && docker-compose up -d --force-recreate"
##[debug]/usr/bin/bash -e /home/runner/work/_temp/a5810d79-db8d-4e78-9f23-433261499e8f.sh
Removing network myreponame_default
Network myreponame_default not found.
***@github.com: Permission denied (publickey).
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
Error: Process completed with exit code 1.
##[debug]Finishing: Run deploy
设置是这样的:
存储库是私有的
我使用命令
ssh-keygen -t rsa -b 4096 -f Desktop/Deployment/Github
在本地计算机中创建了一个 ssh rsa 密钥
使用命令
type Desktop\Deployment\Github
打印出私钥,并将其复制到我的存储库设置中的存储库秘密,名称为 SSH_PRIVATE_KEY
打印出公钥
Github.pub
并将其复制到我的ec2实例中~/.ssh/authorized_keys
创建了另外 2 个存储库机密
SSH_HOST
和 SSH_USER
,我将域名放入 SSH_HOST
并将用户放入 SSH_USER
因此,当工作流程连接时,它会执行以下操作: SSH_USER@SSH_HOST
工作流程文件(main.yml):
name: Continuous Integration
on:
push:
branches:
- main
concurrency:
group: main
cancel-in-progress: true
jobs:
quality-assurance:
name: Quality Assurance
uses: ./.github/workflows/pr.yml
deploy:
name: Deploy
needs: quality-assurance
runs-on: ubuntu-latest
steps:
- name: Configure SSH
env:
SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }}
SSH_HOST: ${{ secrets.SSH_HOST }}
SSH_USER: ${{ secrets.SSH_USER }}
run: |
mkdir -p ~/.ssh/
echo "$SSH_PRIVATE_KEY" > ~/.ssh/github
chmod 600 ~/.ssh/github
cat >>~/.ssh/config <<END
Host target
HostName $SSH_HOST
User $SSH_USER
IdentityFile ~/.ssh/github
LogLevel ERROR
StrictHostKeyChecking no
END
- name: Run deploy
run: |
ssh target "cd my_repo/ && docker-compose down && git pull && docker-compose build && docker-compose up -d --force-recreate"
这是git配置文件:
core.repositoryformatversion=0
core.filemode=true
core.bare=false
core.logallrefupdates=true
remote.origin.url=ssh://github.com/myname/myrepo.git
remote.origin.fetch=+refs/heads/*:refs/remotes/origin/*
branch.main.remote=origin
branch.main.merge=refs/heads/main
我不知道为什么在尝试连接时会出现错误,我尝试更改 Git 配置,将
ssh://
更改为 [email protected]:user/repo
但出现相同的错误,将 SSH_HOST
更改为 IP,但这不起作用或者,我总是使用此命令通过 ssh 手动连接到实例ssh -i key.pem [email protected]
,我怀疑错误位于 main.yml 文件内,并且可能位于 Git 配置内(我猜?)
最后,我为我糟糕的英语表示歉意,如果问题结构错误,我也很抱歉,因为这是我在 Stackoverflow 上遇到的第一个问题
这对我有用:
- name: Deploy to AWS
shell: bash
env:
PRIVATE_KEY : ${{ secrets.PRIVATE_KEY }}
run: |
mkdir -p ~/.ssh
touch ~/.ssh/private.key
chmod 600 ~/.ssh/private.key
echo -e "$PRIVATE_KEY" | tr -d '\r' > ~/.ssh/private.key
cd devops/ansible/
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/private.key
ansible-playbook playbook.yml -i hosts/dev --tags backend --private-key ~/.ssh/private.key