Действия Github - как развернуть на удаленном сервере, используя SSH - PullRequest
2 голосов
/ 01 марта 2020

У меня есть промежуточный сервер в DO.

Я хочу создать и развернуть на нем свое приложение для узла.

name: Build & Deploy
on:
  push:
    tags:
      - 'v1.*.0'
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - name: Create SSH key
        run: |
          mkdir -p ~/.ssh/
          echo "$DO_GITHUB_PRIVATE_KEY" > ../github_do.key
          sudo chmod 600 ../github_do.key
          ssh-keyscan -H ${{secrets.DEPLOY_SERVER}} > ~/.ssh/known_hosts
        shell: bash
        env:
          DO_GITHUB_PRIVATE_KEY: ${{secrets.DO_GITHUB_PRIVATE_KEY}}
      - uses: actions/setup-node@v1
        with:
          node-version: 12.x
      - name: Install Packages
        run: yarn install --frozen-lockfile
      - name: Build artifacts
        env:
          DEPLOY_SSH_KEY_PATH: ${{ github.workspace }}/../github_do.key
        run: |
          yarn shipit production fast-deploy

Я создал новый S SH private & publi c keys.

private ключ, который я сохранил внутри DO_GITHUB_PRIVATE_KEY github secret.

publi c* Ключ 1014 *, который я добавил к authorized_keys на моем промежуточном сервере.

Когда действие запускается, оно не срабатывает:

@ v***.256.0
Create release path "/home/***/***/releases/2020-03-0***-v***.256.0"
Running "mkdir -p /home/***/***/releases/2020-03-0***-v***.256.0" on host "***".
@***-err ***@***: Permission denied (publickey,gssapi-keyex,gssapi-with-mic).
'fast-deploy:updateRemote' errored after ***.32 s
Error: Command failed: ssh -i /home/runner/work/***/***/../github_do.key ***@*** "mkdir -p /home/***/***/releases/2020-03-0***-v***.256.0"

1 Ответ

0 голосов
/ 02 марта 2020

Я решил это! Очевидно, ключи были защищены парольной фразой ?.

Это целый процесс:

  1. Создание новых ключей

    ssh-keygen -t rsa -b 4096 -C "user@host" -q -N ""

  2. Обновите ваш хост authorized_keys

    ssh-copy-id -i ~/.ssh/id_rsa.pub user@host

  3. Войдите на сервер и запустите

    ssh-keyscan host

  4. Скопировать вывод в секретный файл github (пусть он будет называться SSH_KNOWN_HOSTS)

  5. Скопировать секретный ключ в секретный файл github (давайте назовем его SSH_PRIVATE_KEY)

В вашем файле workflow.yml

#workflow.yaml
...
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - name: Create SSH key
        run: |
          mkdir -p ~/.ssh/
          echo "$SSH_PRIVATE_KEY" > ../private.key
          sudo chmod 600 ../private.key
          echo "$SSH_KNOWN_HOSTS" > ~/.ssh/known_hosts
        shell: bash
        env:
          SSH_PRIVATE_KEY: ${{secrets.SSH_PRIVATE_KEY}}
          SSH_KNOWN_HOSTS: ${{secrets.SSH_KNOWN_HOSTS}}
          SSH_KEY_PATH: ${{ github.workspace }}/../private.key

Тогда вы можете использовать s sh с ssh -i $SSH_KEY_PATH user@host

Надеюсь, это сэкономит кому-то несколько часов:]

...