Рубрики
Uncategorized

Развернуть в Azure непосредственно из репозитория с действиями GitHub

Вы слышите об этих новых действиях GitHub. Или, может быть, вы этого не сделали, но хотели бы добавить непрерывную интеграцию … Tagged с GitHub, DevOps, Azure, Dotnet.

Вы слышите об этих новых действиях 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»