Gitlab Runner - новая папка для каждой сборки

Я использую Gitlab CI для своего проекта. Когда я нажимаю на ветку разработки, она запускает тесты и обновляет код в моей тестовой среде (удаленном сервере).

Но бегун gitlab уже использует ту же папку сборки: builds/a3ac64e9/0/myproject/myproject

Но я бы хотел каждый раз создавать папку now:

  • builds/a3ac64e9/1/yproject/myproject
  • builds/a3ac64e9/2/yproject/myproject
  • builds/a3ac64e9/3/yproject/myproject
  • и так далее

Используя это, я мог просто обновить свой веб-сайт, изменив символическую ссылку, указывающую на последний каталог бегуна.

Есть ли способ настроить Gitlab Runner таким образом?

Согласно docs.gitlab.com/runner/configuration/… вы не можете

djuarezg 14.09.2018 09:32
Стоит ли изучать 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 называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
4
1
8 124
3

Ответы 3

Вы не можете добиться этого только с помощью конфигурации Gitlab CI runner, но вы можете создать 2 runner'а и назначить их исключительно каждой ветке, используя комбинацию ключевых слов only и tags.

Предположим, что ваши две ветки названы master и develop, а два бегуна помечены тегами master_runner и develop_runner, ваш .gitlab-ci.yml может выглядеть следующим образом:

master_job:
   <<: *your_job
   only:
     - master
   tags:
     - master_runner

develop_job:
   <<: *your_job
   only:
     - develop
   tags:
     - develop_runner

(<<: *your_job - это ваша настоящая работа, которую вы можете разложить на множители)

Возможно, вы захотите прочитать следующий ответ Изменение промежуточных путей сборки для gitlab-runner

Я отправлю свой ответ здесь:

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

Итак, вам нужно выполнить развертывание из этого каталога с помощью сценария согласно gitlab-ci.yml ниже в правильный каталог развертывания.

stages:
- deploy

variables:
  TARGET_DIR: /home/ab12/public_html/$CI_PROJECT_NAME

deploy:
  stage: deploy
  script:
     mkdir -pv $TARGET_DIR
     rsync -r --delete ./ $TARGET_DIR
  tags:
    - myrunner

Это переместит ваш projectfiles в / home / ab12 / public_html /

Называя свои проекты project1 .. projectn, все ваши проекты могут использовать один и тот же файл .gitlab-ci.yml.

Хотя нет смысла использовать каталог сборки в качестве каталога развертывания, вы можете настроить собственный каталог сборки.

Откройте config.toml в текстовом редакторе: (подробнее о том, где его найти здесь)

Установите enabled = true под [runners.custom_build_dir] (подробнее здесь)

[runners.custom_build_dir]
  enabled = true

В вашем файле .gitlab-ci.yml в разделе variables установите GIT_CLONE_PATH. Он должен начинаться с $CI_BUILDS_DIR/, например $CI_BUILDS_DIR/$CI_JOB_ID/$CI_PROJECT_NAME, который, вероятно, даст вам то, что вы ищете, хотя, если у вас несколько этапов, у них будут разные идентификаторы вакансий. В качестве альтернативы вы можете попробовать $CI_BUILDS_DIR/$CI_COMMIT_SHA, который предоставит вам уникальную папку для каждой фиксации. (Подробнее здесь)

variables:
    GIT_CLONE_PATH: '$CI_BUILDS_DIR/$CI_JOB_ID/$CI_PROJECT_NAME'

Unfortunately there is currently an issue with using GIT_BUILDS_DIR in GIT_CLONE_PATH, if you're using Windows and Powershell, so you may have to do something like this as a work-around, if all your runners have the same build directory: GIT_CLONE_PATH: 'C:\GitLab-Runner/builds/$CI_JOB_ID/$CI_PROJECT_NAME'

Вы можете взглянуть на доступные вам переменные (предопределенные переменные), чтобы найти наиболее подходящие переменные для вашего пути.

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