Как я могу настроить GitHub Actions для создания моего статического веб-приложения Azure с зависимостью от частного репозитория?

Я создал статическое веб-приложение Azure с одной функцией API, имеющей одну зависимость. Эта зависимость находится в частном репозитории на GitHub. На моем локальном компьютере разработчика я могу создать приложение Functions, загрузив зависимость с помощью аутентификации SSH. При попытке развернуть в Azure с помощью GitHub Actions я получаю ошибку Host key verification failed.

Рабочий процесс My GitHub Actions аналогичен рабочему процессу по умолчанию, создаваемому статическим веб-приложением Azure, с добавлением использования веб-фабрика / ssh-агент для облегчения проверки подлинности SSH на GitHub для получения частного репозитория Y и этапа запуска с git clone для целей тестирования:

# ... Same as on https://docs.microsoft.com/en-us/azure/static-web-apps/github-actions-workflow

jobs:
  build_and_deploy_job:
    runs-on: ubuntu-latest
    name: Build and Deploy Job
    steps:
      - uses: actions/checkout@v2
        with:
          submodules: true
          persist-credentials: false
      - uses: webfactory/[email protected]
        with:
          ssh-private-key: ${{ secrets.SSH_PRIVATE }}
      - run: |
          git clone ssh://[email protected]/X/Y.git Z
          ls -la Z
      - name: Build And Deploy
        id: builddeploy
        uses: Azure/[email protected]
        with:
          azure_static_web_apps_api_token: ${{ secrets.AZURE_TOKEN }}
          repo_token: ${{ secrets.GITHUB_TOKEN }}
          action: "upload"
          app_location: "/"
          api_location: "api"
          output_location: "build"

# ... Same as on https://docs.microsoft.com/en-us/azure/static-web-apps/github-actions-workflow

В моем частном репозитории Y я добавил открытый ключ, связанный с закрытым ключом secrets.SSH_PRIVATE, в качестве ключа развертывания.

После запуска рабочего процесса он показывает, что команда git clone выполняется правильно, поскольку команда ls -la приводит к отображению каталогов и файлов в моем частном репозитории. Однако процесс сборки моего API (yarn install --prefer-offline --production) приводит к ошибке Host key verification failed, когда yarn извлекает пакеты. В результате GitHub Actions не может загрузить зависимость в моем частном репозитории и не может создать API. Это заканчивается неудачей рабочего процесса.

Выполняется ли процесс сборки (с командой yarn) на другом шаге? Если это так, проверьте каталог перед выполнением команды, чтобы убедиться, что вы все еще находитесь в ожидаемом каталоге. Недавно я проделал нечто подобное с git, и мне пришлось входить в каталог для выполнения операций на каждом шаге.

GuiFalourd 01.04.2021 03:08

Спасибо за ответ! Нет, процесс сборки включен в Azure/[email protected], поэтому на том же этапе, где я запускаю ssh-agent.

Jero 01.04.2021 07:22

В другой теме я обнаружил, что это может быть связано с тем, что использование синтаксиса [email protected]:... заканчивается использованием SSH для клонирования, и что внутри контейнера ваш закрытый ключ может быть недоступен. В этом случае вы можете вместо этого использовать RUN git clone https://github.com/x/y.git (источник (даже если он другой): github.com/docker-library/golang/issues/148).

GuiFalourd 01.04.2021 14:21

Спасибо, думаю, это подтолкнуло меня в правильном направлении. Поскольку я был новичком в GitHub Actions, я не осознавал, что действие Azure/[email protected] запускает контейнер Docker. Этот контейнер действительно ничего не знает о webfactory/ssh-agent, который работает на хост-виртуальной машине. Теперь выясним, как легко «вставить» ключ хоста и мой закрытый SSH-ключ в контейнер ...

Jero 01.04.2021 21:31
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
Как установить LAMP Stack 1/2 на Azure Linux VM
Как установить LAMP Stack 1/2 на Azure Linux VM
В дополнение к нашему предыдущему сообщению о намерении Azure прекратить поддержку Azure Database для MySQL в качестве единого сервера после 16...
1
4
34
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Проанализировав Azure/[email protected], я заметил, что он использует Орикс для запуска контейнера Docker для процесса сборки статического веб-приложения Azure. Этот контейнер не знает о ssh-agent, который был инициализирован с помощью webfactory/ssh-agent на виртуальной машине хоста. В результате yarn install, запущенный в Azure/[email protected], не смог загрузить зависимость, которая была в моем частном репозитории, и не удалось установить.

Чтобы обойти это, я реорганизовал свою частную зависимость, чтобы вместо этого использовать ее как подмодуль git, потому что подмодули можно загружать до процесса сборки с помощью actions/checkout. Это было достигнуто путем добавления только двух дополнительных строк в файл рабочего процесса, созданный Статические веб-приложения Azure. Я выделил эти две строки завершающим # ADDED в следующем фрагменте моего файла рабочего процесса:

jobs:
  build_and_deploy_job:
    runs-on: ubuntu-latest
    name: Build and Deploy Job
    steps:
      - uses: actions/checkout@v2
        with:
          ssh-known-hosts: "github.com" # ADDED
          ssh-key: ${{ secrets.SSH_PRIVATE }} # ADDED
          submodules: true
      - name: Build And Deploy
        id: builddeploy
        uses: Azure/[email protected]
...

Другие вопросы по теме