Да, это возможно. Для этого есть несколько вариантов:
Использование 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/
. Теперь его можно использовать для других заданий в приложении конвейере.