在大厅作业/任务之间传递参数

Passing parameters between concourse jobs / tasks

在 concourse 任务和作业之间传递参数的最佳方式是什么?例如;如果我的第一个任务生成一个唯一 ID,将该 ID 传递给下一个作业或任务的最佳方式是什么?

如果您只是在同一作业中的任务之间传递,则可以使用工件 (https://concourse-ci.org/running-tasks.html#outputs),如果您在作业之间传递,则可以使用资源(例如将其放入 git或 s3).例如,如果你在任务之间传递,你可以有一个任务文件

---
platform: linux

image_resource: # ...

outputs:
- name: unique-id

run:
  path: project-src/ci/fill-in-output.sh

脚本fill-in-output.sh会将包含唯一ID的文件放入路径unique-id/。这样,您就可以执行另一个任务,将唯一 ID 输出作为输入 (https://concourse-ci.org/running-tasks.html#inputs) 并使用该唯一 ID 文件。

除了任务之外,资源还会自动为您将文件放置在它们的工作目录中。

例如我有一个管道作业如下

jobs:
- name: build
  plan:
    - get: git-some-repo
    - put: push-some-image
      params:
        build: git-some-repo/the-image
    - task: Use-the-image-details
      config:
        platform: linux
        image_resource:
          type: docker-image
          source:
            repository: alpine
        inputs:
          - name: push-some-image
        run:
          path: sh
          args:
          - -exc
          - |
            ls -lrt push-some-image
            cat push-some-image/repository
            cat push-some-image/digest

详情请看push-some-image

的图片推送
+ cat push-some-image/repository
xxxxxxxxx.dkr.ecr.eu-west-1.amazonaws.com/path/image
+ cat push-some-image/digest
sha256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

正如 Clara Fu 指出的那样,可以使用 input/output 工件(文件)轻松完成作业任务中的数据传递。

对于作业之间的情况,当简单时,例如'string' 数据必须被传递,使用 git 是一种矫枉过正,'keyval' 资源 [1] 似乎是一个很好的解决方案。 自述文件描述数据作为标准属性文件存储和管理。

  1. https://github.com/SWCE/keyval-resource