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.


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.


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)

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.


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.


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 "jenkins@example.com"

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.


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.


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.)


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 fill_in_the@blank.com
    hg push
fi

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


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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.