3

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

4

3 回答 3

5

如果您只是在同一作业中的任务之间传递,则可以使用工件(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 的文件放入 path unique-id/。有了它,您可以有另一个任务,将唯一 ID 输出作为输入 ( https://concourse-ci.org/running-tasks.html#inputs ) 并使用该唯一 ID 文件。

于 2017-05-03T14:48:40.910 回答
1

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

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

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
于 2017-07-26T16:23:42.910 回答
1

正如 Clara Fu 所指出的,通过输入/输出工件(文件)可以轻松地在作业任务中传递数据。

对于工作之间的情况,当必须传递简单的例如“字符串”数据,并且使用 git 是一种过度杀伤时,“keyval”资源 [1] 似乎是一个很好的解决方案。自述文件描述了数据作为标准属性文件进行存储和管理。

  1. https://github.com/SWCE/keyval-resource
于 2018-02-02T20:29:07.993 回答