Ao escrever pipelines da jenkins, parece ser muito inconveniente confirmar cada nova alteração para verificar se funciona.
Existe uma maneira de executá-los localmente sem confirmar o código?
Ao escrever pipelines da jenkins, parece ser muito inconveniente confirmar cada nova alteração para verificar se funciona.
Existe uma maneira de executá-los localmente sem confirmar o código?
Você não pode executar o script Pipeline localmente, pois seu objetivo é criar scripts para o Jenkins. (Essa é uma das razões pelas quais é melhor manter seu Jenkinsfile
código curto e limitado que realmente lida com os recursos do Jenkins; sua lógica de compilação real deve ser tratada com processos externos ou ferramentas de compilação que você chama por uma linha sh
ou bat
etapa).
Se você quiser testar uma mudança para Jenkinsfile
viver, mas sem enviá- la, use o recurso Replay adicionado em 1.14
O JENKINS-33925 rastreia o desejado para uma estrutura de teste automatizada.
Eu tenho uma solução que funciona bem para mim. Ele consiste em um jenkins local em execução no docker e um gancho da web git para acionar o pipeline no jenkins local em cada consolidação. Você não precisa mais enviar para o seu repositório github ou bitbucket para testar o pipeline.
Isso foi testado apenas em um ambiente Linux.
É bastante simples fazer isso funcionar, embora essa instrução seja um pouco longa. A maioria das etapas está lá.
Isto é o que você precisa
é assim que se faz
Jenkins Docker
Crie um arquivo chamado Dockerfile no lugar de sua escolha. Estou colocando em
/opt/docker/jenkins/Dockerfile
preenchê-lo com isso:Construa a imagem local_jenkins
Você precisará fazer isso apenas uma vez ou depois de adicionar algo ao Dockerfile.
Iniciar e reiniciar local_jenkins
De tempos em tempos, você deseja iniciar e reiniciar o jenkins facilmente. Por exemplo, após uma reinicialização da sua máquina. Para isso, criei um pseudônimo que coloquei
.bash_aliases
na minha pasta pessoal.Verifique se a
/opt/docker/jenkins/jenkins_home
pasta existe e se você possui direitos de leitura e gravação.Para iniciar ou reiniciar o seu jenkins, digite:
Tudo o que você faz no jenkins local será armazenado na pasta / opt / docker / jenkins / jenkins_home e preservado entre as reinicializações.
Crie uma chave de acesso ssh no docker jenkins
Esta é uma parte muito importante para que isso funcione. Primeiro, iniciamos o contêiner do docker e criamos um shell bash para ele:
Agora você entrou no contêiner do docker, isso pode ser visto por algo como
jenkins@e7b23bad10aa:/$
no seu terminal. O hash após o @ certamente será diferente.Crie a chave
Pressione enter em todas as perguntas até receber o prompt de volta
Copie a chave para o seu computador. No contêiner do docker, seu computador é 172.17.0.1, você deve se perguntar.
user = seu nome de usuário e 172.17.0.1 é o endereço IP do seu computador a partir do contêiner do docker.
Você precisará digitar sua senha neste momento.
Agora vamos tentar concluir o loop enviando ssh para o seu computador a partir do contêiner do docker.
Desta vez, você não precisa digitar sua senha. Se o fizer, algo deu errado e você deve tentar novamente.
Agora você estará na pasta inicial do seu computador. Experimente
ls
e dê uma olhada.Não pare por aqui, pois temos uma cadeia de conchas ssh da qual precisamos sair.
Certo! Agora estamos de volta e prontos para continuar.
Instale seu Jenkins
Você encontrará o Jenkins local no navegador em http: // localhost: 8787 .
Na primeira vez em que você apontar o navegador para o Jenkins local, você será agraciado com um Assistente de Instalação. Os padrões são bons, mas certifique-se de instalar o plugin do pipeline durante a instalação.
Configure seu jenkins
É muito importante que você ative a segurança baseada em matriz em http: // localhost: 8787 / configureSecurity e conceda todos os direitos adicionando-se à matriz e marque todas as caixas. (Existe um ícone de marcar todas as caixas na extrema direita)
Jenkins’ own user database
como o domínio de segurançaMatrix-based security
na seção AutorizaçãoUser/group to add:
e clique no[ Add ]
botãoPrevent Cross Site Request Forgery exploits
está desmarcada. (Como esse Jenkins só pode ser acessado no seu computador, isso não é um problema)[ Save ]
e saia do Jenkins e faça o login novamente apenas para garantir que funcione. Caso contrário, é necessário recomeçar do zero e esvaziar a/opt/docker/jenkins/jenkins_home
pasta antes de reiniciarAdicione o usuário git
Precisamos permitir que nosso gancho git faça login no Jenkins local com direitos mínimos. Apenas ver e criar empregos é suficiente. Portanto, criamos um usuário chamado
git
com senhalogin
.Direcione seu navegador para http: // localhost: 8787 / securityRealm / addUser e adicione
git
como nome de usuário elogin
senha. Clique em[ Create User ]
.Adicione os direitos ao usuário git
Vá para a página http: // localhost: 8787 / configureSecurity no seu navegador. Inclua o usuário git na matriz:
git
no campoUser/group to add:
e clique em[ Add ]
Agora é hora de marcar as caixas para obter direitos mínimos para o usuário git. Apenas estes são necessários:
Verifique se a
Prevent Cross Site Request Forgery exploits
caixa de seleção está desmarcada e clique em[ Save ]
Crie o projeto de pipeline
Assumimos que temos o nome de usuário
user
e nosso projeto habilitado para git com o qualJenkinsfile
ele é chamadoproject
e está localizado em/home/user/projects/project
No seu http: // localhost: 8787 Jenkins, adicione um novo projeto de pipeline. Eu o nomeei hookpipeline para referência.
New Item
menu Jenkinshookpipeline
[ OK ]
Poll SCM
na seção Build Triggers. Deixe o agendamento em branco.Pipeline script from SCM
Repository URL
campo insira[email protected]:projects/project/.git
Script Path
campo insiraJenkinsfile
Crie o gancho git
Vá para a
/home/user/projects/project/.git/hooks
pasta e crie um arquivo chamadopost-commit
que contém este:Torne este arquivo executável:
Teste o gancho pós-confirmação:
Faça check-in no Jenkins se o projeto do seu hookpipeline foi acionado.
Finalmente, faça algumas alterações arbitrárias no seu projeto, adicione as alterações e faça uma confirmação. Agora, isso acionará o pipeline em seu Jenkins local.
Dias felizes!
fonte
docker build -t local_jenkins /opt/docker/jenkins/Dockerfile
comdocker build -t local_jenkins /opt/docker/jenkins
porque Docker reclamou "incapaz de preparar contexto: contexto deve ser um diretório".$ docker inspect jenkins | grep Gateway
ssh [email protected]
vez de usar o endereço IP. Também verifique se você ativou o recurso de login remoto a partir das Preferências MacOS Sistema -> menu de pasta compartilhadaTL; DR
Versão longa
O teste do Jenkins Pipeline se torna cada vez mais doloroso. Diferentemente da abordagem clássica de configuração da tarefa declarativa, em que o usuário estava limitado ao que a interface do usuário expôs o novo Jenkins Pipeline, é uma linguagem de programação completa para o processo de construção, onde você mistura a parte declarativa com seu próprio código. Como bons desenvolvedores, também queremos fazer alguns testes de unidade para esse tipo de código.
Há três etapas que você deve seguir ao desenvolver os pipelines Jenkins. A etapa 1. deve cobrir 80% dos casos de uso.
Exemplos
O repositório pipelineUnit GitHub contém alguns exemplos de Spock sobre como usar a estrutura de teste da Jenkins Pipeline Unit
fonte
Jenkins possui um recurso 'Replay', que permite reproduzir rapidamente um trabalho sem atualizar as fontes:
fonte
No momento da escrita (final de julho de 2017) com o plug-in Blue Ocean, é possível verificar a sintaxe de um pipeline declarativo diretamente no editor de pipeline visual . O editor funciona a partir da interface do usuário do Blue Ocean quando você clica em "configurar" apenas para projetos do github (este é um problema conhecido e eles estão trabalhando para que também funcionem no git etc.).
Mas, como explicado nesta pergunta, você pode abrir o editor navegando para:
[Jenkins URL]/blue/organizations/jenkins/pipeline-editor/
Em seguida, clique no meio da página e pressione
Ctrl+S
, isso abrirá uma área de texto onde você poderá colar um script declarativo de pipeline. Quando você clica em Atualizar , se houver um erro de sintaxe, o editor informará onde está o erro de sintaxe. Como nesta captura de tela:Se não houver erro de sintaxe, a área de texto será fechada e a página visualizará seu pipeline. Não se preocupe, isso não salvará nada (se for um projeto do github, ele confirmará a alteração do Jenkinsfile).
Eu sou novo no Jenkins e isso é bastante útil, sem isso eu tive que cometer um arquivo Jenkins muitas vezes, até que funcione (muito irritante!). Espero que isto ajude. Felicidades.
fonte
Um pouco atrasado para a festa, mas foi por isso que escrevi
jenny
, uma pequena reimplementação de algumas etapas principais do arquivo Jenkins. ( https://github.com/bmustiata/jenny )fonte
Tanto quanto eu sei este plugin Pipeline - é o "mecanismo" da nova mecânica do Jenkinsfile, por isso estou certo de que você poderia usá-lo para testar localmente seus scripts.
Não tenho certeza se são necessárias etapas adicionais quando você o copia em um arquivo Jenkins, no entanto, a sintaxe etc. deve ser exatamente a mesma.
Editar: encontrou a referência no "mecanismo", verifique esta descrição do recurso, último parágrafo, primeira entrada.
fonte
Na minha configuração de desenvolvimento - faltando um editor Groovy adequado - muitos problemas do Jenkinsfile se originam de simples erros de sintaxe . Para resolver esse problema, você pode validar o arquivo Jenkins contra sua instância do Jenkins (executando em
$JENKINS_HTTP_URL
):curl -X POST -H $(curl '$JENKINS_HTTP_URL/crumbIssuer/api/xml?xpath=concat(//crumbRequestField,":",//crumb)') -F "jenkinsfile=<Jenkinsfile" $JENKINS_HTTP_URL/pipeline-model-converter/validate
O comando acima é uma versão ligeiramente modificada de https://github.com/jenkinsci/pipeline-model-definition-plugin/wiki/Validating-(or-linting)-a-Declarative-Jenkinsfile-from-the-command-line
fonte
Além do recurso de reprodução que outros já mencionaram (o mesmo se aplica à sua utilidade!), Achei o seguinte útil também:
fonte
Coloque sua chave SSH no seu perfil Jenkins e use o linter declarativo da seguinte maneira:
Isso fará uma análise estática no seu arquivo Jenkins. No editor de sua escolha, defina um atalho de teclado que execute esse comando automaticamente. No Código do Visual Studio, que é o que eu uso, vá para Tarefas> Configurar Tarefas e use o seguinte JSON para criar um comando Validar Jenkinsfile :
fonte
Estou usando o replay futuro, para fazer algumas atualizações e executar rapidamente.
fonte
Com algumas limitações e para pipelines com script, eu uso esta solução:
fonte