有没有一种方法可以在Azure Pipeline中提取Bash脚本的输出?

3

我有许多包含不同变量的bash脚本,这些脚本被管道传输到各种脚本中。

我一直在想是否可以提取由Azure Pipeline激活的bash脚本的输出,以便作为整个Pipeline运行时的管道变量?

示例:foo=$(date + %Y%m%d_%H%M%S) 输出:20200219_143400,我想在之后的管道中获取输出结果。


变量"$foo"现在具有date命令的值/输出。你想要什么? - Jetchisel
@IvanIgnatiev 我已经这样做了,但是我没有完全理解它,因为我的变量是在bash任务内声明的,而我需要在管道中稍后使用它。 - Dor Shamay
@Jetchisel 我想要将$foo变量的输出用作另一个bash任务的输出变量,但我找不到如何实现。 - Dor Shamay
2
@DorShamay 在你的示例中,你需要在 Job1 的 OutputsStep 中的某个地方启动:echo "##vso[task.setvariable variable=foo;isOutput=true]$foo",并且在另一个任务中使用它,你需要将它传递给 Job2 脚本的参数:./myscript.sh $[ dependencies.Job1.outputs['OutputsStep.foo'] ] - Ivan Ignatiev
@IvanIgnatiev,能否请你把你的评论转成答案呢?我会尝试这个方法并更新。 - Dor Shamay
1个回答

8

根据您设计管道的方式,您可以使用Azure管道变量:

  1. 在同一个作业内部:
- job: Job1
  steps:
  - bash: |
      $WORKDIR/foo.sh
      echo "##vso[task.setvariable variable=foo]$foo"
    name: FooStep
  - bash: |
      $WORKDIR/nextscript.sh $(FooStep.foo)
    name: NextScript

# ...
  1. 不同的工作:
- job: Job1
  steps:
  - bash: |
      $WORKDIR/foo.sh
      echo "##vso[task.setvariable variable=foo;isOutput=true]$foo"
    name: FooStep
- job: Job2
  dependsOn: Job1
  steps:
  - bash: |
      $WORKDIR/job2script.sh $[ dependencies.Job1.outputs['FooStep.foo'] ]
    name: Job2ScriptStep

# ...

因此,您需要使用##vso[task.setvariable]将需要保存到输出的所有变量“打印到管道控制台”,然后将它们作为脚本参数值传递。


谢谢您的回答,我会检查这种方法并更新。 - Dor Shamay
要使这个工作,foo.sh 的全部内容应该是什么样子?我一直得到空字符串。 - robertwbradford
@robertwbradford 对于这个问题,在 foo.sh 中,我们正在等待类似上面示例的东西:foo=$(date + %Y%m%d_%H%M%S) - Ivan Ignatiev
很遗憾,对我来说,在bash中使用上述方法会导致一些解析错误:`stageDependencies.ShouldPublishBook.outputs['ShouldPublishBook_Check.findTitle.result']语法错误:无效的算术运算符(错误标记为“.ShouldPublishBook.outputs['ShouldPublishBook_Check.findTitle.result']”)` - Léon Pelletier

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接