Можно ли передавать кеши / артефакты между конвейерами? - PullRequest
0 голосов
/ 26 апреля 2019

В Gitlab возможно ли передавать кеши или артефакты между конвейерами? Я собираю библиотеку в одном конвейере и хочу создать приложение с библиотекой в ​​другом конвейере.

1 Ответ

0 голосов
/ 30 мая 2019

Да, это возможно. Для этого есть несколько вариантов:


Использование Job API и GitLab Premium

Первый вариант - использовать Job API для извлечения артефактов. Этот метод доступен только при наличии GitLab Premium . В этом варианте вы используете CI_JOB_TOKEN в API задания для извлечения артефактов из другого конвейера. Подробнее здесь .

Вот краткий пример работы, которую вы бы поставили в своем приложении Конфигурация конвейера:

build_application:
  image: debian
  stage: build
  script:
  - apt update && apt install -y unzip
  - curl --location --output artifacts.zip "https://gitlab.example.com/api/v4/projects/${PROJECT_ID}/jobs/artifacts/master/download?job=build&job_token=$CI_JOB_TOKEN"
  - unzip artifacts.zip

Использование S3

Второй вариант - использовать стороннее промежуточное хранилище, например, AWS S3. Для передачи артефактов следуйте приведенному ниже примеру.

В вашей библиотеке конвейерной конфигурации создайте следующее задание:

variables:
  TARGET_PROJECT_TOKEN: [get token from Settings -> CI/CD -> Triggers]
  TARGET_PROJECT_ID: [get project id from project main page]

publish-artifact:
  image: "python:latest"
  stage: publish
  before_script:
    - pip install awscli
  script:
    - aws s3 cp output/artifact.zip s3://your-s3-bucket-name/artifact.zip.${CI_JOB_ID}
    - "curl -X POST -F token=${TARGET_PROJECT_TOKEN} -F ref=master -F variables[ARTIFACT_ID]=${CI_JOB_ID} https://gitlab.com/api/v4/projects/${TARGET_PROJECT_ID}/trigger/pipeline"

Затем в вашем приложении конвейерная конфигурация извлекает артефакт из корзины s3:

fetch-artifact-from-s3:
  image: "python:latest"
  stage: prepare
  artifacts:
    paths:
      - artifact/
  before_script:
    - pip install awscli
  script:
    - mkdir artifact
    - aws s3 cp s3://your-s3-bucket-name/artifact.zip.${ARTIFACT_ID} artifact/artifact.zip
  only:
    variables:
      - $ARTIFACT_ID

После выполнения задания fetch-artifact-from-s3 ваш артефакт будет доступен в каталоге artifact/. Теперь его можно использовать для других заданий в приложении конвейере.

...