Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Docker 当我们想要使用github操作执行ansible命令时,如何管理ssh密钥文件_Docker_Amazon Ec2_Ansible_Github Actions - Fatal编程技术网

Docker 当我们想要使用github操作执行ansible命令时,如何管理ssh密钥文件

Docker 当我们想要使用github操作执行ansible命令时,如何管理ssh密钥文件,docker,amazon-ec2,ansible,github-actions,Docker,Amazon Ec2,Ansible,Github Actions,我有一个github存储库、一个docker存储库和一个AmazonEC2实例。我正在尝试使用这些工具创建CI/CD管道。想法是在github存储库主分支发生推送时,将docker容器部署到ec2实例。我已经使用github操作来构建代码、构建docker映像并将docker映像推送到docker hub。现在,我想将最新的映像从docker hub拉到远程ec2实例,并运行相同的映像。为此,我尝试从github操作执行ansible命令。但是我需要指定.pem文件作为ansible命令的参数。

我有一个github存储库、一个docker存储库和一个AmazonEC2实例。我正在尝试使用这些工具创建CI/CD管道。想法是在github存储库主分支发生推送时,将docker容器部署到ec2实例。我已经使用github操作来构建代码、构建docker映像并将docker映像推送到docker hub。现在,我想将最新的映像从docker hub拉到远程ec2实例,并运行相同的映像。为此,我尝试从github操作执行ansible命令。但是我需要指定.pem文件作为ansible命令的参数。我试图将.pem文件保存在github中,但没有成功。我真的不知道该怎么做。 这是我的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
我试着像这样跑

ansible all -i '3.15.152.219,' --private-key ${{ secrets.ssh_key }} -m rest of the command

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

我猜您所说的“它不起作用”的意思是,
ansible
希望私钥是一个文件,而您提供的是一个字符串

这个关于github的操作演示了如何在github操作中使用机密文件。对于您的案例,等效方法是执行以下步骤:

  • gpg——对称——密码算法AES256 my\u private\u key.pem

  • 选择强密码短语并将此密码短语另存为github secrets中的机密。称之为
    LARGE\u SECRET\u PASSPHRASE

  • 在git中提交加密的
    my\u private\u key.pem.gpg

  • 在操作中创建解密此文件的步骤。它可能看起来像:

    -名称:解密Pem
    运行:gpg--quiet--batch--yes--decrypt--passphrase=“$LARGE\u SECRET\u passphrase”--输出$HOME/secrets/my\u private\u key.pem my\u private\u key.pem.gpg
    环境:
    大秘密密码:${secrets.大秘密密码}
    
  • 最后,您可以使用
    ansible all-i'3.15.152.219'——private key$HOME/secrets/my_private_key.pem运行
    ansible
    命令


  • 您可以轻松地使用
    webfactory/ssh agent
    添加ssh私钥。在运行
    ansible
    命令之前,您可以查看它并添加以下阶段

    # .github/workflows/my-workflow.yml
    jobs:
      my_job:
        ...
        steps:
          - actions/checkout@v2
          # Make sure the @v0.5.2 matches the current version of the
          # action 
          - uses: webfactory/ssh-agent@v0.5.2
            with:
              ssh-private-key: ${{ secrets.SSH_PRIVATE_KEY }}
          - ... other steps
    

    SSH\u PRIVATE\u KEY
    必须是在存储库机密中注册的密钥。之后,在不传递私钥文件的情况下运行您的
    ansible
    命令。

    请检查此项。阅读以下内容您可能会受益:虽然我相信您与其他评论者关系良好,但我想指出的是,包含“它不起作用”的问题永远不会为您提供所需的帮助。请特别注意这一页,它有一个明确的部分说,以避免这种模式,我一定会小心