Сборка Gitlab Docker: вызов команды оболочки в .gitlab-ci.yml

Я пытаюсь вызвать команду оболочки в .gitlab-ci.yml, соответствующие части которой:

image: docker:latest
services:
  - docker:dind

stages:
  - build
  - deploy

...

build:
  stage: build
  script:
    - apt-get update -y
    - GIT_TAG=$(git tag | tail -1)
    - GIT_TAG=$(/usr/bin/git tag | tail -1)
    - docker ...

Однако все три основных вызова команд оболочки завершились неудачно, все с ошибкой «команда not found». Ошибка команды git действительно странная, потому что она должна сначала получить репозиторий git, прежде чем запускать раздел script. То есть я вижу, что git работает, но сам не могу им пользоваться.

Есть ли способ заставить его работать?

Вы уверены, что docker:latest установил git? Попробуйте добавить apt-get install -y git.

kichik 20.05.2019 22:23
Оказываетсяdocker:latest основан на alpine:3.9, поэтому вам нужно apk add --no-cache git.
kichik 20.05.2019 22:43

Поскольку вы используете GitLab, доступны специальные переменные для получения уже доступных сведений о ветке/теге/пользователе/фиксации/и т. д. Используйте их вместо установки Git!

rebelution 25.05.2019 05:32

@rebelution, если вы имели в виду $CI_COMMIT_TAG, пожалуйста, посмотрите мой предыдущий комментарий, который я пробовал и подтвердил, что он недоступен для моего конкретного случая в ОП.

xpt 26.05.2019 02:05

@xpt - понял. вы создаете тег и испытываете такое поведение? Это то, что я нашел в документации GitLab. «CI_COMMIT_TAG — имя тега фиксации. Присутствует только при построении тегов» означает — когда вы отправите коммит в GitLab, тогда он запустит конвейер без переменной CI_BUILD_TAG. Когда вы создадите тег для этого коммита и отправите этот тег в GitLab, будет запущен другой конвейер (на этот раз для тега, а не для коммита). В этом случае будет присутствовать CI_BUILD_TAG.

rebelution 27.05.2019 08:13

Спасибо @rebelution, это ценный вклад. Хотели бы вы расширить его до ответа? Поскольку я не создаю теги на вышеприведенном шаге .gitlab-ci.yml, по-видимому, этап в .gitlab-ci.yml также должен включать такие изменения/требования... Я проголосую за вас.

xpt 29.05.2019 17:05
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
6
337
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вы видите, что git работает отдельными шагами, потому что GitLab, вероятно, делает это в другом контейнере. Они содержат ваш контейнер в чистоте, поэтому вам придется устанавливать зависимости самостоятельно.

Поскольку образ, который вы используете, основан на Alpine Linux, команда для установки git:

apk add --no-cache git

Вы также можете пропустить все это и использовать предопределенные переменные среды, если все, что вам нужно, это информация git. $CI_COMMIT_TAG будет содержать тег, а $CI_COMMIT_SHA будет содержать хэш коммита.

Не могли бы вы уточнить $CI_COMMIT_TAG в ответе, пожалуйста? Документ говорит, что это "имя тега фиксации. Присутствует только при построении тегов." Я строительные теги в шаге выше .gitlab-ci.yml? Смогу ли я использовать его в моем шаге, если нет? Более того, в документе не указано, что это последняя метка, а у меня их много. Какой будет $CI_COMMIT_TAG? Спасибо!

xpt 20.05.2019 23:20

Я недостаточно знаком с GitLab, но обычно системы CI строятся на каждом коммите и новом теге. Когда он создает тег, эта переменная будет иметь это имя тега. Обычно это то, для чего людям нужен тег в CI, чтобы они могли пометить версию именем тега.

kichik 21.05.2019 00:38

Спасибо за объяснение, кичик. Я пробовал и подтвердил, что для моего конкретного случая в OP $CI_COMMIT_TAG пуст.

xpt 21.05.2019 02:06

из документация GitLab, вот определение CI_COMMIT_TAG:

CI_COMMIT_TAG — имя тега фиксации. Присутствует только при построении тегов

означает, что когда вы отправите коммит в GitLab, он запустит конвейер без переменной CI_COMMIT_TAG. Когда вы создадите тег для этого коммита и отправите этот тег в GitLab, будет запущен другой конвейер (на этот раз для тега, а не для коммита). В этом случае CI_COMMIT_TAG будет присутствовать.

@xpt - спасибо за доверие и просьбу написать это как ответ, надеюсь, это поможет сообществу!

спасибо, позвольте мне попробовать и вернуться к вам. Итак, вы говорите, что при использовании CI_COMMIT_REF_NAME вышеуказанный .gitlab-ci.yml в моем OP будет работать без каких-либо изменений, верно?

xpt 30.05.2019 14:39

Я попробовал это только что, и это не работает, если только .gitlab-ci.yml в OP не изменен - ​​CI_COMMIT_REF_NAME всегда дает мне имя моего проекта, а не имя тега. Пожалуйста, убедитесь, что это работает с вашей стороны, прежде чем публиковать любой ответ, а не только вы думаете, что это сработает. Спасибо.

xpt 30.05.2019 16:00

@xpt - спасибо, отредактировал ответ, проверю и поделюсь, если найду что-нибудь вокруг него :)

rebelution 30.05.2019 19:33

Другие вопросы по теме