限制 Azure Pipeline 装饰器
Restricting Azure Pipeline decorators
我想限制 azure 管道装饰器注入所有管道。正如我们所知,一旦安装了装饰器,它将应用于组织中的所有项目。我怎样才能将它限制在某些项目中?
我使用 Projects API 并获得了我的项目 ID,然后我将项目 ID 添加到我的 json 模板中作为 targettask
和 targetid
.
"properties": {
"template": "custom-postjob-decorator.yml",
"targetid": "9146bcde-ef7b-492d-8289-b3dce5f750b0"
}
它没有用,我们是否需要在 decorator.yaml
中提供条件以将其限制在组织中的某些项目中?
我还有几个问题。
现在我不想 运行 我在项目 B 上的装饰器,我定义如下
steps:
- ${{ if in(variables['System.TeamProject'], 'ProjectB')) }}:
- task: ADOSecurityScanner@1 --> injected decorator
我运行这个并且它仍在将装饰器注入ProjectB。
正如你所说,我创建了两个场景。
- 如果任务已经存在则跳过,它就像一个魅力,但它没有显示任何关于跳过部分的消息。我们怎么知道装饰器在管道中被跳过了?
steps:
- ${{ if eq(variables['Build.task'], 'ADOSecurityScanner@1') }}:
- task: CmdLine@2
displayName: 'Skipping the injector'
inputs:
script: |
echo "##vso[task.logissue type=error]This Step '$(Build.task)' is not injected. You dont need this in pipeline"
exit 1
- 我已经使用了微软文档中的条件,也与您上面提到的条件相似。
它没有仅使用条件命令跳过注入器,当我在装饰器中添加任务(powershell)时,pipeline.yaml然后它被跳过与两个 yaml 文件上的任务匹配的装饰器。
如果装饰器在管道中被跳过,它是否显示或记录任何信息。
我观察到当装饰器被跳过并向我显示错误陈述时,它确实显示不同。
我们还需要在 pipeline.yaml 文件中定义任何内容吗?
我 运行 你在上面提供的条件下,装饰器仍然以某种方式注入到 projectB 中。你能告诉我哪里做错了吗
下面是我的基本 azure-pipeline.yaml 文件。
trigger:
- main
pool:
vmImage: ubuntu-latest
steps:
- script: echo Hello, world!
displayName: 'Run a one-line script'
- script: |
echo Add other tasks to build, test, and deploy your project.
echo See https://aka.ms/yaml
displayName: 'Run a multi-line script'
请务必阅读这些文档:
最简单的解决方案是向管道装饰器添加条件:
steps:
- ${{ if not(eq(variables['azure-pipelines-tfvc-fixparallel-decorator.skip'], 'true')) }}:
- task: tf-vc-fixparallel-log@2
装饰器可以使用预定义的变量,包括System.TeamProject或System.TeamProjectId:
System.TeamProject The name of the project that contains this build.
System.TeamProjectId The ID of the project that this build belongs to.
例如:
steps:
- ${{ if in(variables['System.TeamProject'], 'ProjectA', 'ProjectB', 'ProjectC')) }}:
- task: tf-vc-fixparallel-log@2
如果您还没有,则需要添加 steps:
。出于某种原因,返回一个空的 steps[]
是可以的,但是返回 nothing 将导致装饰器失败。
当您想排除项目列表时,只需反转条件即可。所以要排除 'ProjectB':
steps:
- ${{ if not(in(variables['System.TeamProject'], 'ProjectB')) }}:
- task: ADOSecurityScanner@1 --> injected decorator
你上面的语句明确地插入到 ProjectB 中,没有其他地方。
关于跳过注射器。当不需要 运行 时,上面的 -${{ if ... }}:
完全删除了下面缩进的步骤。他们根本不会出现。
您也可以在任务本身上加上 condition
,这样它会显示在时间轴中,但会被跳过:
steps:
- task: ADOSecurityScanner@1 --> injected decorator
condition: not(in(variables['System.TeamProject'], 'ProjectB'))
您可以将条件与变量结合起来,将其添加到表达式中:
steps:
- ${{ if not(or(in(variables['System.TeamProject'], 'ProjectB'),
eq(variables['skipInjector'], 'true')) }}:
- task: ADOSecurityScanner@1 --> injected decorator
如您所见,您可以将 and(..., ...)
和 or(..., ...)
这些东西组合在一起,形成您需要的复杂表达式。
您可以在管道作业的顶级日志面板中看到装饰器的评估。您需要展开 Job preparation parameters
部分。并确保在启用诊断的情况下对管道进行排队。
当您在装饰器中对任务使用条件时,展开任务日志以查看条件评估:
查看她发布的屏幕截图,包含两个版本的装饰器,一个有条件,一个没有。确保你 uninstall/disable 那个版本。
我想限制 azure 管道装饰器注入所有管道。正如我们所知,一旦安装了装饰器,它将应用于组织中的所有项目。我怎样才能将它限制在某些项目中?
我使用 Projects API 并获得了我的项目 ID,然后我将项目 ID 添加到我的 json 模板中作为 targettask
和 targetid
.
"properties": {
"template": "custom-postjob-decorator.yml",
"targetid": "9146bcde-ef7b-492d-8289-b3dce5f750b0"
}
它没有用,我们是否需要在 decorator.yaml
中提供条件以将其限制在组织中的某些项目中?
我还有几个问题。
现在我不想 运行 我在项目 B 上的装饰器,我定义如下
steps:
- ${{ if in(variables['System.TeamProject'], 'ProjectB')) }}:
- task: ADOSecurityScanner@1 --> injected decorator
我运行这个并且它仍在将装饰器注入ProjectB。
正如你所说,我创建了两个场景。
- 如果任务已经存在则跳过,它就像一个魅力,但它没有显示任何关于跳过部分的消息。我们怎么知道装饰器在管道中被跳过了?
steps:
- ${{ if eq(variables['Build.task'], 'ADOSecurityScanner@1') }}:
- task: CmdLine@2
displayName: 'Skipping the injector'
inputs:
script: |
echo "##vso[task.logissue type=error]This Step '$(Build.task)' is not injected. You dont need this in pipeline"
exit 1
- 我已经使用了微软文档中的条件,也与您上面提到的条件相似。
它没有仅使用条件命令跳过注入器,当我在装饰器中添加任务(powershell)时,pipeline.yaml然后它被跳过与两个 yaml 文件上的任务匹配的装饰器。
如果装饰器在管道中被跳过,它是否显示或记录任何信息。 我观察到当装饰器被跳过并向我显示错误陈述时,它确实显示不同。
我们还需要在 pipeline.yaml 文件中定义任何内容吗?
我 运行 你在上面提供的条件下,装饰器仍然以某种方式注入到 projectB 中。你能告诉我哪里做错了吗
下面是我的基本 azure-pipeline.yaml 文件。
trigger:
- main
pool:
vmImage: ubuntu-latest
steps:
- script: echo Hello, world!
displayName: 'Run a one-line script'
- script: |
echo Add other tasks to build, test, and deploy your project.
echo See https://aka.ms/yaml
displayName: 'Run a multi-line script'
请务必阅读这些文档:
最简单的解决方案是向管道装饰器添加条件:
steps:
- ${{ if not(eq(variables['azure-pipelines-tfvc-fixparallel-decorator.skip'], 'true')) }}:
- task: tf-vc-fixparallel-log@2
装饰器可以使用预定义的变量,包括System.TeamProject或System.TeamProjectId:
System.TeamProject The name of the project that contains this build.
System.TeamProjectId The ID of the project that this build belongs to.
例如:
steps:
- ${{ if in(variables['System.TeamProject'], 'ProjectA', 'ProjectB', 'ProjectC')) }}:
- task: tf-vc-fixparallel-log@2
如果您还没有,则需要添加 steps:
。出于某种原因,返回一个空的 steps[]
是可以的,但是返回 nothing 将导致装饰器失败。
当您想排除项目列表时,只需反转条件即可。所以要排除 'ProjectB':
steps:
- ${{ if not(in(variables['System.TeamProject'], 'ProjectB')) }}:
- task: ADOSecurityScanner@1 --> injected decorator
你上面的语句明确地插入到 ProjectB 中,没有其他地方。
关于跳过注射器。当不需要 运行 时,上面的 -${{ if ... }}:
完全删除了下面缩进的步骤。他们根本不会出现。
您也可以在任务本身上加上 condition
,这样它会显示在时间轴中,但会被跳过:
steps:
- task: ADOSecurityScanner@1 --> injected decorator
condition: not(in(variables['System.TeamProject'], 'ProjectB'))
您可以将条件与变量结合起来,将其添加到表达式中:
steps:
- ${{ if not(or(in(variables['System.TeamProject'], 'ProjectB'),
eq(variables['skipInjector'], 'true')) }}:
- task: ADOSecurityScanner@1 --> injected decorator
如您所见,您可以将 and(..., ...)
和 or(..., ...)
这些东西组合在一起,形成您需要的复杂表达式。
您可以在管道作业的顶级日志面板中看到装饰器的评估。您需要展开 Job preparation parameters
部分。并确保在启用诊断的情况下对管道进行排队。
当您在装饰器中对任务使用条件时,展开任务日志以查看条件评估:
查看她发布的屏幕截图,包含两个版本的装饰器,一个有条件,一个没有。确保你 uninstall/disable 那个版本。