gpt4 book ai didi

大厅:如何将作业的输出传递给不同的作业

转载 作者:行者123 更新时间:2023-12-04 00:58:05 26 4
gpt4 key购买 nike

我不清楚 the documentation如果甚至可以将一个工作的输出传递给另一个工作(不是从一个任务到另一个任务,而是从一个工作到另一个工作)。

我不知道在概念上我是否在做正确的事情,也许它应该在 Concourse 中以不同的方式建模,但我想要实现的是将 Java 项目的管道拆分为几个细粒度的作业,这些作业可以并行执行, 如果我需要重新运行某些工作,则独立触发。

我如何看待管道:

  • 第一份工作:
  • 从 github repo
  • 拉取代码
  • 使用 maven
  • 构建项目
  • 将工件部署到 maven 存储库 ( mvn deploy )
  • 更新 SNAPSHOT Maven 项目子模块的版本
  • 将工件(jar 文件)复制到输出目录(outputtask )
  • 第二份工作:
  • 拿起jar来自output
  • 为所有容器构建 docker 容器(并行)
  • 管道继续

  • 我无法通过 output从工作 1 到工作 2。
    另外,我很好奇我对原始 git repo 资源所做的任何更改是否会出现在下一个工作中(从工作 1 到工作 2)。

    所以问题是:
  • 将构建状态从作业传递到作业的正确方法是什么(我知道,作业可能会被安排在不同的节点上,并且肯定是在不同的容器中)?
  • 是否有必要将状态存储在资源中(例如 S3/git)?
  • Concourse 在设计上是无状态的吗(在这种情况下)?
  • 获取更多信息的最佳地点在哪里?手册我试过了,不是很详细。

  • 到目前为止我发现了什么:
  • output s 不会在工作之间传递
  • 对资源的任何更改(put 到 github 存储库)都将在下一个作业中获取,但工作副本中的更改不是

  • 最小的例子(如果注释行没有注释错误: missing inputs: gist-upd, gist-out,它会失败):
    ---
    resources:
    - name: gist
    type: git
    source:
    uri: "git@bitbucket.org:snippets/foo/bar.git"
    branch: master
    private_key: {{private_git_key}}

    jobs:
    - name: update
    plan:
    - get: gist
    trigger: true

    - task: update-gist
    config:
    platform: linux
    image_resource:
    type: docker-image
    source: {repository: concourse/bosh-cli}

    inputs:
    - name: gist

    outputs:
    - name: gist-upd
    - name: gist-out

    run:
    path: sh
    args:
    - -exc
    - |
    git config --global user.email "nobody@concourse.ci"
    git config --global user.name "Concourse"
    git clone gist gist-upd
    cd gist-upd
    echo `date` > test
    git commit -am "upd"
    cd ../gist
    echo "foo" > test
    cd ../gist-out
    echo "out" > test

    - put: gist
    params: {repository: gist-upd}

    - name: fetch-updated
    plan:
    - get: gist
    passed: [update]
    trigger: true

    - task: check-gist
    config:
    platform: linux
    image_resource:
    type: docker-image
    source: {repository: alpine}

    inputs:
    - name: gist
    #- name: gist-upd
    #- name: gist-out

    run:
    path: sh
    args:
    - -exc
    - |
    ls -l gist
    cat gist/test
    #ls -l gist-upd
    #cat gist-upd/test
    #ls -l gist-out
    #cat gist-out/test

    最佳答案

    一一回答你的问题。

  • 所有构建状态都需要以 resource 的形式从作业传递到作业。它必须存储在某种外部存储中。
  • 有必要存储在某种外部存储上。每种资源类型都会自行处理此上传和下载,因此对于您的具体情况,我会查看 maven custom resource type ,这似乎做你想做的事。
  • 是的,这种无国籍状态是大厅背后的决定性特征。大厅中唯一的有状态元素是资源,它必须严格控制版本并存储在外部数据存储中。当您将任务的容器化与外部资源存储相结合时,您将获得 concourse 提供的有保证的可重复性。资源的每个版本都将在某种数据存储上进行备份,因此即使运行 ci 的数据中心完全崩溃,您仍然可以对每个 ci 构建进行严格的可重复性。
  • 为了获得更多信息,我建议你做一个教程来弄脏你的手并自己建立一个管道。斯塔克和韦恩有一个tutorial这可能很有用。为了帮助理解资源,还有一个 resources tutorial ,这可能对您特别有帮助。

  • 此外,为了解决您的具体错误,您看到 missing inputs 的原因是因为 concourse 将查找命名每个输入的目录(由资源 gets 创建)。所以你需要 get名为 gist-upd 的资源实例和 gist-out在开始任务之前。

    关于大厅:如何将作业的输出传递给不同的作业,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42634934/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com