Existe uma maneira de manter os arquivos de configuração do Hudson / Jenkins no controle de origem?

140

Eu sou novo no Hudson / Jenkins e queria saber se existe uma maneira de verificar os arquivos de configuração do Hudson para o controle de origem.

Idealmente, desejo poder clicar em algum botão na interface do usuário que diga 'salvar configuração' e ter os arquivos de configuração do Hudson registrados no controle de origem.

Yuval Roth
fonte
Ou você pode armazenar essas informações em um repositório Git on demand: veja minha resposta abaixo
VonC
Verifique: diretório HUDSON_HOME para a estrutura dos arquivos Jenkins.
Kenorb # 27/15

Respostas:

62

Resposta mais útil

Existe um plug-in chamado plug-in de configuração do SCM Sync .


Resposta original

Dê uma olhada na minha resposta para uma pergunta semelhante. A idéia básica é usar o sistema de arquivos-scm-plugin para detectar alterações nos arquivos xml. Sua segunda parte seria confirmar as alterações no SVN.

EDIT: Se você encontrar uma maneira de determinar o usuário para uma alteração, informe-nos.

EDIT 2011-01-10 Enquanto isso, há um novo plug-in: o plug- in de configuração do SCM Sync . Atualmente, ele funciona apenas com subversion e git, mas o suporte para mais repositórios está planejado. Estou usando-o desde a versão 0.0.3 e funcionou bem até agora.

Peter Schuetze
fonte
2
Eu imploro para diferir: o plug-in tem algumas das principais fraquezas se você usa o git e opera em um ambiente complexo: 'Se você usa o Git, deve usar a chave SSH com o nome padrão. É "id_rsa". O SCM Sync não tem opção para especificar o caminho da chave ssh. O SCM Sync usa .ssh / id_rsa do diretório inicial do proprietário do processo jenkins. ' de [ wiki.jenkins-ci.org/display/JENKINS/…
Ben Hutchison
2
O plug-in SCM Sync Configuration é incompatível com o plug-in Subversion> = 2.0 (por issues.jenkins-ci.org/browse/JENKINS-21640 ).
Nick Jones
1
Não recomendo usar este plugin em particular, o jenkins pós-instalação não apareceu. Parece haver muitos bugs neste plugin e ele não recebe atualizações / correções com muita frequência. Evite "plugin de configuração do SCM Sync"
vikramvi 17/10
1
@vikramvi, qual é a alternativa que você propõe?
Igor Rodriguez
1
@IgorRodriguez Como o trabalho de jenkins não sofre alterações frequentes em comparação com o código do projeto; Estou realizando alterações manualmente no github.
precisa saber é o seguinte
38

Observe que Vogella tem uma opinião recente (janeiro de 2014, comparada à pergunta do OP de janeiro de 2010) e uma opinião diferente sobre isso.
Considere que o plug-in de configuração do SCM Sync pode gerar muitas confirmações.
Portanto, em vez de depender de um plug-in e de um processo automatizado, ele gerencia o mesmo recurso manualmente:

Armazenando as informações de trabalho de Jenkins no Git

Eu achei a quantidade de confirmações um pouco exagerada, então decidi controlar as confirmações manualmente e salvar apenas as informações da tarefa e não a configuração do Jenkins.
Para isso, mude para o diretório de tarefas do Jenkins (Ubuntu:) /var/lib/jenkins/jobse execute o git initcomando “ ”.

Criei o seguinte .gitignorearquivo para armazenar apenas as informações de trabalhos do Git:

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

Agora você pode adicionar e confirmar alterações conforme sua vontade.
E se você adicionar outro controle remoto ao seu repositório Git, poderá enviar sua configuração para outro servidor.

Alberto realmente recomenda adicionar também (em $JENKINS_HOME):

  • o próprio jenkins config ( config.xml),
  • os plugins jenkins configs ( hudson*.xml) e
  • os usuários configs ( users/*/config.xml)
VonC
fonte
O armazenamento das configurações do usuário não exporia os tokens da API de texto sem formatação config.xml?
Boon
@ Boon Eu não sei, na verdade, uma vez que não precisei usar o token da API recentemente. Essa poderia ser uma boa pergunta por si só para você perguntar.
VonC
2
Após algumas pesquisas, verifica-se que os tokens da API são criptografados no XML, portanto, isso não representaria um risco à segurança.
Boon
19

Para gerenciar manualmente sua configuração com o Git, o seguinte arquivo .gitignore pode ser útil.

# 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

Veja este GitHub Gist e esta publicação no blog para obter mais detalhes.

Emil Sit
fonte
14

Há um novo plug-in de configuração de sincronização do SCM que faz exatamente o que você está procurando.

O plug-in Hudson do SCM Sync Configuration tem como objetivo 2 recursos principais:

  • Mantenha sincronizado seus arquivos hudson config.xml (e outros recursos) com um repositório SCM
  • Rastreie as alterações (e autor) feitas em todos os arquivos com mensagens de confirmação

Na verdade, eu ainda não tentei isso, mas parece promissor.

Matt Solnit
fonte
3
Eu estaria interessado em uma configuração funcional do plug-in de Configuração de sincronização do SCM com o Git, tentei várias configurações e simplesmente não consegui fazê-lo funcionar (e as mensagens de erro nos logs foram inúteis, na melhor das hipóteses).
Sebastiano Pilla 15/01
8

Você pode encontrar arquivos de configuração na pasta inicial do Jenkins (por exemplo /var/lib/jenkins).

Para mantê-los no VCS, primeiro faça o login como Jenkins ( sudo su - jenkins) e crie suas credenciais git:

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

Em seguida, inicialize, adicione e confirme os arquivos básicos, como:

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

considere também criar .gitignorecom os seguintes arquivos a serem ignorados (personalize conforme necessário):

# 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

Em seguida, adicioná-lo: git add .gitignore.

Quando terminar, você pode adicionar arquivos de configuração do trabalho, por exemplo

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

Finalmente, adicione e confirme quaisquer outros arquivos, se necessário, e envie-o para o repositório remoto onde deseja manter os arquivos de configuração.


Quando os arquivos Jenkins são atualizados, é necessário recarregá-los ( Recarregar configuração do disco ) ou executar a reload-configurationpartir da Jenkins CLI.

kenorb
fonte
Por que as configurações de todo o site são excluídas? Vejo que outras respostas as incluem.
Vincent Beltman 11/10
@kenorb Eu excluí-lo novamente. Uma linha de comentário acima *.xmlnão altera a regra e o git ignora todos os arquivos xml, incluindo config.xmldo jobsdiretório, git statusignorando silenciosamente qualquer novo projeto.
Mikolasan
5

A maneira como prefiro é excluir tudo na pasta inicial do Jenkins, exceto os arquivos de configuração que você realmente deseja que estejam no seu VCS. Aqui está o .gitignorearquivo que eu uso:

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

Isso ignora tudo ( *), exceto ( !) .gitignore, os trabalhos / projetos, o plug-in e outros arquivos importantes e de configuração do usuário.

Também vale a pena considerar incluir a pluginspasta. Plugins irritantemente atualizados devem ser incluídos ...

Basicamente, essa solução facilita as futuras atualizações do Jenkins / Hudson porque novos arquivos não estão automaticamente no escopo. Você acabou de escutar o que realmente quer.

nepa
fonte
5

Um mais preciso .gitignore, inspirado na resposta da nepa :

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

Ele ignora tudo, exceto os .xmlarquivos de configuração e .gitignoreele próprio. (a diferença para nepa 's .gitignoreé que ele não faz 'unignore' todos os diretórios de nível superior ( !*/) como logs/, cache/, etc.)

Andrey
fonte
2

A resposta de Mark ( https://stackoverflow.com/a/4066654/142207 ) deve funcionar para SVN e Git (embora a configuração do Git não funcione para mim).

Mas se você precisar trabalhar com o repositório Mercurial, crie um trabalho com o seguinte script:

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
fonte
2

Eu escrevi um plugin que permite que você verifique suas instruções Jenkins no controle de origem. Basta adicionar um .jenkins.ymlarquivo com o conteúdo:

script:
    - make
    - make test

e Jenkins fará isso:

insira a descrição da imagem aqui

Wilfred Hughes
fonte
0

Fiz o check-in inteiramente no hudson, você pode usar isso como ponto de partida https://github.com/morkeleb/continuous-delivery-with-hudson

Existem benefícios em manter Hudson inteiro no git. Todas as alterações de configuração são registradas e você pode testar a testagem facilmente em uma máquina e atualizar as outras máquinas usando git pull.

Usamos isso como um padrão para nossa configuração de entrega contínua da Hudson no trabalho.

Atenciosamente Morten

Morten
fonte