gpt4 book ai didi

使用构建工件以编程方式部署 Web 应用程序 zip 包的 Azure Arm 模板

转载 作者:行者123 更新时间:2023-12-03 04:27:29 25 4
gpt4 key购买 nike

简短问题:

我想知道下面的 MSDeploy 资源(部署 azure 应用程序服务)中的 packageUri 参数是否可以指向发布管道使用的 VSTS 构建服务器放置位置的位置。

如何以编程方式获取构建转换位置的访问权限?使用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 部署 Azure 应用服务发布任务(知道如何查找构建工件)进行 Web 应用程序部署,但我想以编程方式从我打算构建的 Web 应用程序中自动部署多个 Web 应用程序。

我想知道这个 .zip Web 应用程序包是否可以以某种方式提供给我的 ARM 部署模板。每个人都建议使用 SAS token 将 .zip 包复制到存储 blob,这样“部署 azure 应用程序服务”版本就可以找到它。我想避免这种复制。实际上,如果我无法按照要求执行此操作,我至少希望以编程方式下载此包并最终将其复制到存储 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 是一个有趣的页面,我可以在其中按显示所有链接源的工件(在我的例子中,我有一个来 self 的 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

查看 fiddler,我设法看到 Assets 下载的 url 是什么:

获取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 身份验证。网址是这样的: 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 包位置被省略)。

即使我无法将此下载网址提供给 MSDeploy arm 资源如果我能够以编程方式下载它并上传到存储 blob 容器并生成 SAS token 以供 MSDeploy 查找它,那就太好了。

那么如何以编程方式获取构建放置位置的访问权限?谢谢拉德

最佳答案

我最近在博客中介绍了如何使用 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/

关于使用构建工件以编程方式部署 Web 应用程序 zip 包的 Azure Arm 模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41398345/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com