Разверните код из репозитория GitLab в Azure Web App с помощью PowerShell

Я хотел бы настроить непрерывное развертывание из репозитория GitLab в приложение Azure с помощью сценария PowerShell. Я знаю, что вы можете сделать это вручную согласно:

https://christianliebel.com/2016/05/auto-deploying-to-azure-app-services-from-gitlab/

Тем не менее, я пытаюсь автоматизировать это с помощью Powershell. Я посмотрел на этот пример сценария для GitHub:

https://docs.microsoft.com/en-us/azure/app-service/scripts/app-service-powershell-continuous-deployment-github

Но поскольку у GitLab нет провайдера, и ни один из существующих провайдеров не принимает URL GitLab, я не уверен, что делать дальше. Я рассмотрел настройку ручного развертывания с помощью GitLab на портале Azure (с использованием параметра "Внешний репозиторий") и экспорта шаблона группы ресурсов, чтобы получить подробную информацию о том, как репозиторий подключен к приложению, но я получаю сообщение об ошибке:

Could not get resources of the type 'Microsoft.Web/sites/sourcecontrols'. 
Resources of this type will not be exported. (Code: ExportTemplateProviderError, Target: Microsoft.Web/sites/sourcecontrols)

В настоящее время я работаю над этим, отражая свой репозиторий GitLab в GitHub, и использую конвейер непрерывного развертывания оттуда в Azure. Обратите внимание, что это для репозитория, размещенного на GitLab.com, а не на собственном сервере GitLab. Для проекта не существует настройки Windows Runner.

Как я могу использовать сценарий PowerShell для настройки непрерывного развертывания непосредственно из GitLab в Azure? После запуска сценария установки каждое последующее принятие/слияние с репозиторием GitLab должно автоматически развертываться в Azure. Предпочтительно, чтобы в этом сценарии PowerShell использовались модули AzureRM, но я готов принять решение, в котором используется PowerShell Core и новый модуль Az (на основе интерфейса командной строки Azure). Конкретный тестовый репозиторий, который я использую, является общедоступным (https://gitlab.com/MagicAndi/geekscode.net), но это не является специфическим требованием для решения для работы с частными репозиториями (но если это так, даже лучше !).

Обновление 17/12/2018

Я наградил Баунти к самой рыбы, как его ответ лучше всего отвечает моим потребностям. Тем не менее, учитывая, что Windows Powershell и модуль Azure RM устарели в пользу PowerShell Core и нового модуля Az (с помощью интерфейса командной строки Azure), я создал новый вопрос, специально запрашивая канонический ответ с использованием Azure CLI и Powershell. ядро. Я планирую предложить вознаграждение за этот вопрос, когда он будет открыт для меня через 2 дня. Благодарю.

Ответ 1

Предполагая, что хранилище является публичным, вы можете использовать следующее:

$gitrepo="<replace-with-URL-of-your-own-repo>"
$webappname="mywebapp$(Get-Random)"
$location="West Europe"

# Create a resource group.
New-AzureRmResourceGroup -Name myResourceGroup -Location $location

# Create an App Service plan in Free tier.
New-AzureRmAppServicePlan -Name $webappname -Location $location '
    -ResourceGroupName myResourceGroup -Tier Free

# Create a web app.
New-AzureRmWebApp -Name $webappname -Location $location -AppServicePlan $webappname '
    -ResourceGroupName myResourceGroup

# Configure deployment from your repo and deploy once.
$PropertiesObject = @{
    repoUrl = "$gitrepo";
    branch = "master";
    isManualIntegration = $true
}
Set-AzureRmResource -PropertyObject $PropertiesObject -ResourceGroupName myResourceGroup '
    -ResourceType Microsoft.Web/sites/sourcecontrols -ResourceName $webappname/web '
    -ApiVersion 2018-02-01 -Force

Дайте мне знать, если это личное, это может быть сложнее. Если вы посмотрите на источник CLI, то увидите, что в настоящее время они поддерживают только токены доступа с GitHub.

https://github.com/Azure/azure-cli/blob/4f87cb0d322c60ecc6449022467bd580a0accd57/src/command_modules/azure-cli-appservice/azure/cli/command_modules/appservice/custom.py#L964-L1027

Ответ 2

Похоже, вы ищете прямое развертывание от GitLab до Azure Apps, однако я бы предложил использовать инструмент конвейера развертывания, чтобы предоставить вам гораздо больше возможностей.

Azure DevOps Services Pipelines, вероятно, будет безопасным вариантом и имеет бесплатный уровень, а здесь очень краткое руководство по началу работы для развертывания Web Apps.

Однако он не поддерживает поддержку GitLab, но, похоже, это инструмент для интеграции с GitLab.

У этого, похоже, нет возможности запуска триггеров, но может быть запущено вручную. У кого-то еще есть вопрос о триггерах выпуска на рынке Q & A, поэтому, возможно, это будет в дорожной карте.

Ответ 3

Пытаясь воспроизвести вашу ситуацию, я использовал интерфейс Azure CLI:

https://docs.microsoft.com/en-us/cli/azure/?view=azure-cli-latest

Который готов к использованию в скрипте в PowerShell, как вы хотите.

Во-первых, я попытался получить всю информацию о текущем развертывании в репозитории Bitbucket, который был настроен как Microsoft.Web/sites/sourcecontrols/Bitbucket:

az webapp deployment source show --name XXXXXXX --resource-group YYYYY

И получил ответ:

{
  "branch": "master",
  "deploymentRollbackEnabled": false,
  "id": "/subscriptions/00000/resourceGroups/YYYYY/providers/Microsoft.Web/sites/XXXXXXX/sourcecontrols/web",
  "isManualIntegration": false,
  "isMercurial": false,
  "kind": null,
  "location": "North Europe",
  "name": "XXXXXXX",
  "repoUrl": "https://bitbucket.org/myAccount/myRepo",
  "resourceGroup": "YYYYY",
  "type": "Microsoft.Web/sites/sourcecontrols"
}

Я отключил его и настроил его вручную, указав внешний репозиторий точно так же, как в вашей ссылке, определяя репозиторий SAME Git и ветвь, и в конце я получил почти такой же результат:

{
  "branch": "master",
  "deploymentRollbackEnabled": false,
  "id": "/subscriptions/00000/resourceGroups/YYYYY/providers/Microsoft.Web/sites/XXXXXXX/sourcecontrols/web",
  "isManualIntegration": true,
  "isMercurial": false,
  "kind": null,
  "location": "North Europe",
  "name": "XXXXXXX",
  "repoUrl": "https://bitbucket.org/myAccount/myRepo",
  "resourceGroup": "YYYYY",
  "tags": {
    "hidden-related:/subscriptions/00000/resourcegroups/YYYYY/providers/Microsoft.Web/serverfarms/XXXXXXX-sp": "empty"
  },
  "type": "Microsoft.Web/sites/sourcecontrols"
}

Вы можете видеть различия:

  • isManualIntegration теперь True, вместо False
  • скрытый тег, но я не уверен, что это интересно здесь

Все, что можно сказать, вы можете легко писать, используя официальный Azure Cli, определение развертывания следующим образом:

az webapp deployment source config --manual-integration --repository-type git --repo-url https://bitbucket.org/myAccount/myRepo --branch master --name XXXXXXX --resource-group YYYYY

Редактировать 15/11/2018:

Как только эта установка развертывания сделана, каждый новый коммит нажимает на рассматриваемую ветку (например, мастер в предыдущих выборках) автоматически инициирует новое развертывание.

Следует отметить, что иногда для запуска развертывания требуется несколько минут.

В конце концов, если вы когда-либо захотите автоматически выполнить что-либо (команда Powershell, сценарий GNU/Bash,.py,.bat или что-то еще), вы можете создать файл .deployment в корне вашего репозитория.

Например:

[config]
SCM_COMMAND_IDLE_TIMEOUT = 9000
command = bash.exe build_my_project_on_azure.sh

Вы можете получить дополнительную информацию в официальной документации.

Ответ 4

Я попробовал варианты, упомянутые выше, так или иначе это не работает для меня. Я использую внешний URL-адрес git (из своего проекта AzureDevops я создал одно git-репо и добавил содержимое для развертывания в приложении api) через предоставленную вами PowerShell, он завершается с ошибкой "запрос не выполнен с кодом состояния 401". Можете ли вы помочь мне решить эту проблему?