Есть ли способ сохранить файлы конфигурации Hudson / Jenkins в системе управления версиями?

140

Я новичок в Hudson / Jenkins, и мне было интересно, есть ли способ проверить файлы конфигурации Hudson в системе управления версиями.

В идеале я хочу иметь возможность щелкнуть какую-нибудь кнопку в пользовательском интерфейсе с надписью «сохранить конфигурацию» и проверить файлы конфигурации Hudson в системе управления версиями.

Юваль Рот
источник
Или вы можете сохранить эту информацию в репозитории Git по запросу: см. Мой ответ ниже
VonC,
Проверьте: каталог HUDSON_HOME для структуры файлов Jenkins.
kenorb

Ответы:

63

Самый полезный ответ

Существует плагин под названием SCM Sync configuration plugin .


Оригинальный ответ

Взгляните на мой ответ на аналогичный вопрос. Основная идея заключается в использовании модуля filesystem-scm-plugin для обнаружения изменений в xml-файлах. Вторая часть будет фиксировать изменения в SVN.

РЕДАКТИРОВАТЬ: Если вы найдете способ определить пользователя для изменения, сообщите нам об этом.

РЕДАКТИРОВАТЬ 2011-01-10 Между тем появился новый плагин: плагин конфигурации SCM Sync . В настоящее время он работает только с Subversion и git, но планируется поддержка большего количества репозиториев. Я использую его с версии 0.0.3, и пока он работает хорошо.

Питер Шуэце
источник
2
Хочу не согласиться: у плагина есть несколько серьезных недостатков, если вы используете git и работаете в сложной среде: «Если вы используете Git, вам следует использовать SSH-ключ с именем по умолчанию. Это id_rsa. SCM Sync не имеет возможности указать путь ключа ssh. SCM Sync использует .ssh / id_rsa из домашнего каталога владельца процесса jenkins. ' из [ wiki.jenkins-ci.org/display/JENKINS/…
Бен Хатчисон,
2
Подключаемый модуль SCM Sync Configuration несовместим с подключаемым модулем Subversion> = 2.0 (согласно issues.jenkins-ci.org/browse/JENKINS-21640 ).
Ник Джонс
1
Я не рекомендую использовать именно этот плагин, после установки jenkins не подошел. Кажется, что в этом плагине много ошибок, и он не слишком часто обновляется / исправляется. Избегайте «Плагин конфигурации SCM Sync»
vikramvi
1
@vikramvi, какую альтернативу вы предлагаете?
Игорь Родригес
1
@IgorRodriguez Поскольку работа Дженкинса не претерпевает частых изменений по сравнению с кодом проекта; Я вручную фиксирую изменения в github.
vikramvi
38

Обратите внимание, что у Vogella есть недавний (январь 2014 г., по сравнению с вопросом ОП от января 2010 г.) и другой подход к этому вопросу.
Учтите, что плагин конфигурации SCM Sync может генерировать много коммитов.
Таким образом, вместо того, чтобы полагаться на плагин и автоматизированный процесс, он управляет той же функцией вручную:

Хранение информации о задании Дженкинса в Git

Мне показалось, что количество коммитов немного ошеломляет, поэтому я решил контролировать коммиты вручную и сохранять только информацию о задании, а не конфигурацию Jenkins.
Для этого перейдите в каталог заданий Jenkins (Ubuntu :) /var/lib/jenkins/jobsи выполните команду « git init».

Я создал следующий .gitignoreфайл для хранения только информации о вакансиях Git:

builds/
workspace/
lastStable
lastSuccessful
nextBuildNumber
modules/
*.log

Теперь вы можете добавлять и фиксировать изменения по своему желанию.
А если вы добавите еще один пульт в свой репозиторий Git, вы можете отправить свою конфигурацию на другой сервер.

Альберто также рекомендовал добавить (в $JENKINS_HOME):

  • собственная конфигурация jenkins ( config.xml),
  • конфигурации плагинов jenkins ( hudson*.xml) и
  • конфигурации пользователей ( users/*/config.xml)
VonC
источник
Разве при хранении пользовательских конфигураций не будут открываться токены API открытого текста config.xml?
Boon
@Boon На самом деле я не знаю, так как в последнее время мне не приходилось использовать токен API. Это может быть хорошим вопросом для вас.
VonC
2
После некоторого исследования выяснилось, что токены API зашифрованы в XML, поэтому это не представляет угрозы для безопасности.
Boon
19

Чтобы вручную управлять конфигурацией с помощью Git, может оказаться полезным следующий файл .gitignore.

# Miscellaneous Hudson litter
*.log
*.tmp
*.old
*.bak
*.jar
*.json

# Generated Hudson state
/.owner
/secret.key
/queue.xml
/fingerprints/
/shelvedProjects/
/updates/

# Tools that Hudson manages
/tools/

# Extracted plugins
/plugins/*/

# Job state
builds/
workspace/
lastStable
lastSuccessful
nextBuildNumber

См. Этот GitHub Gist и этот пост в блоге для получения более подробной информации.

Эмиль Сит
источник
14

Есть новый подключаемый модуль SCM Sync Configuration, который делает именно то, что вы ищете.

Плагин SCM Sync Configuration Hudson нацелен на 2 основные функции:

  • Синхронизируйте свои файлы config.xml (и другие ресурсы) hudson с репозиторием SCM
  • Отслеживайте изменения (и автора), внесенные в каждый файл, с помощью сообщений фиксации

На самом деле я еще не пробовал это, но это выглядит многообещающе.

Мэтт Сольнит
источник
3
Мне была бы интересна рабочая конфигурация подключаемого модуля SCM Sync Configuration с Git, я пробовал несколько конфигураций и просто не мог заставить его работать (а сообщения об ошибках в журналах в лучшем случае бесполезны).
Себастьяно Пилла
9

Вы можете найти файлы конфигурации в домашней папке Jenkins (например /var/lib/jenkins).

Чтобы сохранить их в VCS, сначала войдите как Jenkins ( sudo su - jenkins) и создайте его учетные данные git:

git config --global user.name "Jenkins"
git config --global user.email "jenkins@example.com"

Затем инициализируйте, добавьте и зафиксируйте основные файлы, такие как:

git init
git add config.xml jobs/ .gitconfig
git commit -m'Adds Jenkins config files' -a

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

# Git untracked files to ignore.

# Cache.
.cache/

# Fingerprint records.
fingerprints/

# Working directories.
workspace/

# Secret files.
secrets/
secret.*
*.enc
*.key
users/
id_rsa

# Plugins.
plugins/

# State files.
*.state

# Job state files.
builds/
lastStable
lastSuccessful
nextBuildNumber

# Updates.
updates/

# Hidden files.
.*
# Except git config files.
!.git*
!.ssh/

# User content.
userContent/

# Log files.
logs/
*.log

# Miscellaneous litter
*.tmp
*.old
*.bak
*.jar
*.json
*.lastExecVersion

Затем добавить: git add .gitignore.

Когда закончите, вы можете добавить файлы конфигурации задания, например

shopt -s globstar
git add **/config.xml
git commit -m'Added job config files' -a

Наконец, добавьте и зафиксируйте любые другие файлы, если это необходимо, затем отправьте его в удаленный репозиторий, где вы хотите сохранить файлы конфигурации.


Когда файлы Jenkins обновляются, вам необходимо перезагрузить их (перезагрузить конфигурацию с диска ) или запустить reload-configurationиз Jenkins CLI.

Kenorb
источник
Почему исключены общесайтовые конфигурации? Я вижу, что они есть и в других ответах.
Винсент Белтман
@kenorb Я бы снова исключил это. Строка комментария выше *.xmlне меняет правила, и git игнорирует все файлы xml, включая файлы config.xmlиз jobsкаталога, после чего git statusмолча игнорирует любой новый проект.
Mikolasan
5

Я предпочитаю исключить из домашней папки Jenkins все, кроме файлов конфигурации, которые вы действительно хотите разместить в VCS. Вот .gitignoreфайл, который я использую:

*
!.gitignore
!/jobs/*/*.xml
!/*.xml
!/users/*/config.xml
!*/

Это игнорирует все ( *) кроме самого ( !) .gitignore, задания / проекты, плагин и другие важные и пользовательские файлы конфигурации.

Также стоит подумать о включении pluginsпапки. Должны быть включены досадно обновленные плагины ...

В основном это решение упрощает будущие обновления Jenkins / Hudson, поскольку новые файлы автоматически не попадают в область действия. Вы просто получаете то, что действительно хотите.

непа
источник
5

Более точный .gitignore, вдохновленный ответом nepa :

*
!.gitignore
!/jobs/
!/jobs/*/
/jobs/*/*
!/jobs/*/config.xml
!/users/
!/users/*/
/users/*/*
!/users/*/config.xml
!/*.xml

Он игнорирует все, кроме .xmlфайлов конфигурации и .gitignoreсамого себя. (разница в Непско «ы в .gitignoreтом , что он не„игнорировать“все каталоги верхнего уровня ( !*/) , как logs/, cache/и т.д.)

Андрей
источник
3

Ответ от Марка ( https://stackoverflow.com/a/4066654/142207 ) должен работать для SVN и Git (хотя конфигурация Git у меня не сработала).

Но если вам это нужно для работы с Mercurial repo, создайте задание со следующим скриптом:

hg remove -A || true
hg add ../../config.xml
hg add ../../*/config.xml
if [ ! -z "`hg status -admrn`" ]; then
    hg commit -m "Scheduled commit" -u fill_in_the@blank.com
    hg push
fi
окиган
источник
2

Я написал плагин, который позволяет вам проверять ваши инструкции Jenkins в системе контроля версий. Просто добавьте .jenkins.ymlфайл с содержимым:

script:
    - make
    - make test

и Дженкинс это сделает:

введите описание изображения здесь

Уилфред Хьюз
источник
0

Я полностью проверил Хадсон, вы можете использовать это как отправную точку https://github.com/morkeleb/continuous-delivery-with-hudson

Хранение всего Hudson в git имеет свои преимущества. Все изменения конфигурации регистрируются, и вы можете довольно легко протестировать тест на одной машине, а затем обновить другую машину (а) с помощью git pull.

Мы использовали это как шаблон для нашей настройки непрерывной доставки Hudson на работе.

С уважением, Мортен

Мортен
источник