GitHub Actions: Простой способ развернуть множество стендов фронтенд-приложения
Грубо говоря, GitHub Actions – это написанные пользователем сценарии, выполнение которых можно затриггерить по определенным действиям в репозитории (например, новый коммит).
Можно выделить следующие преимущества GitHub Actions среди других CI инструментов:
- модульность – сообществом поддерживаются пакеты для узких задач, избавляющие вас от дублирования кода и написания длинных скриптов (примеры: сборка Docker контейнера, передача файла на сервер, оповещение в Telegram и тысячи других)
- цена – бесплатный тарифный план покроет нужды небольших проектов
- скорость – быстрее бесплатных аналогов исходя из личного опыта
В статье описана реализация следующего сценария, который поможет упростить тестирование и разработку вашего приложения:
- Пользователь вносит изменения в ветку
- Автоматически запускается отвечающий за сборку скрипт
- Собранное приложение доставляется на сервер и доступно по адресу .app.example.ru
Подготовка сервера
Все действия будут выполнены на OC Ubuntu 20.04. Также нам понадобится доступ к NS-записям домена.
Подойдет cамая минимальная конфигурация, достаточная для раздачи статики. Остальную работу на себя возьмут серверы Гитхаба.
P.S.: Читателям статьи VScale предоставили купон VCGUIDE на 250 рублей.
Авторизуемся сгенерированным паролем с помощью командной строки или любого SSH клиента:
Установка необходимых пакетов
Установим nginx – он будет отвечать за раздачу файлов приложения:
apt update && apt install nginx -y
Далее создадим SSH-ключ, который понадобится нам для деплоя приложения на сервер:
ssh-keygen -t rsa -b 4096 -f deploy
Нам будет предложено задать секретный пароль, пропустим этот шаг (Enter).
Добавим ключ в доверенные:
cat ~/deploy.pub >> ~/.ssh/authorized_keys
И перезапустим сервис sshd для применения изменений:
service sshd reload
Настройка репозитория
Secrets (Settings > Secrets)
Подходит для хранения приватной информации – например, нашего SSH-ключа. Значения этих переменных будут скрыты из вывода в консоль и будут доступны только нам.
Задаем следующие переменные в настройках:
- DEPLOY_SERVER_HOST – IP вашего сервера
- DEPLOY_SERVER_PORT – SSH порт (по умолчанию 22)
- DEPLOY_SERVER_USERNAME – Имя пользователя (по умолчанию root)
- DEPLOY_SERVER_KEY – Секретная часть сгенерированного ранее ключа (посмотреть можно командой cat ~/deploy)
Github Actions: Создаем Workflow
Создадим в нашем репозитории шаблон для задачи, отвечающей за деплой:
name: CI on: [push] env: DEPLOY_PATH: /var/www/app # В теории можно собрать не только Vue-приложение, так как принцип сборки мало где отличается BUILD_SCRIPT: npm run build BUILD_SCRIPT_OUTPUT: dist jobs: deploy: runs-on: ubuntu-latest steps: # Делаем checkout текущей ветки — uses: actions/checkout@v2 # Устанавливаем Node.JS для сборки приложения — uses: actions/setup-node@v1 with: node-version: ’14’ # Записываем в переменные окружения имя текущей ветки # Чтобы избежать конфиликтов с URL, меняем точки на _, а слеши на минусы — name: Get branch name shell: bash run: echo «::set-env name=BRANCH_NAME::$(echo $
В примере выше используется созданный пользователем пакет appleboy/scp-action, выполняющий функцию архивирования файлов, передачу созданного архива по SSH и его распаковку на удаленном сервере.
Возле последнего коммита отображается статус последнего workflow
Настройка фронтенда
Автообновляемые бесплатные SSL-сертификаты
Для начала нужно привязать имеющийся домен к серверу.
В панеле управления доменом зададим DNS-серверы/NS-записи ns1.vscale.io и ns2.vscale.io
В настройках домена добавим новую запись *.example.ru, указывающую на IP нашего сервера:
Пример настроенных записей
Установим клиент ACME.sh для работы с Let’s Encrypt:
curl https://get.acme.sh | sh && source ~/.bashrc
Для получения и продления wildcard-сертификатов нужно добавлять специальную текстовую запись для домена. Создадим API токен с полными правами, чтобы не делать это каждый раз вручную.
Добавим полученный токен в переменные окружения сервера:
export VSCALE_API_KEY=
Следующая команда инициирует создание сертификатов для доменов *.example.ru и *.app.example.ru соответственно:
acme.sh —issue —dns dns_vscale -d *.example.ru -d *.app.example.ru —key-file /etc/ssl/privkey.pem —fullchain-file /etc/ssl/fullchain.pem —reloadcmd «service nginx force-reload»
Ждем окончания проверки, в случае успеха получаем такое сообщение:
——END CERTIFICATE—— [Mon Sep 14 10:03:50 UTC 2020] Your cert is in /root/.acme.sh/*.example.ru/*.example.ru.cer [Mon Sep 14 10:03:50 UTC 2020] Your cert key is in /root/.acme.sh/*.example.ru/*.example.ru.key [Mon Sep 14 10:03:50 UTC 2020] The intermediate CA cert is in /root/.acme.sh/*.example.ru/ca.cer [Mon Sep 14 10:03:50 UTC 2020] And the full chain certs is there: /root/.acme.sh/*.example.ru/fullchain.cer [Mon Sep 14 10:03:50 UTC 2020] Installing key to:/etc/ssl/privkey.pem [Mon Sep 14 10:03:50 UTC 2020] Installing full chain to:/etc/ssl/fullchain.pem [Mon Sep 14 10:03:50 UTC 2020] Run reload cmd: service nginx force-reload [Mon Sep 14 10:03:50 UTC 2020] Reload success
Настройка nginx
При каждом коммите в ветку, GitHub Action собирает приложение и отправляет его в директорию /var/www/app// у нас на сервере.
Нужно настроить сервер так, чтобы запросы к поддомену .app.example.ru указывали на соответствующую директорию.
Создадим/заменим стандартную конфигурацию nginx (/etc/nginx/sites-available/default):
server < listen 443 ssl; server_name "~^(?
С помощью регулярного выражения проверяется директива server_name: при соответствии правилу, значение поддомена подставляется в качестве имени root-директории, в которой находится уже собранное приложение.
Для применения изменений перезагружаем nginx:
nginx -s reload
Проверяем, всё ли получилось:
Кросс-платформенная сборка с GitHub Actions
Если проект живет на GitHub, можно за десять минут настроить авто-сборку под основные операционные системы — Windows, Linux и macOS.
Раньше для сборки почти всегда использовали Travis CI, многие по инерции и сейчас так делают. Но есть способ лучше — GitHub Actions.
GitHub Actions — невероятно мощный бесплатный сервис автоматизации любых задач. Грубо говоря, вы выполняете свой код на серверах Гитхаба и делаете там все, что заблагорассудится. Звучит диковато, но открывает бездну возможностей. В том числе — автоматическую сборку проекта под все ОС. Особенно приятно, что можно собирать под Windows.
Вот как это работает:
- Создаете файл конфигурации.
mkdir -p .github/workflows touch .github/workflows/build.yml
- Указываете условия запуска сборки.
Например, собирать при каждом коммите:
on: push
Или только из новых тегов:
on: push: tags: - "*"
- Перечисляете операционные системы.
runs-on: $> strategy: matrix: include: - os: ubuntu-latest - os: windows-latest - os: macos-latest
- Указываете шаги сборки.
- uses: actions/checkout@v2 - name: Build for Linux if: matrix.os == 'ubuntu-latest' run: gcc -fPIC -lm -shared src/stats.c -o dist/sqlite3-stats.so - name: Build for Windows if: matrix.os == 'windows-latest' run: gcc -fPIC -lm -shared src/stats.c -o dist/sqlite3-stats.dll - name: Build for macOS if: matrix.os == 'macos-latest' run: gcc -fno-common -dynamiclib src/stats.c -o dist/sqlite3-stats.dylib
Действие actions/checkout скачивает исходники, а на остальных шагах выполняются те команды, что указаны по тексту. В примере это сборка исходного кода на C с помощью gcc , но у вашего проекта может быть npm run для JS или tox для Python — то, что обычно используете для сборки.
Если для вашего языка есть стандартный репозиторий пакетов вроде npm или pypi — здесь же можно опубликовать сборку. Если репозитория нет, можно опубликовать прямо на гитхабе с помощью действия svenstaro/upload-release-action :
- name: Upload binaries to release uses: svenstaro/upload-release-action@v2 with: repo_token: $> file: dist/$> asset_name: $> tag: $>
- Полный пример конфигурации
- Коммитите изменения, пушите и наблюдаете результат на вкладке Actions репозитория на Гитхабе.
Готово! Теперь Гитхаб трудится, а вы отдыхаете.
- Документация по GitHub Actions
- Как сделать все что угодно вообще с GitHub Actions
Подписывайтесь на канал, чтобы не пропустить новые заметки
Экшены — Непрерывная интеграция (CI)
Одна из самых классных вещей в Github Action – экшены. С их помощью значительно сокращается количество кода в воркфлоу, а стандартный цикл сборки и тестирования проходит буквально за минуты на любом стеке.
В предыдущих уроках мы уже встречались с несколькими экшенами. Чаще всего в сборках используется экшен checkout, который клонирует репозиторий в рабочую директорию:
steps: - uses: actions/checkout@v3
Отметим несколько деталей. Экшен работает как один из шагов задания. Для этого вместо ключа run используется ключ uses , за которым идет имя экшена. Откуда берется это имя? Из каталога экшенов . Причем там могут быть как встроенные Github Actions, так и созданные сторонними пользователями. Понять, что и откуда можно по имени экшена, оно соответствует структуре ссылок самого Github: имя пользователя или команды/название репозитория. Встроенные экшены находятся в команде actions.
Кроме имени экшена Github требует указания его версии. Это сделано в целях надежности, чтобы обновления экшена не могли привести к случайной поломке всех репозиториев, которые его используют. Следить за версиями придется самостоятельно, поглядывая в README конкретного репозитория с экшеном.
У экшена могут быть параметры. Они задаются через ключ with :
steps: - uses: actions/checkout@v3 # https://github.com/actions/setup-node - uses: actions/setup-node@v3 with: node-version: '18.x' cache: 'npm' # ускоряет повторные сборки - run: npm ci - run: npm test
А вот пример стороннего экшена , который запускает тесты на фреймворке cypress:
name: End-to-end tests on: [push] jobs: cypress-run: runs-on: ubuntu-20.04 steps: - uses: actions/checkout@v3
Открыть доступ
Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно
- 130 курсов, 2000+ часов теории
- 1000 практических заданий в браузере
- 360 000 студентов
Наши выпускники работают в компаниях:
Развертывание в Службе приложений с помощью GitHub Actions
Начните работу с функцией GitHub Actions, которая позволит автоматизировать рабочий процесс и развертывать приложения в Службе приложений Azure из GitHub.
Необходимые компоненты
- Учетная запись Azure с активной подпиской. Создайте учетную запись бесплатно .
- Учетная запись GitHub. Если у вас ее нет, зарегистрируйтесь бесплатно.
- Работающее приложение Службы приложений Azure.
- .NET: Создание веб-приложения ASP.NET Core в Azure.
- ASP.NET: Создание веб-приложения ASP.NET Framework в Azure.
- JavaScript: Создание веб-приложения Node.js в Службе приложений Azure.
- Java: Создание приложения Java в Службе приложений Azure.
- Python: Создание приложения Python в Службе приложений Azure.
Общие сведения о файле рабочего процесса
Рабочий процесс определяется файлом YAML (.yml) по пути /.github/workflows/ в вашем репозитории. Это определение содержит разные шаги и параметры рабочего процесса.
Этот файл содержит три раздела:
Раздел Задачи Аутентификация 1. Определение субъекта-службы или профиля публикации.
2. Создание секрета GitHub.Сборка 1. Настройка окружения.
2. Создание веб-приложения.Развертывание 1. Развертывание веб-приложения. Использование центра развертывания
Вы можете быстро начать работу с GitHub Actions с помощью центра развертывания Службы приложений. Этот метод поворачивающего ключа автоматически создает файл рабочего процесса на основе стека приложения и фиксирует его в репозитории GitHub в правильном каталоге. Дополнительные сведения см. в статье «Непрерывное развертывание в службе приложение Azure».
Настройка рабочего процесса вручную
Вы также можете развернуть рабочий процесс без использования центра развертывания. Для этого необходимо сначала создать учетные данные развертывания.
Создание учетных данных для развертывания.
Рекомендуемый способ проверки подлинности с помощью служб приложение Azure для GitHub Actions — с определяемым пользователем управляемым удостоверением, а проще всего настроить развертывание GitHub Actions непосредственно на портале и выбрать управляемое удостоверение, назначаемое пользователем.
Проверка подлинности с помощью управляемого удостоверения, назначаемого пользователем, в настоящее время находится в предварительной версии.
Кроме того, можно пройти проверку подлинности с помощью субъекта-службы, OpenID Подключение или профиля публикации.
- Профиль публикации
- Субъект-служба
- OpenID Connect
Профиль публикации — это учетные данные уровня приложения. Настройте профиль публикации в качестве секрета GitHub.
- Перейдите к службе приложений на портале Azure.
- На странице Обзор выберите Получить профиль публикации.
- Сохраните скачанный файл. Содержимое этого файла будет использоваться для создания секрета GitHub.
По состоянию на октябрь 2020 г. веб-приложения Linux должны иметь параметр WEBSITE_WEBDEPLOY_USE_SCM приложения, заданный true перед скачиванием профиля публикации. В дальнейшем это требование будет отменено.
Вы можете создать субъект-службу с помощью команды az ad sp create-for-rbac в Azure CLI. Чтобы выполнить эту команду, откройте Azure Cloud Shell на портале Azure или нажмите кнопку Попробовать.
az ad sp create-for-rbac --name "myApp" --role contributor \ --scopes /subscriptions//resourceGroups//providers/Microsoft.Web/sites/ \ --json-authВ предыдущем примере замените заполнители идентификатором подписки, именем группы ресурсов и именем приложения. Выходные данные — это объект JSON с учетными данными назначения ролей, которые предоставляют доступ к приложению Служба приложений, как показано в следующем фрагменте КОДА JSON. Скопируйте этот объект JSON для последующего использования.
< "clientId": "", "clientSecret": "", "subscriptionId": "", "tenantId": "", (. ) >Рекомендуется всегда предоставлять минимальные разрешения доступа. Область в предыдущем примере ограничена конкретным приложением Службы приложений, а не всей группой ресурсов.
Метод проверки подлинности OpenID Connect использует маркеры с коротким сроком жизни. Настройка OpenID Connect с помощью GitHub Actions выполняется сложнее, но зато обеспечивает более безопасную работу.
-
Если у вас нет существующего приложения, зарегистрируйте новое приложение Active Directory и субъект-службу, который может обращаться к ресурсам. Создайте приложение Azure Active Directory.
az ad app create --display-name myAppaz ad sp create --id $appIdaz role assignment create --role contributor --subscription $subscriptionId --assignee-object-id $assigneeObjectId --scope /subscriptions/$subscriptionId/resourceGroups/$resourceGroupName/providers/Microsoft.Web/sites/ --assignee-principal-type ServicePrincipal- Замените APPLICATION-OBJECT-ID значением objectId (которое было создано при создании приложения) для приложения Active Directory.
- Задайте значение для CREDENTIAL-NAME , оно понадобится позже.
- Задайте subject . Его значение определяется GitHub в зависимости от рабочего процесса:
- Задания в среде GitHub Actions: repo:< Organization/Repository >:environment: < Name >.
- Если задания не привязаны к среде, включите путь ссылки для ветви или тега с учетом пути, используемого для запуска рабочего процесса: repo:< Organization/Repository >:ref: < ref path>. Например, repo:n-username/ node_express:ref:refs/heads/my-branch или repo:n-username/ node_express:ref:refs/tags/my-tag .
- Для рабочих процессов, запускаемых событием запроса на вытягивание: repo:< Organization/Repository >:pull_request .
az ad app federated-credential create --id --parameters credential.json ("credential.json" contains the following content) < "name": "", "issuer": "https://token.actions.githubusercontent.com", "subject": "repo:organization/repository:ref:refs/heads/main", "description": "Testing", "audiences": [ "api://AzureADTokenExchange" ] >Чтобы узнать, как создать приложение Active Directory, субъект-службу и федеративные учетные данные на портале Azure, воспользуйтесь статьей о подключении GitHub к Azure.
Настройка секрета GitHub
- Профиль публикации
- Субъект-служба
- OpenID Connect
В GitHub найдите нужный репозиторий. Выберите Параметры > Секреты безопасности > и переменные > Actions > New репозиторий secret.
Чтобы использовать учетные данные уровня приложения, вставьте содержимое скачанного файла профиля публикации в поле значения секрета. Присвойте этому секрету имя AZURE_WEBAPP_PUBLISH_PROFILE .
При настройке рабочего процесса GitHub укажите AZURE_WEBAPP_PUBLISH_PROFILE в действии развертывания веб-приложения Azure. Например:
- uses: azure/webapps-deploy@v2 with: publish-profile: $>В GitHub найдите нужный репозиторий. Выберите Параметры > Секреты безопасности > и переменные > Actions > New репозиторий secret.
Чтобы использовать учетные данные уровня пользователя, вставьте все выходные данные JSON, полученные из команды Azure CLI, в поле значения секрета. Присвойте секрету имя AZURE_CREDENTIALS .
Когда вы позже настроите файл рабочего процесса, этот секрет будет передан в действие входа в Azure как параметр creds . Например:
- uses: azure/login@v1 with: creds: $>Вам необходимо указать идентификатор клиента, идентификатор арендатора и идентификатор подписки приложения, чтобы выполнить действие входа. Эти значения могут быть указаны непосредственно в рабочем процессе или храниться в секретах GitHub с указанием ссылок на них в рабочем процессе. Сохранение значений в виде секретов GitHub является более безопасным вариантом.
- Откройте репозиторий GitHub и перейдите к разделу Параметры Секреты безопасности > и переменные > Actions > New репозиторий. >
- Создайте секреты для AZURE_CLIENT_ID , AZURE_TENANT_ID и AZURE_SUBSCRIPTION_ID . Используйте эти значения из приложения Active Directory для секретов GitHub:
Секрет Github Приложение Active Directory AZURE_CLIENT_ID Идентификатор приложения (клиент) AZURE_TENANT_ID Идентификатор каталога (клиента) AZURE_SUBSCRIPTION_ID Идентификатор подписки Настройка среды
Настройку среды можно выполнить с помощью одного из следующих действий.
Язык Действие настройки .NET actions/setup-dotnet ASP.NET actions/setup-dotnet Java actions/setup-java JavaScript actions/setup-node Python actions/setup-python В следующих примерах показано, как настроить среду для разных поддерживаемых языков:
.NET
- name: Setup Dotnet 6.0.x uses: actions/setup-dotnet@v3 with: dotnet-version: '6.0.x'ASP.NET
- name: Install Nuget uses: nuget/setup-nuget@v1 with: nuget-version: $>Java
- name: Setup Java 1.8.x uses: actions/setup-java@v3 with: # If your pom.xml version is not in 1.8.x, # change the Java version to match the version in pom.xml java-version: '1.8.x'JavaScript
env: NODE_VERSION: '18.x' # set this to the node version to use jobs: build-and-deploy: name: Build and Deploy runs-on: ubuntu-latest steps: - uses: actions/checkout@main - name: Use Node.js $> uses: actions/setup-node@v4 with: node-version: $>Python
- name: Setup Python 3.x uses: actions/setup-python@v4 with: python-version: 3.xСоздание веб-приложения
В зависимости от используемого языка применяются разные процессы создания веб-приложения и развертывания в Службе приложений Azure.
В следующих примерах показана часть рабочего процесса, которая создает веб-приложение на разных поддерживаемых языках.
Для всех языков можно задать корневой каталог веб-приложения с помощью working-directory .
.NET
Переменная среды AZURE_WEBAPP_PACKAGE_PATH задает путь к проекту веб-приложения.
- name: dotnet build and publish run: | dotnet restore dotnet build --configuration Release dotnet publish -c Release --property:PublishDir='$>/myapp'ASP.NET
Вы можете восстановить зависимости NuGet и запустить msbuild командой run .
- name: NuGet to restore dependencies as well as project-specific tools that are specified in the project file run: nuget restore - name: Add msbuild to PATH uses: microsoft/setup-msbuild@v1.0.2 - name: Run msbuild run: msbuild .\SampleWebApplication.slnJava
- name: Build with Maven run: mvn package --file pom.xmlJavaScript
Для Node.js можно задать working-directory или перейти в каталог npm в pushd .
- name: npm install, build, and test run: | npm install npm run build --if-present npm run test --if-present working-directory: my-app-folder # set to the folder with your app if it is not the root directoryPython
- name: Install dependencies run: | python -m pip install --upgrade pip pip install -r requirements.txtРазвертывание в службу приложений
Чтобы развернуть код в приложении Службы приложений, используйте действие azure/webapps-deploy@v2 . Это действие имеет четыре параметра:
Параметр Описание app-name (Обязательный) Имя приложения Службы приложений. publish-profile (Необязательный) Содержимое файла профиля публикации с секретами для веб-развертывания. package (Необязательный) Путь к пакету или папке. Этот путь должен содержать файл *.zip, *.war, *.jar или папку для развертывания slot-name (Необязательно) Введите существующий слот, не используемый в рабочей среде. - Профиль публикации
- Субъект-служба
- OpenID Connect
.NET Core
Создайте и разверните приложение .NET Core в Azure с использованием профиля публикации Azure. Входные данные publish-profile ссылаются на ранее созданный секрет AZURE_WEBAPP_PUBLISH_PROFILE .
name: .NET Core CI on: [push] env: AZURE_WEBAPP_NAME: my-app-name # set this to your application's name AZURE_WEBAPP_PACKAGE_PATH: '.' # set this to the path to your web app project, defaults to the repository root DOTNET_VERSION: '6.0.x' # set this to the dot net version to use jobs: build: runs-on: ubuntu-latest steps: # Checkout the repo - uses: actions/checkout@main # Setup .NET Core SDK - name: Setup .NET Core uses: actions/setup-dotnet@v3 with: dotnet-version: $> # Run dotnet build and publish - name: dotnet build and publish run: | dotnet restore dotnet build --configuration Release dotnet publish -c Release --property:PublishDir='$>/myapp' # Deploy to Azure Web apps - name: 'Run Azure webapp deploy action using publish profile credentials' uses: azure/webapps-deploy@v2 with: app-name: $> # Replace with your app name publish-profile: $> # Define secret variable in repository settings as per action documentation package: '$>/myapp'ASP.NET
Создайте и разверните приложение ASP.NET MVC, которое использует для проверки подлинности NuGet и publish-profile .
name: Deploy ASP.NET MVC App deploy to Azure Web App on: [push] env: AZURE_WEBAPP_NAME: my-app # set this to your application's name AZURE_WEBAPP_PACKAGE_PATH: '.' # set this to the path to your web app project, defaults to the repository root NUGET_VERSION: '5.3.x' # set this to the dot net version to use jobs: build-and-deploy: runs-on: windows-latest steps: - uses: actions/checkout@main - name: Install Nuget uses: nuget/setup-nuget@v1 with: nuget-version: $> - name: NuGet to restore dependencies as well as project-specific tools that are specified in the project file run: nuget restore - name: Add msbuild to PATH uses: microsoft/setup-msbuild@v1.0.2 - name: Run MSBuild run: msbuild .\SampleWebApplication.sln - name: 'Run Azure webapp deploy action using publish profile credentials' uses: azure/webapps-deploy@v2 with: app-name: $> # Replace with your app name publish-profile: $> # Define secret variable in repository settings as per action documentation package: '$>/SampleWebApplication/'Java
Создайте и разверните приложение Java Spring в Azure с использованием профиля публикации Azure. Входные данные publish-profile ссылаются на ранее созданный секрет AZURE_WEBAPP_PUBLISH_PROFILE .
name: Java CI with Maven on: [push] jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Set up JDK 1.8 uses: actions/setup-java@v3 with: java-version: 1.8 - name: Build with Maven run: mvn -B package --file pom.xml working-directory: my-app-path - name: Azure WebApp uses: Azure/webapps-deploy@v2 with: app-name: my-app-name publish-profile: $> package: my/target/*.jarЧтобы развернуть war вместо jar , измените значение package .
- name: Azure WebApp uses: Azure/webapps-deploy@v2 with: app-name: my-app-name publish-profile: $> package: my/target/*.warJavaScript
Создайте и разверните приложение Node.js в Azure с использованием профиля публикации приложения. Входные данные publish-profile ссылаются на ранее созданный секрет AZURE_WEBAPP_PUBLISH_PROFILE .
# File: .github/workflows/workflow.yml name: JavaScript CI on: [push] env: AZURE_WEBAPP_NAME: my-app-name # set this to your application's name AZURE_WEBAPP_PACKAGE_PATH: 'my-app-path' # set this to the path to your web app project, defaults to the repository root NODE_VERSION: '18.x' # set this to the node version to use jobs: build-and-deploy: name: Build and Deploy runs-on: ubuntu-latest steps: - uses: actions/checkout@main - name: Use Node.js $> uses: actions/setup-node@v4 with: node-version: $> - name: npm install, build, and test run: | # Build and test the project, then # deploy to Azure Web App. npm install npm run build --if-present npm run test --if-present working-directory: my-app-path - name: 'Deploy to Azure WebApp' uses: azure/webapps-deploy@v2 with: app-name: $> publish-profile: $> package: $>Python
Создайте и разверните приложение Python в Azure с использованием профиля публикации приложения. Обратите внимание, что входные данные publish-profile указывают на ранее созданный секрет AZURE_WEBAPP_PUBLISH_PROFILE .
name: Python CI on: [push] env: AZURE_WEBAPP_NAME: my-web-app # set this to your application's name AZURE_WEBAPP_PACKAGE_PATH: '.' # set this to the path to your web app project, defaults to the repository root jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Set up Python 3.x uses: actions/setup-python@v4 with: python-version: 3.x - name: Install dependencies run: | python -m pip install --upgrade pip pip install -r requirements.txt - name: Building web app uses: azure/appservice-build@v2 - name: Deploy web App using GH Action azure/webapps-deploy uses: azure/webapps-deploy@v2 with: app-name: $> publish-profile: $> package: $>.NET Core
Создайте и разверните приложение .NET Core в Azure с использованием субъекта-службы Azure. Обратите внимание, что входные данные creds указывают на ранее созданный секрет AZURE_CREDENTIALS .
name: .NET Core on: [push] env: AZURE_WEBAPP_NAME: my-app # set this to your application's name AZURE_WEBAPP_PACKAGE_PATH: '.' # set this to the path to your web app project, defaults to the repository root DOTNET_VERSION: '6.0.x' # set this to the dot net version to use jobs: build: runs-on: ubuntu-latest steps: # Checkout the repo - uses: actions/checkout@main - uses: azure/login@v1 with: creds: $> # Setup .NET Core SDK - name: Setup .NET Core uses: actions/setup-dotnet@v3 with: dotnet-version: $> # Run dotnet build and publish - name: dotnet build and publish run: | dotnet restore dotnet build --configuration Release dotnet publish -c Release --property:PublishDir='$>/myapp' # Deploy to Azure Web apps - name: 'Run Azure webapp deploy action using Azure Credentials' uses: azure/webapps-deploy@v2 with: app-name: $> # Replace with your app name package: '$>/myapp' - name: logout run: | az logoutASP.NET
Создайте и разверните приложение ASP.NET MVC в Azure с использованием субъекта-службы Azure. Обратите внимание, что входные данные creds указывают на ранее созданный секрет AZURE_CREDENTIALS .
name: Deploy ASP.NET MVC App deploy to Azure Web App on: [push] env: AZURE_WEBAPP_NAME: my-app # set this to your application's name AZURE_WEBAPP_PACKAGE_PATH: '.' # set this to the path to your web app project, defaults to the repository root NUGET_VERSION: '5.3.x' # set this to the dot net version to use jobs: build-and-deploy: runs-on: windows-latest steps: # checkout the repo - uses: actions/checkout@main - uses: azure/login@v1 with: creds: $> - name: Install Nuget uses: nuget/setup-nuget@v1 with: nuget-version: $> - name: NuGet to restore dependencies as well as project-specific tools that are specified in the project file run: nuget restore - name: Add msbuild to PATH uses: microsoft/setup-msbuild@v1.0.2 - name: Run MSBuild run: msbuild .\SampleWebApplication.sln - name: 'Run Azure webapp deploy action using Azure Credentials' uses: azure/webapps-deploy@v2 with: app-name: $> # Replace with your app name package: '$>/SampleWebApplication/' # Azure logout - name: logout run: | az logoutJava
Создайте и разверните приложение ASP.NET MVC в Azure с использованием субъекта-службы Azure. Обратите внимание, что входные данные creds указывают на ранее созданный секрет AZURE_CREDENTIALS .
name: Java CI with Maven on: [push] jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: azure/login@v1 with: creds: $> - name: Set up JDK 1.8 uses: actions/setup-java@v3 with: java-version: 1.8 - name: Build with Maven run: mvn -B package --file pom.xml working-directory: complete - name: Azure WebApp uses: Azure/webapps-deploy@v2 with: app-name: my-app-name package: my/target/*.jar # Azure logout - name: logout run: | az logoutJavaScript
Создайте и разверните приложение Node.js в Azure с использованием субъекта-службы Azure. Обратите внимание, что входные данные creds указывают на ранее созданный секрет AZURE_CREDENTIALS .
name: JavaScript CI on: [push] name: Node.js env: AZURE_WEBAPP_NAME: my-app # set this to your application's name AZURE_WEBAPP_PACKAGE_PATH: 'my-app-path' # set this to the path to your web app project, defaults to the repository root NODE_VERSION: '18.x' # set this to the node version to use jobs: build-and-deploy: runs-on: ubuntu-latest steps: # checkout the repo - name: 'Checkout GitHub Action' uses: actions/checkout@main - uses: azure/login@v1 with: creds: $> - name: Setup Node $> uses: actions/setup-node@v4 with: node-version: $> - name: 'npm install, build, and test' run: | npm install npm run build --if-present npm run test --if-present working-directory: my-app-path # deploy web app using Azure credentials - uses: azure/webapps-deploy@v2 with: app-name: $> package: $> # Azure logout - name: logout run: | az logoutPython
Создайте и разверните приложение Python в Azure с использованием субъекта-службы Azure. Обратите внимание, что входные данные creds указывают на ранее созданный секрет AZURE_CREDENTIALS .
name: Python application on: [push] env: AZURE_WEBAPP_NAME: my-app # set this to your application's name AZURE_WEBAPP_PACKAGE_PATH: '.' # set this to the path to your web app project, defaults to the repository root jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: azure/login@v1 with: creds: $> - name: Set up Python 3.x uses: actions/setup-python@v4 with: python-version: 3.x - name: Install dependencies run: | python -m pip install --upgrade pip pip install -r requirements.txt - name: Deploy web App using GH Action azure/webapps-deploy uses: azure/webapps-deploy@v2 with: app-name: $> package: $> - name: logout run: | az logout.NET Core
Создайте и разверните приложение .NET Core в Azure с использованием субъекта-службы Azure. В примере используются секреты GitHub для значений client-id , tenant-id и subscription-id . Эти значения также можно передать непосредственно в действие входа.
name: .NET Core on: [push] permissions: id-token: write contents: read env: AZURE_WEBAPP_NAME: my-app # set this to your application's name AZURE_WEBAPP_PACKAGE_PATH: '.' # set this to the path to your web app project, defaults to the repository root DOTNET_VERSION: '6.0.x' # set this to the dot net version to use jobs: build: runs-on: ubuntu-latest steps: # Checkout the repo - uses: actions/checkout@main - uses: azure/login@v1 with: client-id: $> tenant-id: $> subscription-id: $> # Setup .NET Core SDK - name: Setup .NET Core uses: actions/setup-dotnet@v3 with: dotnet-version: $> # Run dotnet build and publish - name: dotnet build and publish run: | dotnet restore dotnet build --configuration Release dotnet publish -c Release --property:PublishDir='$>/myapp' # Deploy to Azure Web apps - name: 'Run Azure webapp deploy action using publish profile credentials' uses: azure/webapps-deploy@v2 with: app-name: $> # Replace with your app name package: '$>/myapp' - name: logout run: | az logoutASP.NET
Создайте и разверните приложение ASP.NET MVC в Azure с использованием субъекта-службы Azure. В примере используются секреты GitHub для значений client-id , tenant-id и subscription-id . Эти значения также можно передать непосредственно в действие входа.
name: Deploy ASP.NET MVC App deploy to Azure Web App on: [push] permissions: id-token: write contents: read env: AZURE_WEBAPP_NAME: my-app # set this to your application's name AZURE_WEBAPP_PACKAGE_PATH: '.' # set this to the path to your web app project, defaults to the repository root NUGET_VERSION: '5.3.x' # set this to the dot net version to use jobs: build-and-deploy: runs-on: windows-latest steps: # checkout the repo - uses: actions/checkout@main - uses: azure/login@v1 with: client-id: $> tenant-id: $> subscription-id: $> - name: Install Nuget uses: nuget/setup-nuget@v1 with: nuget-version: $> - name: NuGet to restore dependencies as well as project-specific tools that are specified in the project file run: nuget restore - name: Add msbuild to PATH uses: microsoft/setup-msbuild@v1.0.2 - name: Run MSBuild run: msbuild .\SampleWebApplication.sln - name: 'Run Azure webapp deploy action using publish profile credentials' uses: azure/webapps-deploy@v2 with: app-name: $> # Replace with your app name package: '$>/SampleWebApplication/' # Azure logout - name: logout run: | az logoutJava
Создайте и разверните приложение ASP.NET MVC в Azure с использованием субъекта-службы Azure. В примере используются секреты GitHub для значений client-id , tenant-id и subscription-id . Эти значения также можно передать непосредственно в действие входа.
name: Java CI with Maven on: [push] permissions: id-token: write contents: read jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: azure/login@v1 with: client-id: $> tenant-id: $> subscription-id: $> - name: Set up JDK 1.8 uses: actions/setup-java@v3 with: java-version: 1.8 - name: Build with Maven run: mvn -B package --file pom.xml working-directory: complete - name: Azure WebApp uses: Azure/webapps-deploy@v2 with: app-name: my-app-name package: my/target/*.jar # Azure logout - name: logout run: | az logoutJavaScript
Создайте и разверните приложение Node.js в Azure с использованием субъекта-службы Azure. В примере используются секреты GitHub для значений client-id , tenant-id и subscription-id . Эти значения также можно передать непосредственно в действие входа.
name: JavaScript CI on: [push] permissions: id-token: write contents: read name: Node.js env: AZURE_WEBAPP_NAME: my-app # set this to your application's name AZURE_WEBAPP_PACKAGE_PATH: 'my-app-path' # set this to the path to your web app project, defaults to the repository root NODE_VERSION: '18.x' # set this to the node version to use jobs: build-and-deploy: runs-on: ubuntu-latest steps: # checkout the repo - name: 'Checkout GitHub Action' uses: actions/checkout@main - uses: azure/login@v1 with: client-id: $> tenant-id: $> subscription-id: $> - name: Setup Node $> uses: actions/setup-node@v4 with: node-version: $> - name: 'npm install, build, and test' run: | npm install npm run build --if-present npm run test --if-present working-directory: my-app-path # deploy web app using Azure credentials - uses: azure/webapps-deploy@v2 with: app-name: $> package: $> # Azure logout - name: logout run: | az logoutPython
Создайте и разверните приложение Python в Azure с использованием субъекта-службы Azure. В примере используются секреты GitHub для значений client-id , tenant-id и subscription-id . Эти значения также можно передать непосредственно в действие входа.
name: Python application on: [push] permissions: id-token: write contents: read env: AZURE_WEBAPP_NAME: my-app # set this to your application's name AZURE_WEBAPP_PACKAGE_PATH: '.' # set this to the path to your web app project, defaults to the repository root jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: azure/login@v1 with: client-id: $> tenant-id: $> subscription-id: $> - name: Set up Python 3.x uses: actions/setup-python@v4 with: python-version: 3.x - name: Install dependencies run: | python -m pip install --upgrade pip pip install -r requirements.txt - name: Deploy web App using GH Action azure/webapps-deploy uses: azure/webapps-deploy@v2 with: app-name: $> package: $> - name: logout run: | az logoutСледующие шаги
Ознакомьтесь со ссылками на действия и рабочие процессы Azure GitHub:
- Вход в Azure
- Веб-приложение Azure
- Веб-приложение Azure для контейнеров
- Вход в Docker и выход из него
- Развертывание Kubernetes
- Рабочие процессы действий для развертывания в Azure
- Начальные рабочие процессы
- События, инициирующие рабочие процессы