Gitlab: использование артефакта, созданного в job1, внутри контейнера, который создается в job2 - PullRequest
0 голосов
/ 05 августа 2020

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

stages:
  - build
  - deploy

job_that_creates:
  image: node:10.19
  stage: build
  script:
    - npm install
    - make
    - make source-package
  cache:
    key: ${CI_COMMIT_REF_SLUG}
    paths:
    - node_modules/
  artifacts:
    when:
    paths:
      - my.tar.bz2
    expire_in: 2 days

job_that_consumes:
  stage: deploy
  script:
    - ls -lah

Вывод команды «ls» показывает мне tar-файл. Но в конечном итоге мне нужно сделать что-то вроде этого в job_that_consumes:

job_that_consumes:
  stage: deploy
  script:
    - ls -lah
  image: custom_image
    - somehow extract the zip to a specific location. 

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

EDIT 1

На данный момент я тестирую копирование tar в том на хосте для runner, а затем оттуда копирование в контейнер. Но причина, по которой мне это не нравится, заключается в том, что я чувствую, что связываю контейнер с хостом… и я должен быть уверен, что создаю бегунов на всех моих хостах точно так же. Есть способ лучше?

1 Ответ

1 голос
/ 05 августа 2020

Когда я правильно понимаю ваш вопрос, вы хотите, чтобы артефакт был в контейнере docker, который вы развертываете на шаге 2?!

Это непросто, потому что задание выполняется в так называемом gitlab -раннер. Бегун не является постоянным, поэтому, когда он заканчивается, все данные теряются. Вот почему у нас есть артефакты.

Теперь о хорошем: Артефакты доступны из-за пределов gitlab в течение 4 недель по умолчанию (вы можете даже иметь артефакты там дольше или короче), это означает, что вы можете добраться до него и загрузить его с любым приложением, которое вам нравится (например, curl).

Вот Документация gitlab к этой функции: https://docs.gitlab.com/ee/ci/pipelines/job_artifacts.html#downloading -the-latest-artifacts

Копирование этого tar, как вы говорите при редактировании, даже не является плохой вещью по замыслу. Я не понимаю, почему это должно быть худшее решение, чем загрузка его с помощью curl позже, это просто более узкое решение, потому что оно работает только ПОКА ваш бегун жив, а метод загрузки работает в течение нескольких недель после этого.

...