我有正常且工作的发布管道,通过给定的某个部署组,该管道执行一些任务:
- 复制脚本
- 执行该 powershell 脚本(在部署组中定义的目标计算机上)
- 删除脚本
我知道 YAML 不支持部署组,但是(幸运的是我!)到目前为止我的部署组只有一台机器,我们称之为MyTestVM .
所以我想要实现的主要目标是简单地在该 vm 上执行 powershell 脚本。通常,发布管道会发生的情况是,您在虚拟机上安装了触手/发布代理,您的部署目标(位于部署组内)连接到该目标,并且您的发布管道(感谢部署组)规范)能够在机器上使用该释放代理并在虚拟机本身上执行它想要的任何操作。
我需要相同的...但是通过 YAML !我知道有PowerShellOnTargetMachines命令在 YAML 中可用,但我不想使用它。它使用 PSSession,需要 SSL 证书和许多其他东西。我只想使用虚拟机上已有的代理!
到目前为止我已经采取的措施:
pool: 'Private Pool'
steps:
- task: DownloadPipelineArtifact@2
inputs:
buildType: 'specific'
project: 'blahblah'
definition: 'blah'
buildVersionToDownload: 'latest'
targetPath: '$(Pipeline.Workspace)'
- task: CopyFiles@2
displayName: 'Copy Files to: C:\TestScript'
inputs:
SourceFolder: '$(Pipeline.Workspace)/Scripts/'
Contents: '**/*.ps1'
TargetFolder: 'C:\TestScript'
CleanTargetFolder: true
OverWrite: true
第一部分只是下载包含我的脚本的工件。然后说实话,我什至不确定我是否需要复制第二部分中的脚本..首先,因为我不认为它将脚本复制到VM目标工作区,而是将其复制到VM所在的VM Azure 管道代理已安装。第二:我想我可以从我的工件中引用它..但这不是重要的部分。
如何让我的 YAML 管道像正常发布管道一样使用虚拟机上安装的发布代理?
以某种方式达成了解决方案。首先值得一提的是,由于部署组不能使用 YAML 管道,因此继续的方法是创建一个环境并将您的目标虚拟机添加为资源。
因此,我不需要创建自己的托管代理或任何特殊的东西,因为问题是目标本身,而不是运行管道的代理。
通过创建环境并向该环境添加资源(在我的例子中是虚拟机),我们还在目标本身上创建了一个新的发布代理。因此,我的目标 VM 现在将有 2 个发布代理:旧的发布代理可供普通发布管道使用,新的发布代理附加到 Azure Devops 上的环境资源,可供 YAML 管道使用。
现在我终于可以访问我的虚拟机了:
- stage: PerformScriptInVM
jobs:
- deployment: VMDeploy
pool:
vmImage: 'windows-latest'
# watch out: this creates an environment if it doesn’t exist
environment:
name: My Environment Name
resourceType: VirtualMachine
strategy:
runOnce:
deploy:
steps:
- task: DownloadPipelineArtifact@2
inputs:
buildType: 'specific'
project: 'blahblahblah'
definition: 'blah'
buildVersionToDownload: 'latest'
targetPath: '$(Pipeline.Workspace)'
- task: PowerShell@2
displayName: 'PowerShell Script'
inputs:
targetType: filePath
filePath: '$(Pipeline.Workspace)/Scripts/TestScript.ps1'
arguments: 'whatever your script needs..'
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)