2016-12-30 18 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/

相关问题