2016-12-30 17 views
0

短的問題:一個Web應用程序壓縮包的Azure的手臂模板部署編程方式使用打造神器

我在想,如果在MSDeploy資源(部署蔚藍的應用服務)以下packageUri參數可以指向VSTS打造的位置釋放管道使用的服務器放置位置。

如何以編程方式獲得acccess構建放置位置? 要使用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')]" 
 
     } 
 
    } 
 
    } 
 
]

較長的問題,並解釋: 我正在使用VSTS發佈定義在開發期間部署我的Web應用程序基礎結構。 Web應用程序將由我的VSTS構建版本打包並上傳到服務器放置位置。我正在使用本地(我的PC)代理進行構建和發佈管道。

儘管我可以使用vsts進行web應用部署部署Azure應用服務發佈任務(知道如何查找構建工件),但我想從我打算構建的Web應用程序以編程方式自動部署多個Web應用。

我想知道這個.zip web應用程序包是否可以以某種方式提供給我的ARM部署模板。每個人都建議將.zip軟件包複製到帶有SAS令牌的存儲塊,並且這種方式發佈「部署天藍色應用服務」可以找到它。 我想避免這種複製。其實我至少要以編程方式下載此軟件包,並最終將其複製到存儲blob容器中,如果我無法按照要求進行操作。

這是我的一點研究,我做的事:

我打開代理日誌記錄都構建和發佈

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模板編程。我想創建一個Web應用程序或Api應用程序,它可以通過編程方式發現此.zip軟件包,並使用它來使用「Web Deploy for Web Apps」資源部署應用程序。

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 etc ...(一些加密的字符串 - 可能代表.zip包的位置被省略)。

即使我無法將此下載URL提供給MSDeploy arm資源 如果我可以通過編程方式下載並上載到存儲blob容器併爲MSDeploy生成SAS令牌來找到它,那將是非常好的。

那麼如何以編程方式獲得acccess構建放置位置? 謝謝 Rad

+0

敢肯定你只需要使用「身份驗證」頭 – 4c74356b41

+0

這應該是一個非交互式的用戶提供令牌的承載。正如我上面所說,我需要知道如何檢索Web應用程序或Web作業背後的最新或特定工件.zip軟件包,並使用模板和參數開始部署PaaS基礎架構作爲代碼和MS部署,如下所示:ResourceManagementClient client = new ResourceManagementClient(新的TokenCloudCredentials(subscriptionId,token);); client.Deployments.CreateOrUpdate(resourceGroup,correlationId.ToString(),新的DeploymentProperties(模式,模板,參數等));有什麼方法可以爲VSTS Build API使用Persona Access令牌之類的東西。 – Rad

+0

我剛剛發現瞭如何獲取令牌,但在我發現下面的代碼的示例中,他們創建了新令牌令牌,而我需要TokenCloudCredentials實例。我不知道兩者有什麼區別。 var cc = new ClientCredential(「{client-id}」,「{client-secret}」); var context = new AuthenticationContext(「https://login.windows.net/{tenant-id}」); var token = await context.AcquireTokenAsync(「https://management.azure.com/」,cc);假設我找到了一種方法來與服務中的vsts api進行交互,如何獲得來自某個版本的.zip神器 – Rad

回答

0

我最近在博客中介紹如何使用PowerShell對構建進行排隊並使用TFS API來拖動構件。對我們很好。

$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/

相關問題