Как установить переменные gitlab-ci динамически? - PullRequest
1 голос
/ 18 апреля 2020

Как установить gitlab-ci varibales с помощью скрипта, а не только в разделе «varibales» в .gitlab-ci.yaml? Так, чтобы я мог устанавливать переменные в одном задании и использовать в другом задании

Ответы [ 2 ]

0 голосов
/ 18 апреля 2020

В настоящее время в GitLab нет способа передавать переменные среды между этапами или заданиями.

Но есть запрос для этого: https://gitlab.com/gitlab-org/gitlab/-/issues/22638

В настоящее время существует обходной путь использования артефактов - в основном передача файлов.
Мы был похожий вариант использования - получить Java версию приложения из pom.xml и передать ее различным работам позже в конвейере.

Как мы это сделали в .gitlab-ci.yml:

stages:
  - prepare
  - package

variables:
  VARIABLES_FILE: ./variables.txt  # "." is required for image that have sh not bash

get-version:
  stage: build
  script:
    - APP_VERSION=...
    - echo "export APP_VERSION=$APP_VERSION" > $VARIABLES_FILE
  artifacts:
    paths:
      - $VARIABLES_FILE
package:
  stage: package
  script:
    - source $VARIABLES_FILE
    - echo "Use env var APP_VERSION here as you like ..."

0 голосов
/ 18 апреля 2020

Если вы запускаете скрипт, вы можете установить переменную окружения

export MY_VAR=the-value

, как только переменная окружения будет установлена, она должна сохраниться в текущей среде.

Теперь, почему вы * * не хотят *1007*

Инструмент, подобный Gitlab CI, предназначен для достижения воспроизводимости ваших артефактов. Здесь важна последовательность. Что произойдет, если у второго задания есть , чтобы выбрать переменную из первого? Тогда у вас есть несколько путей!

# CI is a sequence
first -> second -> third -> fourth -> ...

# not a graph

first -> second A -> third ...
     \> second B />

Как вы попали на третий? Теперь, если вам пришлось отлаживать третий, какой путь вы тестируете? Если третья сборка нарушена, кто отвечает за второе А или второе В?

Если вам нужна переменная, используйте ее сейчас, а не позже в другом задании / скрипте. Всякий раз, когда вы хотите написать более длинную последовательность команд, сделайте это сценарием и выполните сценарий!

...