简短问题:
我想知道下面的MSDeploy资源(部署azure应用服务)中的packageUri参数是否可以指向Release管道使用的VSTS构建服务器放置位置的位置。
如何以编程方式获取构建放置位置的权限? 使用vsts api?哪个? 也许这个链接可以解释一下:
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部署Azure App Service发布任务(知道如何查找构建工件)来进行Web应用程序部署,但我希望从我打算构建的Web应用程序中以编程方式自动部署多个Web应用程序。
我想知道这个.zip网络应用包是否可以以某种方式提供给我的ARM部署模板。每个人都建议使用SAS令牌将.zip包复制到存储blob,然后释放"部署azure app service"可以找到它。 我想避免这种复制。实际上我想至少以编程方式下载这个软件包,并最终将其复制到存储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是一个有趣的页面,我可以按下Artifacts显示所有链接的源(在我的情况下,我有一个来自我的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
看着小提琴手,我设法看到资产下载的网址是什么:
所以我可以根据[BUILD_BUILDID]看到 - > [85]和[SYSTEM_TEAMPROJECTID] - > [7ab6c2a4-208d-411d-81e5-5e88b26f2252]我可以汇编这个URL。 唯一的问题是如何验证此请求。当我输入上述地址时,我被提示使用Microsoft帐户登录,我看到它是oauth 2.0身份验证。网址是这样的: 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资源 如果我能以编程方式下载它并上传到Storage blob容器并为MSDeploy生成SAS令牌以找到它,那就太棒了。
那么如何以编程方式获取构建丢弃位置的权限? 谢谢 弧度
答案 0 :(得分: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/