Bom dia, Habr !
Hoje, gostaria de compartilhar uma das maneiras de usar o Active Choices Plugin para tornar a tarefa no Jenkins a mais unificada e compreensível para o usuário.
1. Introdução
Uma abreviação como DevOps não é mais algo novo para a comunidade de TI. Para muitas pessoas, a frase "make DevOps" está associada a algum tipo de botão mágico; quando você clica nele, o código do aplicativo se transforma automaticamente em um aplicativo implantado e testado (tudo é realmente mais complicado, mas abstraímos todos os processos).
Portanto, recebemos um pedido para criar um botão tão mágico para que os administradores possam implantar o aplicativo com um clique. Existem vários tipos de implementação desta tarefa: desde a criação de um bot para qualquer um dos mensageiros até o desenvolvimento de um aplicativo separado. No entanto, o objetivo de tudo isso é o mesmo - tornar o lançamento da montagem e a implantação do aplicativo o mais transparente e conveniente.
No nosso caso, usaremos o Jenkins .
Desafio
Crie um trabalho conveniente do Jenkins que executará a montagem e / ou a implantação do microsserviço selecionado de uma determinada versão.
Dados de entrada
Temos vários repositórios que contêm o código fonte de vários microsserviços.
Definição de Parâmetros
Os seguintes parâmetros devem inserir a entrada do nosso trabalho:
- A URL do repositório com o código de microsserviço que queremos coletar e implantar ao iniciar o trabalho.
- ID da confirmação a partir da qual a montagem ocorrerá.
COMO ESTÁ
A maneira mais fácil de realizar a tarefa é criar dois parâmetros do tipo String.
Nesse caso, o usuário precisará inserir manualmente o caminho para o repositório e confirmar o ID, o que, você vê, não é totalmente conveniente.
COMO ESTÁ
Agora vamos tentar um tipo diferente de parâmetro para considerar todas as suas vantagens.
Crie o primeiro parâmetro do tipo Parâmetro de escolha, o segundo - Parâmetro de referência reativa de opções ativas. No parâmetro com o tipo Choice, adicionaremos manualmente os nomes dos repositórios em que o código de nossos microsserviços está armazenado no campo Opções.
Se o público gostar deste artigo, no próximo artigo, descreverei o processo de configuração de tarefas no Jenkins usando a descrição através do código (Configuração como código), ou seja, não precisamos inserir manualmente os nomes dos repositórios e criar parâmetros, tudo acontecerá automaticamente (nosso código receberá uma lista de repositórios do SCM e criará um parâmetro com esta lista).
Os valores do segundo parâmetro serão preenchidos dinamicamente, dependendo do valor que o primeiro parâmetro receber (test1 ou test2), porque cada repositório possui sua própria lista de confirmações.
O parâmetro de referência reativa de opções ativas possui os seguintes campos a serem preenchidos:
- Nome - o nome do parâmetro.
- Script - o código que será executado sempre que o valor do parâmetro no campo Parâmetro referenciado for alterado (no nosso caso, quando escolhermos entre test1 e test2).
- Descrição - uma breve descrição do parâmetro.
- Tipo de escolha - o tipo do objeto retornado pelo script (no nosso caso, retornaremos o código html).
- Parâmetro referenciado - o nome do parâmetro, ao alterar o valor em que o código da seção Script será executado.
Prosseguimos diretamente no preenchimento do campo principal neste parâmetro. Nos são oferecidos dois tipos de implementação: usando Groovy Script ou Scriptler Script .
Selecionamos o primeiro, já que o Scriptler é apenas um plug-in que salva os scripts que você já escreveu e permite que você os use em outras tarefas sem ter que copiar novamente.
Código Groovy para obter todas as confirmações do repositório selecionado:
AUTH = " Base64" GIT_URL = "url SCM (https://bitbucket.org/)" PROJECT_NAME = " , " def htmlBuild() { html = """ <html> <head> <meta charset="windows-1251"> <style type="text/css"> div.grayTable { text-align: left; border-collapse: collapse; } .divTable.grayTable .divTableCell, .divTable.grayTable .divTableHead { padding: 0px 3px; } .divTable.grayTable .divTableBody .divTableCell { font-size: 13px; } </style> </head> <body> """ def commitOptions = "" getCommitsForMicroservice(MICROSERVICE_NAME).each { commitOptions += "<option style='font-style: italic' value='COMMIT=${it.getKey()}'>${it}</option>" } html += """<p style="display: inline-block;"> <select id="commit_id" size="1" name="value"> ${commitOptions} </select></p></div>""" html += """ </div> </div> </div> </body> </html> """ return html } def getCommitsForMicroservice(microserviceRepo) { def commits = [:] def endpoint = GIT_URL + "/rest/api/1.0/projects/${PROJECT_NAME}/repos/${microserviceRepo}/commits" def conn = new URL(endpoint).openConnection() conn.setRequestProperty("Authorization", "Basic ${AUTH}") def response = new groovy.json.JsonSlurper().parseText(conn.content.text) response.values.each { commits.put(it.displayId, it.message) } return commits } return htmlBuild()
Sem entrar em detalhes, esse código recebe o nome do microsserviço (MICROSERVICE_NAME) como uma entrada, envia uma solicitação ao Bitbucket (método getCommitsForMicroservice ) usando sua API e recebe a mensagem de identificação e confirmação de todos os commits desse microsserviço.
Como mencionado anteriormente, esse código deve retornar o html que será exibido na página Compilar com Parâmetros no Jenkins, portanto, agrupamos todos os valores recebidos do Bitbucket na lista e adicionamos para selecionar.
Depois de concluir todas as etapas, devemos obter uma página tão bonita, Construir com parâmetros .
Se você selecionar microsserviço test1:
Se você escolher o microsserviço test2:
Concorde que será muito mais conveniente para o usuário interagir com sua tarefa dessa maneira do que copiar o URL a cada vez e procurar o ID de confirmação necessário.
PS Este artigo fornece um exemplo muito simplificado, que pode não ter aplicação prática neste formulário, pois os conjuntos têm parâmetros muito mais diferentes, mas o objetivo deste artigo era mostrar o funcionamento da ferramenta e não fornecer uma solução funcional.
PSS Como escrevi anteriormente, se este artigo for útil, o próximo será sobre a configuração dinâmica de tarefas do Jenkins usando código .