Вы слышите об этих новых действиях GitHub. Или, может быть, вы этого не сделали, но хотели бы добавить непрерывную интеграцию, непрерывное развертывание (CI-CD) в ваше веб-приложение. В этом посте я покажу вам, как добавить CI-CD для автоматического развертывания в Azure, используя действия GitHub.
Какие действия GitHub
Действия GitHub — это автоматизированные рабочие процессы, чтобы делать что -то. Одним из них может быть CI-CD. Используя рабочий процесс, вы можете принять решение о компиляции и выполнить некоторые модульные тесты при каждом запросе Push или Pull (PR). Другим рабочим процессом может быть то, что вы развертываете это приложение.
В этой статье я развернут .net Основное приложение в Azure. Тем не менее, вы можете использовать любые языки, которые вам нужны и развернуть везде, где вам нравится … Мне просто нужно было выбрать один:)
Теперь давайте начнем.
Шаг 1 — код.
Нам нужен код в репозитории GitHub. Создайте репо с GitHub, клонируйте его локально. И ваше приложение в нем. Я создал свой с Dotnet New BlazerServer -n Cloud5minsDemo -o src
Анкет Затем совершите и нажмите.
Шаг 2 — Определите рабочий процесс
Мы получили код, теперь пришло время определить наш рабочий процесс. Я буду предоставлять все фрагменты кода, необходимые для обложки сценария в этом посте, но есть множество шаблонов, готовых к использованию, доступным непосредственно из вашего репозитория GitHub! Давайте посмотрим. Из вашего репозитория нажмите на вкладку «Действие» и «Вуаля»!
Когда я написал этот пост, многие доступные шаблоны предполагали, что ресурсы Azure уже существовали и Вы и добавляете CI-CD в микет для автоматизации вашего развертывания. Это великолепно Но в моем случае я создавал совершенно новый веб -сайт, чтобы они не соответствовали моим потребностям. Вот почему я создал свой собственный шаблон. Рабочий процесс, который я создал, был вдохновлен Azure/WebApps-Deploy Анкет И там много информации также доступна на Развертывание в службу приложений с использованием действий GitHub Анкет
Давайте добавим свой шаблон в наше решение. GitHub будет смотреть в папку .github/Workflows/
Из корня хранилища. Затем создайте файл с расширением .yml
Здесь код для моего dotnet.yml
, как любой файл YAML, секрет находится в отступлении, так как он чувствителен к пробелу:
on: [push,pull_request] env: AZURE_WEBAPP_NAME: cloud5minsdemo # set this to your application's name AZURE_GROUP_NAME: cloud5mins2 jobs: build-and-deploy: runs-on: ubuntu-latest steps: # checkout the repo - uses: actions/checkout@master - name: Setup .NET Core uses: actions/setup-dotnet@v1 with: dotnet-version: 3.0.101 # dotnet build and publish - name: Build with dotnet run: dotnet build ./src --configuration Release - name: dotnet publish run: | dotnet publish ./src -c Release -o myapp - uses: azure/login@v1 with: creds: ${{ secrets.AZURE_CREDENTIALS }} - run: | az group create -n ${{ env.AZURE_GROUP_NAME }} -l eastus az group deployment create -n ghaction -g ${{ env.AZURE_GROUP_NAME }} --template-file deployment/azuredepoy.json # deploy web app using Azure credentials - name: 'Azure webapp deploy' uses: azure/webapps-deploy@v1 with: app-name: ${{ env.AZURE_WEBAPP_NAME }} package: './myapp' # Azure logout - name: logout run: | az logout
Агент
Там многое давайте начнем с первой строки. на:
это определить триггер, в этом случае рабочий процесс будет запускаться при каждом толчке или PR.
env:
где вы можете объявить переменные. Это совершенно необязательно, но я думаю, что это поможет, тогда шаблоны станут более сложными или просто для того, чтобы легко их использовать.
Тогда приходит Работа:
определение. В этом случае мы будем использовать последнюю версию Ubuntu в качестве нашего агента сборки. Конечно, в производственной среде вы должны быть больше указать и выбрать ОС, которая соответствует вашим потребностям. Эта задача будет иметь многократные шаги, определенные, вы предполагаете, Шаги:
раздел/
Мы указываем филиал для работы и настроив нашего агента:
uses: actions/setup-dotnet@v1 with: dotnet-version: 3.0.101
Это потому, что у меня есть .net Основной проект. Для проекта node.js это было бы
uses: actions/setup-node@v1 with: node-version: 10.x
И было бы лучшей идеей установить версию в качестве переменной среды, чтобы иметь возможность быстро ее изменить.
Следующие две инструкции действительно .net Основной фокус, когда они будут создавать и упаковать приложение в папку MyApp
. Конечно, в «разделе» вы можете выполнить какой -либо модульный тест или любую другую проверку, которую вы можете найти полезным.
Следующий раздел может быть менее очевидным.
- uses: azure/login@v1 with: creds: ${{ secrets.AZURE_CREDENTIALS }}
Доступ и секреты
Чтобы наши действия GitHub были способны создавать ресурсы и развернуть необходимый код, необходимый для доступа. Azure/Login@v1
Позвольте действию входить в систему, используя Сервис принципал Анкет Другими словами, мы создадим аутентификацию в Azure Active Directory, с достаточным разрешением делать то, что нам нужно.
Давайте рассмотрим следующую команду Azure CLI:
az ad sp create-for-rbac --name "c5m-Frankdemo" --role contributor --scopes /subscriptions/{subscription-id} --sdk-auth`
Это создаст Сервис принципал Назван «C5M-FrankDemo» с ролью «участника» в указанной подписке. Роль -участник может делать в основном все, кроме предоставления разрешения.
Поскольку никаких ресурсов уже не было, действие GitHub потребует большего разрешения. Если вы создаете Ресурсная группа За пределами CI-CD вы можете ограничить доступ только к этой конкретной группе ресурсов. Вместо этого используя эту команду:
az ad sp create-for-rbac --name "c5m-Frankdemo" --role contributor --scopes /subscriptions/{subscription-id}/resourceGroups/{resource-group} --sdk-auth`
Команда Azure CLI вернет JSON. Мы скопируем этот JSON в секрет GitHub. Секреты GitHub Зашифрованные секреты и позволяют хранить конфиденциальную информацию, такую как токены доступа, в вашем хранилище. Чтобы получить доступ к ним, перейдите в настройки репозитория и выберите секреты в левом меню.
Нажмите на Добавить новый секрет кнопка и тип Azure_credentials
как имя. Это может быть что угодно, если вы используете это значение в файле YAML, описывающего рабочий процесс. Поместите JSON, включая кудрявые кронштейны в текстовый поле Value и нажмите кнопку Сохранить.
Предоставление ресурсов Azure
Теперь, когда рабочий процесс имеет доступ, мы могли бы выполнить некоторые команды Azure CLI, но давайте посмотрим, чего не хватает:
- run: | az group create -n ${{ env.AZURE_GROUP_NAME }} -l eastus az group deployment create -n ghaction -g ${{ env.AZURE_GROUP_NAME }} --template-file deployment/azuredepoy.json --parameters myWebAppName=${{ env.AZURE_WEBAPP_NAME }}
Первая команда создаст группу ресурсов Azure, где будут созданы все ресурсы. Второй развернет веб -сайт, используя шаблон Azure Resource Manager (ARM). -развертывание Template-file/azuredepoy.json
сообщает нам, что шаблон — это файл с именем azuredeploy.json расположен в папке развертывание Анкет Обратите внимание, что имя приложения передается в параметр mywebappname , используя переменную среды.
Шаблон рук — это просто плоский файл, который очень похож на документ JSON. Использование может использовать любой текстовый редактор, мне нравится делать свой с Visual Studio Code и два расширения: Azure Resource Manager фрагменты и Azure Resource Manager (ARM) Инструменты С этими инструментами я могу создать шаблон рук очень эффективно. Для этого шаблона нам нужен сервисный самолет и веб -приложение. Вот как выглядит шаблон.
{ "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", "parameters": { "myWebAppName": { "type": "string", "metadata": { "description": "WebAppName" } } }, "variables": {}, "resources": [ { "name": "[parameters('myWebAppName')]", "type": "Microsoft.Web/sites", "apiVersion": "2016-08-01", "location": "[resourceGroup().location]", "tags": { "[concat('hidden-related:', resourceGroup().id, '/providers/Microsoft.Web/serverfarms/frankdemoplan')]": "Resource", "displayName": "[parameters('myWebAppName')]" }, "dependsOn": [ "[resourceId('Microsoft.Web/serverfarms', 'frankdemoplan')]" ], "properties": { "name": "[parameters('myWebAppName')]", "serverFarmId": "[resourceId('Microsoft.Web/serverfarms', 'frankdemoplan')]" } }, { "name": "frankdemoplan", "type": "Microsoft.Web/serverfarms", "apiVersion": "2018-02-01", "location": "[resourceGroup().location]", "sku": { "name": "F1", "capacity": 1 }, "tags": { "displayName": "frankdemoplan" }, "properties": { "name": "frankdemoplan" } } ], "outputs": {}, "functions": [] }
Этот шаблон прост, он содержит только два необходимых ресурса: план обслуживания и веб -приложение. Чтобы узнать больше о шаблоне рук, вы можете прочитать мой другой Пост Или проверьте это превосходное введение в Документация Анкет
Как только шаблон создан и сохранен в папке.
Развертывание
В файле YAML есть только два последних шага: развертывание и вход. Давайте быстро рассмотрим развертывание.
# deploy web app using Azure credentials - name: 'Azure webapp deploy' uses: azure/webapps-deploy@v1 with: app-name: ${{ env.AZURE_WEBAPP_NAME }} package: './myapp'
Теперь, когда мы уверены, что ресурсы существуют в Azure, мы можем развернуть код. Это будет сделано с Azure/WebApps-Deploy@v1
Это займет пакет, сгенерированный Dotnet в myApp Анкет Поскольку мы уже аутентифицированы, на этом этапе нет необходимости что -либо указывать.
Все готово для развертывания. Вам просто нужно совершить и подтолкнуть (в мастер), и действие GitHub будет вызвано. Вы можете следовать развертыванию, перейдя в Действия вкладка
Через несколько минут веб -сайт должен быть доступен в Azure. Этот пост показывает только очень простую сборку и развертывание, но вы можете сделать так много вещей с этими действиями GitHub, такими как выполнение задач или упаковка контейнера … Я хотел бы знать, как вы их используете. Оставьте комментарий или обратитесь в социальные сети.
Если вы предпочитаете, я также снял видео этого поста:
Оригинал: «https://dev.to/fboucheros/deploy-to-azure-directly-from-the-repository-with-github-actions-2hcj»