Есть ли способ сохранить файлы конфигурации 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)

Разве при хранении пользовательских конфигураций не будут открываться токены 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 Я бы снова исключил это. Строка комментария выше *.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 на работе.

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.