Передайте каталог сборки (/ dist) от задания к следующему заданию в сборе - PullRequest
0 голосов
/ 18 февраля 2020

Я знаю, что это не так просто сделать, и я пытался исследовать многие подходы, но либо я не мог понять это правильно, либо не работал для меня.

У меня есть работа в зале, которая выполняется 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

build.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

build. 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 в вышеупомянутой работе.

1 Ответ

0 голосов
/ 26 февраля 2020

Я не совсем уверен, почему вы хотите иметь разные определения планов для каждой задачи, но вот самый простой способ сделать то, что вы хотите сделать:

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

build.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

list-files.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/

Как правило, вы будете передавать папки в качестве входных и выходных данных между заданиями вместо заданий (хотя есть некоторые альтернативы)

Конкурс - это безгражданство, и в этом его суть. Но если вы хотите передать что-то между заданиями, единственный способ сделать это - использовать ресурс для конкурса , и в зависимости от характера проекта это может быть что угодно, от git репо до корзины s3, docker изображение et c. Вы также можете создавать свои собственные пользовательские ресурсы.

Используя что-то вроде s3 concourse resource например

Таким образом, вы можете поместить sh свой артефакт во внешнее хранилище и затем используйте его снова для следующих заданий на шаге get в качестве ресурса. Но это может создать некоторую ненужную сложность, понимая, что то, что вы хотите сделать, довольно просто

По своему опыту я обнаружил, что иногда визуальный аспект плана работы в панели мониторинга зала создает впечатление, что план работы следует по заданию atomi c, что не всегда нужно

Надеюсь, что поможет.

...