当我们使用我们的生产管道执行上传时,我希望能够有条件地上传我们应用程序的assets文件夹。这是因为上载该文件夹的内容所需的时间要长得多,而且很少对其进行任何更改。我已经编写了"CopyFilesOverSSH“任务,如下所示...
# Node.js with Angular
trigger:
- production
pool:
default
steps:
- task: CopyFilesOverSSH@0
inputs:
sshEndpoint: 'offigo-production-server'
sourceFolder: '$(Agent.BuildDirectory)/s/dist/offigo-v2/'
${{ if eq('$(UploadAssets)', 0) }}:
contents: |
!browser/assets/**
${{ if eq('$(UploadAssets)', 1) }}:
contents: |
!browser/assets/static-pages/**
!browser/assets/page-metadata/**
targetFolder: '/var/www/docker/DocumentRoot/offigo/frontend'
readyTimeout: '20000'
continueOnError: true但是,当管道运行时,它会完全忽略规则,只上传assets文件夹的所有内容。我不知道为什么它不能正常工作,如果能帮上忙,我会非常感激的……
发布于 2021-06-29 21:37:28
谢谢Krzysztof Madej,我试着用
${{ if eq(variables['UploadAssets'], 0) }}:但是它仍然没有解决这个问题,变量似乎是未定义的。使用DreadedFrost提供的有关模板的链接,我最终向管道中添加了一个参数,如下所示……
# Node.js with Angular
trigger:
- production
pool:
default
parameters:
- name: uploadAssets # Upload assets folder?; required
type: boolean # data type of the parameter; required
default: true
steps:
- task: CopyFilesOverSSH@0
inputs:
sshEndpoint: 'offigo-production-server'
sourceFolder: '$(Agent.BuildDirectory)/s/dist/offigo-v2/'
${{ if eq(parameters.uploadAssets, false) }}:
contents: |
!browser/assets/**
${{ if eq(parameters.uploadAssets, true) }}:
contents: |
!browser/assets/static-pages/**
!browser/assets/page-metadata/**
targetFolder: '/var/www/docker/DocumentRoot/offigo/frontend'
readyTimeout: '20000'
continueOnError: true这会在我运行管道时添加一个复选框,这样我就可以设置是否上传文件夹。
我怀疑这是最好的方式,但它解决了目前的问题,我将有一个适当的考虑在未来实现模板。
发布于 2021-06-24 18:06:17
如果UploadAssets是变量名,则应使用类似于here的语法
${{ if eq(variables['UploadAssets'], 0) }}:发布于 2021-06-24 21:49:11
在使用YAML Pipeline的情况下,假设您未来的部署步骤也将在部署什么和如何部署方面具有此条件。
Would recommend to create two templates.模板将概述所有步骤,如果步骤被重用,建议将它们模板化,以便只定义一次。
这里的问题是变量是如何声明的。$() is at the macro 级别。要确认下载日志,请单击已完成作业上的省略号:

我猜你会在运行时需要,所以$[variables.UploadAssets]。
或者,当在浏览器中编辑时,也可以单击download full YAML file来查看它,尽管这不会在运行时传入任何变量。
请随时在评论中提出更多问题,因为这些东西从来都不是那么简单。
https://stackoverflow.com/questions/68113498
复制相似问题