Jenkins git checkout - поместите папку .git в другое место

Мы выполняем развертывание в папку клиента на сервере клиента с помощью Jenkins через VPN нескольких репозиториев git. Я установил опции "Выписка из подкаталога" и "Редкая выписка".

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

Для git можно поместить файл.git в папку репо и указать в этом файле место в папке.git, например:

my-repo-folder$ cat .git
gitdir: /home/user1/another-my-repo-folder.git

(подробнее о gitdir см. здесь)

Можно ли установить другое место в папке.git для плагина git Jenkins, как указано выше?

Upd. Вот конфигурация развертывания описанного выше:

2 ответа

Другое предложение:

git не является инструментом развертывания (во всяком случае, не лучшим).

Если вам нужно выбрать некоторые файлы из репо и скопировать только их на сервер, вы можете:

  • напишите сценарий (возможно, выполненный Дженкинсом), который будет запускаться на сервере сборки, который создает архив с файлами, которые вы хотите
  • скопируйте этот архив на рабочий сервер в инфраструктуре клиента

Я нашел обходной путь: я создал сценарий пост-проверки ( howto) в локальном репо, а также оформил заказ в другое рабочее пространство внутри них ( howto) и написал внутри них файл.git. В результате Дженкинс извлекает и выполняет разреженную проверку с помощью плагина git в локальном репо, а сценарий после проверки делает все остальное.

Скрипт после оформления заказа:

#!/bin/sh
if [[ "$GIT_POST_CHECKOUT_SCRIPT_CALL" -ne 1 ]]
then
    GIT_WORK_TREE=S:/clients-repo-path/ # remote share should be connected as a drive for Windows
    GIT_POST_CHECKOUT_SCRIPT_CALL=1 # prevent infinite loop
    export GIT_POST_CHECKOUT_SCRIPT_CALL
    CUR_DIR=`pwd`
    CUR_DIR="${CUR_DIR:1:1}:${CUR_DIR:2}" # translate nix path to git for Windows. Remove for linux
    echo "gitdir: $CUR_DIR/.git" > "$GIT_WORK_TREE/.git" # now may run git commands in clients repo
    export GIT_WORK_TREE # git option for checkout
    git checkout -f # checkout to client's path
fi

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