当我们想用 github 动作执行 ansible 命令时如何管理 ssh 密钥文件

Vij*_*jin 2 amazon-ec2 ansible docker github-actions

我有一个 github 存储库、一个 docker 存储库和一个 Amazon ec2 实例。我正在尝试使用这些工具创建 CI/CD 管道。这个想法是在 github 存储库主分支发生推送时将 docker 容器部署到 ec2 实例。我已经使用 github 操作来构建代码、构建 docker 镜像并将 docker 镜像推送到 docker hub。现在我想将最新的镜像从 docker hub 拉到远程 ec2 实例并运行它。为此,我试图从 github 操作执行 ansible 命令。但我需要将 .pem 文件指定为 ansible 命令的参数。我试图将 .pem 文件保存在 github secretes 中,但没有用。我真的很困惑如何进行这个。这是我的 github 工作流文件

name: helloworld_cicd
on: 
  push:
    branches: 
      - master
jobs:

  build:
    name: Build
    runs-on: ubuntu-latest
    steps:

    - name: Check out code into the Go module directory
      uses: actions/checkout@v1

    - name: Go Build
      run: go build

    - name: Docker build
      run: docker build -t helloworld .

    - name: Docker login
      run: docker login --username=${{ secrets.docker_username }} --password=${{ secrets.docker_password }}

    - name: Docker tag
      run: docker tag helloworld vijinvv/helloworld:latest

    - name: Docker push
      run: docker push vijinvv/helloworld:latest
Run Code Online (Sandbox Code Playgroud)

我试图运行类似的东西

ansible all -i '3.15.152.219,' --private-key ${{ secrets.ssh_key }} -m rest of the command
Run Code Online (Sandbox Code Playgroud)

但这没有用。解决此问题的最佳方法是什么

sma*_*c89 5

我猜你所说的“它不起作用”是指ansible期望私钥是一个文件,而你提供的是一个字符串。

github 操作上的此页面显示了如何在 github 操作上使用机密文件。您的情况相当于执行以下步骤:

  1. gpg --symmetric --cipher-algo AES256 my_private_key.pem

  2. 选择一个强密码并将此密码保存为 github secrets 中的秘密。称它为LARGE_SECRET_PASSPHRASE

  3. my_private_key.pem.gpg在 git 中提交你的加密

  4. 在您的操作中创建一个解密此文件的步骤。它可能看起来像:

    - name: Decrypt Pem
      run: gpg --quiet --batch --yes --decrypt --passphrase="$LARGE_SECRET_PASSPHRASE" --output $HOME/secrets/my_private_key.pem my_private_key.pem.gpg
      env:
       LARGE_SECRET_PASSPHRASE: ${{ secrets.LARGE_SECRET_PASSPHRASE }}
    
    Run Code Online (Sandbox Code Playgroud)
  5. 最后你可以运行你的ansible命令ansible all -i '3.15.152.219,' --private-key $HOME/secrets/my_private_key.pem