Разверните код из репозитория GitLab в веб-приложение Azure, используя PowerShell и интерфейс командной строки Azure. - PullRequest
0 голосов
/ 17 декабря 2018

Я хотел бы настроить непрерывное развертывание из репозитория GitLab в приложение Azure, используя сценарий PowerShell и интерфейс командной строки Azure.Уже есть ответ на этот вопрос с использованием модуля Azure RM и Windows PowerShell , но, поскольку они сейчас устарели , я специально ищу решение, которое использует новый Модуль Az и PowerShelll Core .

В решении должен быть предусмотрен сценарий PowerShell (Core) для настройки непрерывного развертывания непосредственно из GitLab в Azure.Он должен использовать модуль Az .После запуска сценария установки каждое последующее принятие / слияние с репозиторием GitLab должно автоматически развертываться в Azure.Предпочтительно этот сценарий PowerShell должен работать как для публичных, так и для частных репозиториев, размещенных на GitLab, но я готов принять решения, которые работают только в общедоступных репозиториях.

Ответы [ 2 ]

0 голосов
/ 19 декабря 2018

Я играл с остальными API gitlab и kudu и выяснил, как автоматизировать ручное решение , которое вы упомянули.Единственным дополнительным шагом является добавление gitlab api токена в ваш код, но вы просто делаете это один раз для всех проектов.Вы можете получить его в настройках учетной записи gitlab в разделе «Токены доступа».Некоторые другие примечания:

Для взаимодействия с kudu api скрипт использует автоматически созданные учетные данные для развертывания.Но вы можете создать отдельного пользователя для развертывания и использовать его во всех других проектах (пропуская этот шаг).Это можно сделать в Azure CLI:

az webapp deployment user set --user-name someUser --password somepassword

GitLab API использует идентификатор проекта, а не имя проекта.Сценарий пытается автоматически извлечь идентификатор проекта из URL-адреса репозитория, но вы можете скопировать / вставить его из общей настройки проекта на gitlab, чтобы быть безопасным.

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

Вот скрипт:

function log {param($memo); Write-Host "[$((get-date).ToString("HH:mm:ss"))]: $memo" -ForegroundColor Green}

# =============== App and GitLab settings ==============


$webapp="geekscodeStackOverflow"
$resgroup = $webapp + "Group"
$plan = $webapp + "Plan"
$location="centralus"

$gitToken = "yourGitLabTokenHere"  
$repoUrl = "https://gitlab.com/MagicAndi/geekscode.net"
# $projID =  "99..."



# ============== DEPLOYMENT SCRIPT ==========================#

log "Setting up the app on azure"

New-AzResourceGroup -Name $resgroup -Location $location
New-AzAppServicePlan -Name $plan -Location $location -ResourceGroupName $resgroup -Tier Free
New-AzWebApp -Name $webapp -Location $location -AppServicePlan $plan -ResourceGroupName $resgroup

$appInfo = Get-AzWebApp -Name $webapp
$appRef = @{Name=$appInfo.Name; ResourceGroupName = $appInfo.ResourceGroup}
if(!$appInfo){Write-Host "app deployment failed" -ForegroundColor Red; return} else {Write-Host "App created:" -ForegroundColor Green}


# ================= linking web app to gitlab ========================= 
# you can do this manually: app dashboard / Deployment Centrer / External / App Service Kudu / git

log "setting up deployment "

$deployment = @{
  PropertyObject = @{ repoUrl = $repoUrl; branch = "master"; isMercurial= $false; isManualIntegration = $true }
  ResourceGroupName = $appInfo.ResourceGroup
  ResourceType = "Microsoft.Web/sites/sourcecontrols"
  ResourceName = $appInfo.Name + "/web"
  ApiVersion = "2018-02-01"
}

# you'll get error on this step for private repos because the key is not set up yet. You can ignore that error
Set-AzResource @deployment -Force

log "Extracting Deployment credentials"
# you can also create a user credentials in AZ CLI and skip this or manually get it in App's deployment center
$prof = Get-AzWebAppPublishingProfile @appRef | Select-Xml -XPath "//*[@publishMethod='MSDeploy']"
$deployCreds = $prof.node.userName + ":" + $prof.node.userPWD


log "Extracting Deployment key"
# Can skip for public repors
$keyUrl = "https://$webapp.scm.azurewebsites.net/api/sshkey?ensurePublicKey=1"
$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes($deployCreds))
$head = @{Authorization=("Basic {0}" -f $base64AuthInfo)}
$deployKey =  Invoke-RestMethod -Uri $keyUrl -Headers $head -Method Get


#============== Setting Up GIT LAB ================ #

$gitApi = "https://gitlab.com/api/v4"
$gitHead = @{'PRIVATE-TOKEN'= $gitToken; 'Content-Type'='application/json'} 

# looking up project id by user/repo name. You can skip that and get the id from project general setting on GitLab
$repo = $repoUrl.Split("/")[-2,-1] -join "%2F"
$project = Invoke-RestMethod -Uri "$gitApi/projects/$repo" -Headers $head
$projID = $project.id
log "Setting up $repoUrl (project id $projID)"

# --- Adding deploy key to GitLab project (public repos can skip) ---
# You can copy the key manually - Go to Project / Settings / Repository / Deploy Keys
log "Adding deploy keys to GitLab project"
$keyBody = @{title="Azure_Key";key=$deployKey; can_push=$true} | ConvertTo-Json
Invoke-RestMethod "$gitApi/projects/$projID/deploy_keys/" -Headers $gitHead -Body $keyBody -Method Post

log "Setting up a webhook"
# this can be set manualy - go to Project / Settings / Integrations.
$whBody = @{url = "https://$deployCreds@$webapp.scm.azurewebsites.net/deploy"} | ConvertTo-Json
Invoke-RestMethod -Uri "$gitApi/projects/$projID/hooks/" -Headers $gitHead -Body $whBody -Method Post

log "deployment completed `ncheck out your app at https://$webapp.azurewebsites.net"
0 голосов
/ 18 декабря 2018

Попробуйте команду ниже для Az, мой репозиторий общедоступен, он отлично работает на моей стороне.

$gitrepo="your git repository url"
$webappname="joyazapp"
$location="centralus"

New-AzResourceGroup -Name joyazgroup -Location $location

New-AzAppServicePlan -Name joyazplan -Location $location -ResourceGroupName joyazgroup -Tier Free

New-AzWebApp -Name joyazapp -Location $location -AppServicePlan joyazplan -ResourceGroupName joyazgroup

$PropertiesObject = @{
    repoUrl = "$gitrepo";
    branch = "master";
    isManualIntegration = $false
}

Set-AzResource -PropertyObject $PropertiesObject -ResourceGroupName joyazgroup -ResourceType Microsoft.Web/sites/sourcecontrols -ResourceName $webappname/web -ApiVersion 2018-02-01 -Force
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...