无法从 garygrossgarten/github-action-ssh@release 的非 TTY 设备执行交互式登录错误

Sat*_*v93 11 ssh command docker github-actions

我正在尝试在由 github 操作创建的 ssh 连接中运行 docker 命令。我什至在工作流程中使用了提及。这是我的工作流程

\n
# This workflow will do a clean installation of node dependencies, cache/restore them, build the source code and run tests across different versions of node\n# For more information see: https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions\n\nname: Node.js CI\n\non:\n  pull_request:\n    branches: ['main']\n\nenv:\n  REGISTRY: 'ghcr.io/testing/api-gateway'\n  IMAGE_NAME: ${{ format('{0}-{1}', github.event.repository.name, github.sha) }}\n  USERNAME: ${{ secrets.USERNAME }}\n  DOCKER_TOKEN: ${{ secrets.DOCKER_TOKEN }}\n\njobs:\n  build:\n    runs-on: ubuntu-latest\n\n    strategy:\n      matrix:\n        node-version: [16.x]\n\n    steps:\n      - uses: actions/checkout@v3\n\n      - name: Use Node.js ${{ matrix.node-version }}\n        uses: actions/setup-node@v3\n        with:\n          node-version: ${{ matrix.node-version }}\n          cache: 'npm'\n      - run: npm install\n      - run: npm run build\n\n      - name: Build & Push docker\n        run: docker build -t $REGISTRY:$IMAGE_NAME .\n\n      - name: Login to github package repository\n        run: echo $DOCKER_TOKEN | docker login ghcr.io -u $USERNAME --password-stdin\n\n      - name: Push docker image\n        run: docker push $REGISTRY:$IMAGE_NAME\n\n  deploy:\n    runs-on: ubuntu-latest\n    needs: build\n\n    steps:\n      - name: Deploy to Digital Ocean droplet via SSH action\n        uses: garygrossgarten/github-action-ssh@release\n        with:\n          host: ${{ secrets.DO_HOST }}\n          username: ${{ secrets.DO_USER }}\n          privateKey: ${{ secrets.DO_KEY }}\n          passphrase: ${{ secrets.DO_PASSPHRASE }}\n          command: |\n            echo $DOCKER_TOKEN | docker login ghcr.io -u $USERNAME --password-stdin\n            docker pull $REGISTRY:$IMAGE_NAME\n            docker run -p 3000:3000 $REGISTRY:$IMAGE_NAME\n
Run Code Online (Sandbox Code Playgroud)\n

但当我运行工作流程时,出现以下错误。

\n
Run garygrossgarten/github-action-ssh@release\nEstablishing a SSH connection to ***.\nusing provided private key\n(node:1514) [DEP0005] DeprecationWarning: Buffer() is deprecated due to security and usability issues. Please use the Buffer.alloc(), Buffer.allocUnsafe(), or Buffer.from() methods instead.\n Connected to ***.\nExecuting command: echo $DOCKER_TOKEN | docker login ghcr.io -u $USERNAME --password-stdin\ndocker pull $REGISTRY:$IMAGE_NAME\ndocker run -p 3000:3000 $REGISTRY:$IMAGE_NAME\nError: Cannot perform an interactive login from a non-TTY device\n\ninvalid reference format\n\ndocker: invalid reference format.\nSee 'docker run --help'.\n\n\xe2\x9a\xa0\xef\xb8\x8f An error happened executing the command echo $DOCKER_TOKEN | docker login ghcr.io -u $USERNAME --password-stdin\ndocker pull $REGISTRY:$IMAGE_NAME\ndocker run -p 3000:3000 $REGISTRY:$IMAGE_NAME. Command exited with code 125\nError: Command exited with code 125\n 1: 0xa1a640 node::Abort() [/home/runner/runners/2.296.0/externals/node12/bin/node]\n 2: 0xa90649  [/home/runner/runners/2.296.0/externals/node12/bin/node]\n 3: 0xc06599  [/home/runner/runners/2.296.0/externals/node12/bin/node]\n 4: 0xc08387 v8::internal::Builtin_HandleApiCall(int, unsigned long*, v8::internal::Isolate*) [/home/runner/runners/2.296.0/externals/node12/bin/node]\n 5: 0x140dd19  [/home/runner/runners/2.296.0/externals/node12/bin/node]\n
Run Code Online (Sandbox Code Playgroud)\n

我正在寻找一种解决方案,但找不到合适的解决方案。对此最好的解决方案是什么?

\n

Gui*_*urd 15

根据有关无法从非 TTY 设备消息执行交互式登录的其他线程

当您使用--password-stdin时, docker login会打印此错误消息,但实际上并不将密码发送到命令的标准输入。

因此,该变量似乎$DOCKER_TOKEN为空。

您可以尝试使用${{ env.DOCKER_TOKEN}}, 或添加env: DOCKER_TOKEN: ${{ env.DOCKER_TOKEN }}到部署作业的最后一步。

像这样的东西:

  deploy:
    runs-on: ubuntu-latest
    needs: build

    steps:
      - name: Deploy to Digital Ocean droplet via SSH action
        uses: garygrossgarten/github-action-ssh@release
        env:
          DOCKER_TOKEN: ${{ env.DOCKER_TOKEN }}
        with:
          host: ${{ secrets.DO_HOST }}
          username: ${{ secrets.DO_USER }}
          privateKey: ${{ secrets.DO_KEY }}
          passphrase: ${{ secrets.DO_PASSPHRASE }}
          command: |
            echo $DOCKER_TOKEN | docker login ghcr.io -u $USERNAME --password-stdin 
            # or using directly ${{ env.DOCKER_TOKEN}} instead of $DOCKER_TOKEN
            docker pull $REGISTRY:$IMAGE_NAME
            docker run -p 3000:3000 $REGISTRY:$IMAGE_NAME
Run Code Online (Sandbox Code Playgroud)