Используйте пользовательский URL для определения среды в gitlab-ci - PullRequest
0 голосов
/ 13 февраля 2019

Текущая конфигурация:

Я работаю с gitlab-ci.В настоящее время у меня есть два этапа в моем файле gitlab-ci.yml, один для сборки и один для развертывания.Задания выполняются успешно.

gitlab-ci.yml

stages:
 - build
 - deploy

d_build:
  stage: build
  tags:
    - my-runner
  script:
    - echo "Build"
    - sh testScript.sh
d_review:
  stage: deploy
  environment:
    name: staging
    url: (INSERT URL HERE)
  tags:
    - my-runner
  script:
    - echo "Foo"

Gitlab Runner Vesion : 11.7.0

ОС : windows / amd64


Желаемое поведение:

Файл оболочки testScript.sh генерирует URL, который мне бы хотелосьиспользовать в поле URL в среде, на этапе развертывания.

На панели операций в gitlab на странице сред я хотел бы иметь возможность выбрать опцию «Открыть живое окружение» для визуализации URL-адреса, сгенерированного файлом .sh.Как это может быть достигнуто?

Я думал о двух возможных путях, но я не уверен, как можно достичь любого из них.Можно ли из "testScript.sh" установить переменную среды на этапе сборки, чтобы ее можно было затем выбрать на этапе развертывания?

В качестве альтернативы, если "testScript.sh"Файл должен был создать текстовый файл, содержащий URL-адрес, как я могу дать указание этапу развертывания прочитать из текстового файла и использовать его содержимое, чтобы определить переменную для его использования в поле URL-адреса?


Что я пробовал:

В качестве теста я попытался установить переменную в переменных на этапе сборки:

stages:
 - build
 - deploy

d_build:
  stage: build
  tags:
    - my-runner
  script:
    - echo "Build"
    - sh testScript.sh
  variables:
    url_endpoint: "myendpoint"

Изменить URL следующим образом:

d_review:
  stage: deploy
  environment:
    name: staging
    url: https://localhost:1234&endpoint=$url_endpoint
  tags:
    - my-runner
  script:
    - echo "Foo"

Однако это не сработало, в последнем URL вместо «myendpoint» был пробел, который говорит мне, что я что-то упускаю в том, как распространяются переменные.Буду признателен за любые предложения.

Ответы [ 2 ]

0 голосов
/ 14 февраля 2019

Переменные в GitLab не передаются между заданиями.Есть еще люди, которые спрашивают, можно ли это сделать, хотя:

https://gitlab.com/gitlab-org/gitlab-ce/issues/47517

Я сам не использовал среды в GitLab, но по этой ссылке это выглядит как среда:url весьма ограничен в том, что вы можете с ним делать:

https://docs.gitlab.com/ce/ci/yaml/#environmenturl

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

https://docs.gitlab.com/ee/ci/triggers/#triggering-a-pipeline

У них есть некоторые функции, которые облегчают, если вы платный клиент, но я думаю, что в любом случае должно быть возможно достичь того, чего вы хотите.Вы можете использовать что-то вроде этого из вашей работы в d_build:

curl -X POST \
-H "Content-Type: application/json" \
-d '{"token":"token", "ref":"my-branch", "variables": {"url_endpoint": "myendpoint"}}' \
 https://gitlab.com/api/v4/projects/:iid/trigger/pipeline

Вам потребуется получить токен доступа:

https://docs.gitlab.com/ce/user/profile/personal_access_tokens.html

И вы можете отправить его по адресускрипт GitLab, использующий переменные или защищенные переменные:

https://docs.gitlab.com/ce/ci/variables/#variables

Ваш файл gitlab-ci будет выглядеть примерно так:

stages:
 - build
 - deploy

d_build:
  stage: build
  tags:
    - my-runner
  script:
    - echo "Build"
    - sh testScript.sh
    - [curl script here]
except:
  variables:
    - $url_endpoint

d_review:
  stage: deploy
  environment:
    name: staging
    url: $url_endpoint
  tags:
    - my-runner
  script:
    - echo "Foo"
  only:
    variables:
      - $url_endpoint

"only" и "кроме "ключевые слова должны сделать так, чтобы при нажатии выполнялось только задание на сборку, а d_review запускался только тогда, когда установлена ​​эта переменная, которая должна присутствовать только при запуске задания.

У меня нетпроверил это, но я надеюсь, что это даст вам возможность поработатьЯ действительно надеюсь, что есть более простое решение, что это!

0 голосов
/ 14 февраля 2019

Начиная работу, URL должен быть установлен.Вы не можете установить URL среды в задании перед развертыванием:

Параметр url может использовать любую из определенных переменных CI, включая предопределенные, защищенные переменные и переменные .gitlab-ci.yml.Однако вы не можете использовать переменные, определенные в скрипте.

https://docs.gitlab.com/ee/ci/yaml/README.html#environmenturl

Вы можете использовать перенаправление javascript в качестве временного решения:

d_build:
  stage: build
  tags:
    - my-runner
  script:
    - echo "Build"
    - UUID=$(sh testScript.sh)
    - echo '<html><head><script type="text/javascript">window.location.replace("https://localhost:5939/mywebpage/index.html?id='$UUID'");</script></head></html>' > redirect.html

d_review:
  stage: deploy
  environment:
    name: staging
    url: https://localhost:5939/mywebpage/redirect.html
  tags:
    - my-runner
  script:
    - echo "Foo"

Это создает redirect.html который перенаправляет на ваш локальный URL с параметром, созданным testScript.sh.Если создание redirect.html не удается из-за выхода символа, попробуйте поместить строку, начинающуюся с echo, в ваш скрипт sh.

...