Esse ambiente de desenvolvimento baseado em docker é para novos colaboradores dos avisos de Jenkins e plugins de cobertura para reduzir o tempo inicial de aceleração. Consiste nas seguintes partes:
Apresentei esse ambiente de desenvolvimento em um Jenkins Online Meetup registrado em janeiro de 2022.
O ambiente de desenvolvimento foi testado no MacOS, o Ubuntu Linux (em uma máquina virtual em execução no macOS) e no Windows. Solicitações de tração são sempre bem -vindas.
Versão mais recente das seguintes ferramentas:
Além disso, são necessárias as versões mais recentes das seguintes ferramentas:
Se ocorrerem erros, observe as dicas de solução de problemas abaixo. Para usuários do Windows: use o Git Bash para executar os scripts do shell.
./bin/clone-repos-https.sh (ou ./bin/clone-repos.sh se você já configurou uma chave SSH no github). Você deve esperar até que a construção seja bem -sucedida antes de abrir o Intellij, caso contrário, o Intellij não encontrará todas as classes geradas. Os usuários da primeira vez que o Maven precisam esperar alguns minutos até que todas as dependências sejam baixadas do Maven Central.warnings-ng-plugin-devenv./bin/jenkins.sh . Este comando constrói a imagem do Jenkins Docker, baixa todos os plugins registrados e inicializa o espaço de trabalho Jenkins com alguns trabalhos. Isso também requer alguns minutos (veja a etapa 9). Se todos os downloads tiveram sucesso, mas a instalação falhou devido a erros, corrija -os e execute mvn -V -U -e install –DskipTests para tentar novamente a instalação.
Se o erro "Linha de comando for muito longa". Ocorre, execute as seguintes etapas:
@argfile (Java9+)Se os testes falharem devido a um tempo limite do teste de Jenkins, execute as seguintes etapas:
-Djenkins.test.timeout=1000 . Isso aumenta o limite de tempo limite para 1000 segundos. Você pode usar um script de shell simples ( ./bin/clone-repos.sh ) para clonar e construir os módulos em uma única etapa. O script verifica os seguintes módulos usando o protocolo Git SSH. Isso requer que você tenha registrado sua chave pública no GitHub. Se você não tiver chaves no github, alternativamente, use o script ./bin/clone-repos-https.sh que usa o protocolo HTTPS.
Quando você planeja fornecer uma solicitação de tração para um dos plugins, é necessário criar um garfo do repositório e fazer todas as alterações neste garfo. Criei uma documentação de colaboração do Github no meu projeto de estilo de codificação.
Intellij (Ultimate) é o principal ambiente de desenvolvimento apoiado para o plug -in de avisos. Um projeto predefinido é armazenado na pasta .idea que faz referência a todos os módulos do plug -in de avisos. Este projeto contém predefinições do meu estilo de codificação e algumas outras configurações úteis.
Deveria ser possível usar outros IDEs (Eclipse, NetBeans, Código do Visual Studio) também.
Use as configurações de execução Intellij fornecidas All in [module-name] para executar os testes de unidade e integrações do módulo correspondente. Essas configurações já estão configuradas para registrar a cobertura da filial dos pacotes de módulos correspondentes (use a Run with Coverage ).
Antes de depurar suas alterações, primeiro você precisa descobrir onde seu código está em execução: no controlador ou no agente? Se você não tiver certeza, execute os dois depuradores remotos, defina alguns pontos de interrupção e aguarde o depurador correspondente pare.
A configuração do Docker Compose inicia o controlador Jenkins automaticamente no modo 'Debug', ou seja, está ouvindo solicitações de depuração remota. Se o seu código for executado no controlador, você precisará anexar um depurador remoto no localhost:8000 (mapeado para a mesma porta no contêiner do docker). Use o Jenkins Controller (Remote Debugger) Configuração de depuração para conectar um depurador no Intellij.
A configuração do Docker Compose também inicia o agente Jenkins automaticamente no modo 'Debug', ou seja, está ouvindo solicitações de depuração remota. Anexe um depurador remoto no localhost:8001 (mapeado para a mesma porta no contêiner do docker) para depurar o código que está em execução no agente. Use a configuração de depuração Jenkins Agent (Remote Debugger) para conectar um depurador no Intellij.
Os testes da interface do usuário podem ser iniciados usando os UI Tests [module] (Firefox) ou UI Tests [module] (Chrome) . Observe que os dois lançadores exigem uma instalação dos drivers de Selenium correspondentes. Se esses drivers não estiverem instalados em /opt/bin em sua máquina local, você precisará adaptar as configurações do lançador para corresponder à sua configuração.
Todos os testes de interface do usuário requerem execução em um determinado assunto em teste (ou seja, Jenkins em teste, JUT), consulte o projeto de chicote de teste de aceitação para obter mais detalhes.
Esse ambiente de desenvolvimento contém uma instalação Jenkins personalizada para a qual você pode implantar seus plugins modificados, para que você possa ver suas alterações diretamente em alguns trabalhos pré -configurados que usam esses plugins.
Inicie o controlador Jenkins fornecido neste projeto (você precisa instalar o Docker e o Docker-Compose). Abra um terminal e execute ./jenkins.sh na pasta de nível superior. Este comando é um invólucro para docker-compose up : ele usa as configurações corretas de usuário e grupo para que as permissões do volume do docker para a pasta inicial de Jenkins sejam definidas corretamente. Este comando cria um contêiner do docker para o controlador Jenkins e um para o agente Java. Isso exigirá algum tempo quando chamado pela primeira vez, pois as imagens do Docker serão compostas. Depois que as imagens foram criadas, os dois recipientes a seguir serão iniciados:
Você pode abrir Jenkins no URL http: // localhost: 8080/. Use as seguintes credenciais para fazer login como administrador:
O diretório inicial do controlador Jenkins (Jenkins_home) é montado como um volume do docker. Ou seja, é visível no host como um diretório normal em ./docker/volumes/jenkins-controller . Ele sobreviverá às sessões e pode ser alterado diretamente no host, consulte a documentação oficial para obter detalhes. Isso ajuda a inspecionar os arquivos que foram criados pelo controlador Jenkins.
Devido a um problema de desempenho no plug -in DSL de Jobins, a configuração da nova instância de Jenkins é muito lenta. Portanto, faz sentido remover a configuração do trabalho do seu arquivo jenkins.yaml após a criação dos trabalhos. Você pode substituir o conteúdo do arquivo ./docker/volumes/jenkins-home/jenkins.yaml em sua recém-criada instância de Jenkins com o conteúdo em jenkins-no-jobs.yaml .
Os volumes sob macOS são bastante lentos. No meu MacBook, executando o trabalho Jenkins fornecido do analysis-model no recipiente do Docker é mais lento do que executar o mesmo trabalho Jenkins em um contêiner do Docker que está sendo executado em uma máquina virtual Linux no mesmo MacBook (parece um tipo de absurdo?).
Depois de terminar suas alterações de desenvolvimento local (ou seja, os testes de unidade são todos verdes), você deve testar suas alterações em Jenkins. Isso também ajuda a preparar um teste de integração ou teste de interface do usuário para sua alteração.
Se você tiver apenas alterações no módulo analysis-model (e não adicionou novos métodos de API), precisará reconstruir e instalar o módulo Maven analysis-model.jar e depois reconstruir o Jenkins Wrapper Plupin analysis-model-api-plugin . Este plug -in precisa ser implantado para Jenkins.
Esse processo é simplificado executando o script ./bin/go.sh no módulo analysis-model , ele instalará o módulo analysis-model.jar no seu repositório MAVEN local. Em seguida, este script criará o plug -in real e o implantará para Jenkins.
Se você tiver apenas alterações no plug-in de avisos-ng, precisará reconstruir os warnings-ng.jpi do plugin Jenkins e implantá-lo em Jenkins. Você pode usar um dos seguintes scripts de shell para esta tarefa:
./bin/clean.sh : constrói o plug -in usando mvn clean install e o implanta no sucesso na instância de Jenkins../bin/go.sh : constrói o plug -in usando mvn clean install -DskipITs (ignora os testes de integração) e o implanta no sucesso no Instace Jenkins../bin/skip.sh : constrói o plug -in usando mvn clean install -DskipTests (ignora todos os testes e análise estática) e o implanta no sucesso na instância de Jenkins.PENDÊNCIA
Se você tiver alterações em um dos plug -ins fumantes (implementação da API ou GIT), precisará reconstruir esses plugins Jenkins e implantá -los na instância de Jenkins.
Para simplificar esse processo, execute o script ./go.sh Na pasta de plug -in correspondente, ele criará o plug -in e o implantará no sucesso do Jenkins.
Antes de fazer mudanças de quebra, entre em contato comigo. Normalmente, é possível tornar as alterações compatíveis com versões anteriores.
Os scripts de compilação da última seção também podem ser iniciados usando um dos lançadores Intellij Build and Deploy [module-name] . Esses lançadores criam o plug -in correspondente e o implantam em Jenkins.
Os testes da interface do usuário podem ser iniciados usando uma configuração do Launcher Intellij ou usando um script de linha de comando. Como já mencionado, todos os testes de interface do usuário precisam ser executados em um determinado assunto em teste. No nosso caso, usamos a versão mais recente do Jenkins LTS e o conjunto predefinido de plugins da nossa imagem do Docker.
Os testes da interface do usuário podem ser iniciados usando os UI Tests Warnings (Firefox) ou UI Warnings Tests (Chrome) . Observe que os dois lançadores exigem uma instalação dos drivers de Selenium correspondentes. Se esses drivers não estiverem instalados em /opt/bin em sua máquina local, você precisará adaptar as configurações do lançador para corresponder à sua configuração.
Você também pode iniciar os testes da interface do usuário usando os scripts de shell fornecidos testFirefox.sh ou testChrome.sh . Observe que você pode precisar adaptar esses scripts também (consulte a seção anterior).