CI/CD Github 操作工作流程无法 ssh 到我的 aws ec2 实例

问题描述 投票:0回答:1

CI/CD Github 操作工作流程无法 ssh/连接到我的 aws ec2 实例

所以我有一个 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 上遇到的第一个问题

git ssh continuous-integration github-actions cicd
1个回答
0
投票

这对我有用:

  • 首先,确保您的 EC2 实例有一个允许 22 个连接的安全组
  • 在本地运行它以确保 ansible 可以在您的机器上运行
  • 然后,这就是我如何在 EC2 实例上使用 ansible playbook 来运行部署:
  • 将pair_key.pem(AWS提供并让您访问实例)作为秘密添加到github操作中,将其命名为PRIVATE_KEY。
      - 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

© www.soinside.com 2019 - 2024. All rights reserved.