2016-12-30 22 views
0

Короткого вопрос:Azure Arm развертывание шаблона из приложения почтового пакета веб программно с помощью построить артефакт

мне было интересно, если параметр packageUri в MSDeploy ресурсе (Развертывание лазурной службы приложения) ниже может указывать на расположение VSTS строить Место выгрузки сервера, которое используется конвейером Release.

Как программно получить доступ к построению местоположения перетаскивания? Чтобы использовать vsts api? Какие? Может быть, эта ссылка может пролить некоторый свет:

understanding artifacts

grab-your-build-artifacts-from-visual-studio-online

Basic authentication for the REST APIs

"resources": [ 
 
    { 
 
    "name": "MSDeploy", 
 
    "type": "extensions", 
 
    "location": "[parameters('location')]", 
 
    "apiVersion": "2014-06-01", 
 
    "dependsOn": [ 
 
     "[concat('Microsoft.Web/sites/', parameters('siteName'))]" 
 
    ], 
 
    "tags": { 
 
     "displayName": "ContentDeploy" 
 
    }, 
 
    "properties": { 
 
     "packageUri": "[concat(parameters('packageUrl'), parameters('sasToken'))]", 
 
     "dbType": "None", 
 
     "connectionString": "", 
 
     "setParameters": { 
 
      "IIS Web Application Name": "[parameters('siteName')]" 
 
     } 
 
    } 
 
    } 
 
]

Longer вопрос и объяснение: Я использую определение выпуска VSTS для развертывания инфраструктуры веб-приложений во время разработки. Веб-приложение будет построено и упаковано с помощью моей сборки VSTS и загружено на серверную папку. Я использую агент на месте (мой компьютер) для моего конвейера сборки и выпуска.

Хотя я могу выполнять развертывание веб-приложений с помощью vsts. Развертывание задачи выпуска Azure App Service (которая знает, как найти артефакты сборки), я хочу сделать автоматическое развертывание нескольких веб-приложений программным путем из веб-приложения, которое я собираюсь построить.

Я хочу знать, может ли этот пакет .zip веб-приложений каким-то образом быть доступен для моего шаблона развертывания ARM. Все рекомендуют копировать пакет .zip в блок памяти с маркером SAS, и таким образом релиз «Deploy azure app service» может найти его. Я хочу избежать этого копирования. На самом деле я хочу, по крайней мере, программно загрузить этот пакет и, в конечном итоге, скопировать его в контейнер контейнера памяти, если я не смогу это сделать, как было задано.

Вот мое небольшое исследование, я сделал:

Я включил протоколирования агента как для сборки и выпуска

Some Build variables: 
 
BUILD_SOURCESDIRECTORY=F:\agent\_work\1\s 
 
BUILD_STAGINGDIRECTORY=F:\agent\_work\1\a 
 

 

 
Some release variables: 
 
[SYSTEM_ARTIFACTSDIRECTORY] --> [F:\agent\_work\r3\a] 
 
[RELEASE_ARTIFACTS_ECOMMERCESITECI_SOURCEVERSION] --> [91] 
 
[BUILD_BUILDNUMBER] --> [20161230.12] 
 
[BUILD_BUILDID] --> [85] 
 
[SYSTEM_TEAMPROJECTID] --> [7ab6c2a4-208d-411d-81e5-5e88b26f2252] 
 
[RELEASE_RELEASEWEBURL] --> [https://vstsaccount.visualstudio.com/7ab6c2a4-208d-411d-81e5-5e88b26f2252/_apps/hub/ms.vss-releaseManagement-web.hub-explorer?releaseId=103&_a=release-summary]

RELEASE_RELEASEWEBURL интересная страница, где я могу нажать Артефакты, которые показать все связанные источники (в моем случае у меня есть один первичный источник, исходящий из моей сборки CI). Затем я могу перейти по ссылке и получить конкретную сборку EcommerceSiteCI/Build 20161230.12, и я могу нажать кнопку загрузки (по ссылке ниже), чтобы загрузить пакет .zip, который я получаю после. Я хотел бы узнать об этом, но программно из моего шаблона Arm. Я хотел бы создать веб-приложение или приложение Api, которое может программно обнаружить этот .zip-пакет и использовать его для развертывания приложения, используя ресурс «Веб-развертывание для веб-приложений».

https://vstsaccount.visualstudio.com/vstsproject/_build/index?buildId=85&_a=summary&tab=artifacts

Глядя на стельку мне удалось увидеть, что это адрес загрузки активов:

GET https://vstsaccount.visualstudio.com/7ab6c2a4-208d-411d-81e5-5e88b26f2252/_apis/build/builds/85/artifacts?artifactName=drop&%24format=zip

Так что я могу смотреть на основе [BUILD_BUILDID] -> [85] и [SYSTEM_TEAMPROJECTID] -> [7ab6c2a4-208d-411d-81e5-5e88b26f2252] Я могу собрать этот URL. Единственное, что нужно для аутентификации этого запроса. Когда я ввел адрес выше, мне было предложено войти в систему, используя учетную запись Microsoft, и я увидел, что это аутентификация oauth 2.0. URL-адрес выглядит примерно так: https://login.live.com/oauth20_authorize.srf?response_type=code&client_id=51483342-012c-4d86-bf138-cf50c7252078&scope=openid+profile+email+offline_access&response_mode=form_pos и т. Д. (Некоторая зашифрованная строка, возможно, представляет собой расположение пакета .zip, опущена).

Даже если я не могу сделать этот URL-адрес загрузки доступным для ресурса MSDeploy , было бы здорово, если бы я мог программно загрузить его и загрузить в контейнер с блоком хранения и сгенерировать токен SAS для MSDeploy, чтобы его найти.

Итак, как программно получить доступ к построению места падения? Спасибо Рад

+0

уверен, что вам просто необходимо предоставить предъявитель маркеров с помощью «Authentication» заголовка – 4c74356b41

+0

Это должна быть не интерактивным пользователем. Как я уже сказал выше, мне нужно знать, как получить последний или конкретный пакет .zip артефакта за веб-приложением или веб-заданием и начать развертывание инфраструктуры PaaS в качестве кода и развертывания MS с использованием шаблона и параметра, например: ResourceManagementClient client = new ResourceManagementClient (новые TokenCloudCredentials (подписка, токен);); client.Deployments.CreateOrUpdate (resourceGroup, correId.ToString(), new DeploymentProperties (режим, шаблон, параметры ... и т. Д.)); Есть ли способ использовать что-то вроде Persona Access Token для VSTS Build API. – Rad

+0

Я только узнал, как получить токен, но в примере, где я нашел код ниже, они создают новые TokenCredentials из этого токена, в то время как мне нужен экземпляр TokenCloudCredentials. Я не знаю, в чем разница между ними. var cc = new ClientCredential ("{client-id}", "{client-secret}"); var context = new AuthenticationContext ("https://login.windows.net/{tenant-id}"); var token = ожидание context.AcquireTokenAsync ("https://management.azure.com/", cc); Скажем, я нашел способ взаимодействия с vsts api из службы, как получить .zip-артефакт, исходящий из определенной сборки. – Rad

ответ

0

Недавно я написал о том, как использовать PowerShell для очереди сборки и вытаскивания артефактов с использованием API TFS. Отлично работает для нас.

$artifacts = Invoke-RestMethod -Method Get -Credential $creds -ContentType application/json -Uri "$TFSUri/$project/_apis/build/builds/$buildId/artifacts?api-version=2.0" 
foreach($artifact in $artifacts.value) 
{ 
    $filePath = $artifact.resource.downloadUrl.Replace("file:", "").Replace("/", "\").Replace("%20", " ");   
    $path = $filePath + "\*Package\*" 
    if (Test-Path $path) 
    {   
     $packagePath = "MSDeployPackages\$project-$buildName\"; 
     if ((Test-Path $packagePath) -eq $false) { 
      New-Item $packagePath -ItemType directory 
     } 
     Copy-Item -Path $path -Destination $packagePath -Recurse -Force 
    } 
} 

http://www.dotnetcatch.com/2016/10/14/queue-tfsvsts-builds-via-powershell/