Я создал статическое веб-приложение 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. Это заканчивается неудачей рабочего процесса.
Спасибо за ответ! Нет, процесс сборки включен в Azure/[email protected], поэтому на том же этапе, где я запускаю ssh-agent.
В другой теме я обнаружил, что это может быть связано с тем, что использование синтаксиса [email protected]:...
заканчивается использованием SSH для клонирования, и что внутри контейнера ваш закрытый ключ может быть недоступен. В этом случае вы можете вместо этого использовать RUN git clone https://github.com/x/y.git
(источник (даже если он другой): github.com/docker-library/golang/issues/148).
Спасибо, думаю, это подтолкнуло меня в правильном направлении. Поскольку я был новичком в GitHub Actions, я не осознавал, что действие Azure/[email protected]
запускает контейнер Docker. Этот контейнер действительно ничего не знает о webfactory/ssh-agent
, который работает на хост-виртуальной машине. Теперь выясним, как легко «вставить» ключ хоста и мой закрытый SSH-ключ в контейнер ...
Проанализировав 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]
...
Выполняется ли процесс сборки (с командой yarn) на другом шаге? Если это так, проверьте каталог перед выполнением команды, чтобы убедиться, что вы все еще находитесь в ожидаемом каталоге. Недавно я проделал нечто подобное с git, и мне пришлось входить в каталог для выполнения операций на каждом шаге.