1

我知道这样做并不简单,并尝试探索许多方法,但要么我无法正确理解它,要么对我不起作用。

我有一个运行 angular build (ng build) 并创建 /dist 文件夹的大厅作业。这很好用。

jobs:
  - name: cache
    plan:
      - get: source
        trigger: true
      - get: npm-cache
  - name: build
    plan:
      - get: source
        trigger: true
        passed: [cache]
      - get: npm-cache
        passed: [cache]
      - task: run build
        file: source/ci/build.yml

构建.yml

---
platform: linux
image_resource:
  type: docker-image
  source: { repository: alexsuch/angular-cli, tag: '7.3' }
inputs:
  - name: source
  - name: npm-cache
    path: /cache
outputs:
  - name: artifact
run:
  path: source/ci/build.sh

构建.sh

#!/bin/sh

mv cache/node_modules source

cd source

npm rebuild node-saas # temporary fix

npm run build_prod

cp -R dist ../artifact/

我已经提到输出作为我存储 dist 内容的工件。但是当我试图在下一份工作中使用它时,它不起作用。因缺少输入错误而失败。

这是应该使用此 dist 文件夹的下一个作业:

jobs:
...
...
  - name: list
    plan:
      - get: npm-cache
        passed: [cache, test, build]
        trigger: true
      - task: list-files
        config:
          platform: linux
          image_resource:
            type: registry-image
            source: { repository: busybox }
          inputs:
          - name: artifact
          run:
            path: ls
            args: ['-la', 'artifact/']

谁能帮我解决这个问题。我如何在上述工作中使用 dist 文件夹。

4

1 回答 1

0

我不太确定你为什么要为每个任务有不同的计划定义,但这是做你想做的最简单的方法:

jobs:
  - name: deploying-my-app
    plan:
      - get: source
        trigger: true
        passed: []
      - get: npm-cache
        passed: []
      - task: run build
        file: source/ci/build.yml
      - task: list-files
        file: source/ci/list-files.yml

构建.yml

---
platform: linux
image_resource:
  type: docker-image
  source: { repository: alexsuch/angular-cli, tag: '7.3' }
inputs:
  - name: source
  - name: npm-cache
    path: /cache
outputs:
  - name: artifact
run:
  path: source/ci/build.sh

列表文件.yml

---
platform: linux
image_resource:
  type: registry-image
  source: { repository: busybox }
inputs:
- name: artifact
run:
  path: ls
  args: ['-la', 'artifact/']

构建.sh

#!/bin/sh

mv cache/node_modules source
cd source
npm rebuild node-saas # temporary fix
npm run build_prod
cp -R dist ../artifact/

通常,您会在 TASKS 而不是 JOBS 之间将文件夹作为输入和输出传递(尽管有一些替代方案)

大厅是无国籍的,这就是它背后的想法。但是,如果你想在工作之间传递一些东西,唯一的方法是使用一个大厅资源,并根据项目的性质,可以是从 git repo 到 s3 存储桶、docker 图像等的任何东西。你可以创建你的拥有自定义资源。

例如使用s3 concourse 资源

这样,您可以将工件推送到外部存储,然后在获取步骤的下一个作业中再次将其用作资源。但这可能会造成一些不必要的复杂性,即您想要做的事情非常简单

根据我的经验,我发现有时大厅仪表板中工作计划的视觉方面给人的印象是工作计划应该是任务原子的,这并不总是需要

希望有帮助。

于 2020-02-26T16:49:21.620 回答