Existe-t-il un moyen de conserver les fichiers de configuration Hudson / Jenkins dans le contrôle de code source?

140

Je suis nouveau sur Hudson / Jenkins et je me demandais s'il existe un moyen d'archiver les fichiers de configuration d'Hudson pour le contrôle de code source.

Idéalement, je veux pouvoir cliquer sur un bouton dans l'interface utilisateur qui dit «enregistrer la configuration» et faire enregistrer les fichiers de configuration Hudson dans le contrôle de code source.

Yuval Roth
la source
Ou vous pouvez stocker ces informations dans un dépôt Git à la demande: voir ma réponse ci
VonC
Vérifiez: le répertoire HUDSON_HOME pour la structure des fichiers Jenkins.
kenorb le

Réponses:

62

Réponse la plus utile

Il existe un plugin appelé plugin de configuration SCM Sync .


Réponse originale

Jetez un œil à ma réponse à une question similaire. L'idée de base est d'utiliser le filesystem-scm-plugin pour détecter les modifications apportées aux fichiers xml. Votre deuxième partie consisterait à valider les modifications apportées à SVN.

MODIFIER: Si vous trouvez un moyen de déterminer l'utilisateur pour un changement, faites-le nous savoir.

EDIT 2011-01-10 En attendant, il y a un nouveau plugin: le plugin de configuration SCM Sync . Actuellement, cela ne fonctionne qu'avec subversion et git, mais le support de plus de référentiels est prévu. Je l'utilise depuis la version 0.0.3 et cela a bien fonctionné jusqu'à présent.

Peter Schuetze
la source
2
Je ne suis pas d'accord: le plugin a quelques faiblesses majeures si vous utilisez git et opérez dans un environnement complexe: 'Si vous utilisez Git, vous devez utiliser la clé SSH avec le nom par défaut. C'est "id_rsa". SCM Sync n'a pas d'option pour spécifier le chemin de clé ssh. SCM Sync utilise .ssh / id_rsa du répertoire personnel du propriétaire du processus jenkins. ' de [ wiki.jenkins-ci.org/display/JENKINS/…
Ben Hutchison
2
Le plugin SCM Sync Configuration est incompatible avec le plugin Subversion> = 2.0 (par issues.jenkins-ci.org/browse/JENKINS-21640 ).
Nick Jones
1
Je ne recommanderai pas d'utiliser ce plugin en particulier, jenkins après l'installation n'est pas venu. Il semble y avoir beaucoup de bogues dans ce plugin et il n'est pas mis à jour / corrigé trop fréquemment. Évitez le «plugin de configuration SCM Sync»
vikramvi
1
@vikramvi, quelle est l'alternative que vous proposez?
Igor Rodriguez le
1
@IgorRodriguez Comme le travail de jenkins ne subit pas de changements fréquents par rapport au code du projet; Je suis en train de valider les modifications manuellement sur github.
vikramvi
38

Notez que Vogella a une approche récente (janvier 2014, par rapport à la question du PO en janvier 2010) et différente à ce sujet.
Considérez que le plugin de configuration SCM Sync peut générer beaucoup de commits.
Ainsi, au lieu de s'appuyer sur un plugin et un processus automatisé, il gère la même fonctionnalité manuellement:

Stocker les informations de Job de Jenkins dans Git

J'ai trouvé le nombre de commits un peu écrasant, j'ai donc décidé de contrôler les commits manuellement et de ne sauvegarder que les informations du Job et non la configuration Jenkins.
Pour ce commutateur dans votre répertoire de tâches Jenkins (Ubuntu :) /var/lib/jenkins/jobset exécutez la git initcommande « ».

J'ai créé le .gitignorefichier suivant pour stocker uniquement les informations sur les tâches Git:

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

Vous pouvez désormais ajouter et valider des modifications à votre guise.
Et si vous ajoutez une autre télécommande à votre référentiel Git, vous pouvez pousser votre configuration vers un autre serveur.

Alberto recommande en fait d'ajouter aussi (in $JENKINS_HOME):

  • jenkins propre config ( config.xml),
  • les plugins jenkins configs ( hudson*.xml) et
  • les utilisateurs configs ( users/*/config.xml)
VonC
la source
Le stockage des configurations utilisateur n'exposerait-il pas les jetons d'API en texte brut dans leur config.xml?
Boon le
@Boon Je ne sais pas en fait, car je n'ai pas eu à utiliser de jeton API récemment. Cela pourrait être une bonne question à vous poser.
VonC
2
Après quelques recherches, il s'avère que les jetons API sont cryptés dans le XML, donc cela ne poserait pas de risque de sécurité.
Boon
19

Pour gérer manuellement votre configuration avec Git, le fichier .gitignore suivant peut être utile.

# 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

Voir ce GitHub Gist et cet article de blog pour plus de détails.

Emil Sit
la source
14

Il existe un nouveau plug-in SCM Sync Configuration qui fait exactement ce que vous recherchez.

Le plugin SCM Sync Configuration Hudson vise 2 fonctionnalités principales:

  • Gardez synchronisé vos fichiers hudson config.xml (et autres ressources) avec un référentiel SCM
  • Suivre les modifications (et l'auteur) apportées sur chaque fichier avec des messages de validation

Je n'ai pas encore essayé cela, mais cela semble prometteur.

Matt Solnit
la source
3
Je serais intéressé par une configuration de travail du plug-in SCM Sync Configuration avec Git, j'ai essayé plusieurs configurations et je ne pouvais tout simplement pas le faire fonctionner (et les messages d'erreur dans les journaux étaient au mieux inutiles).
Sebastiano Pilla
8

Vous pouvez trouver les fichiers de configuration dans le dossier d'accueil de Jenkins (par exemple /var/lib/jenkins).

Pour les conserver dans VCS, connectez-vous d'abord en tant que Jenkins ( sudo su - jenkins) et créez ses informations d'identification git:

git config --global user.name "Jenkins"
git config --global user.email "[email protected]"

Ensuite, initialisez, ajoutez et validez les fichiers de base tels que:

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

envisagez également de créer .gitignoreavec les fichiers suivants à ignorer (personnaliser selon vos besoins):

# 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

Puis ajoutez: git add .gitignore.

Une fois terminé, vous pouvez ajouter des fichiers de configuration de tâche, par exemple

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

Enfin, ajoutez et validez tous les autres fichiers si nécessaire, puis poussez-les vers le référentiel distant où vous souhaitez conserver les fichiers de configuration.


Lorsque les fichiers Jenkins sont mis à jour, vous devez les recharger ( Recharger la configuration à partir du disque ) ou les exécuter à reload-configurationpartir de la CLI Jenkins.

Kenorb
la source
Pourquoi les configurations à l'échelle du site sont-elles exclues? Je vois que d'autres réponses les incluent.
Vincent Beltman du
@kenorb, je l'exclurais à nouveau. Une ligne de commentaire ci *.xml- dessus ne change pas la règle et git ignore tous les fichiers xml, y compris config.xmldu jobsrépertoire, git statusignorant alors silencieusement tout nouveau projet.
Mikolasan
5

La façon dont je préfère est d'exclure tout ce qui se trouve dans le dossier d'accueil de Jenkins, à l' exception des fichiers de configuration que vous voulez vraiment voir dans votre VCS. Voici le .gitignorefichier que j'utilise:

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

Cela ignore tout ( *) sauf ( !) .gitignorelui-même, les travaux / projets, le plugin et d'autres fichiers de configuration importants et utilisateur.

Il convient également d'envisager d'inclure le plugins dossier. Des plugins mis à jour ennuyeusement devraient être inclus ...

Fondamentalement, cette solution facilite les futures mises à jour de Jenkins / Hudson car les nouveaux fichiers ne sont pas automatiquement concernés. Vous obtenez juste ce que vous voulez vraiment.

nepa
la source
5

Un plus précis .gitignore, inspiré de la réponse de nepa :

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

Il ignore tout sauf les .xmlfichiers de configuration et .gitignorelui - même. (la différence de NEPA est .gitignoreque ce ne est pas « unignore » tous les répertoires de niveau supérieur ( !*/) comme logs/, cache/, etc.)

Andreï
la source
2

La réponse de Mark ( https://stackoverflow.com/a/4066654/142207 ) devrait fonctionner pour SVN et Git (bien que la configuration Git ne fonctionne pas pour moi).

Mais si vous en avez besoin pour fonctionner avec le repo Mercurial, créez un travail avec le script suivant:

hg remove -A || true
hg add ../../config.xml
hg add ../../*/config.xml
if [ ! -z "`hg status -admrn`" ]; then
    hg commit -m "Scheduled commit" -u [email protected]
    hg push
fi
okigan
la source
2

J'ai écrit un plugin qui vous permet de vérifier vos instructions Jenkins dans le contrôle de code source. Ajoutez simplement un .jenkins.ymlfichier avec le contenu:

script:
    - make
    - make test

et Jenkins le fera:

entrez la description de l'image ici

Wilfred Hughes
la source
0

J'ai entièrement vérifié Hudson, vous pouvez l'utiliser comme point de départ https://github.com/morkeleb/continuous-delivery-with-hudson

Il y a des avantages à garder hudson entier dans git. Toutes les modifications de configuration sont enregistrées et vous pouvez tester le testup assez facilement sur une machine, puis mettre à jour la ou les autres machines à l'aide de git pull.

Nous l'avons utilisé comme passe-partout pour notre configuration de livraison continue Hudson au travail.

Cordialement Morten

Morten
la source