Skip to content

Jenkins

Jenkins é um servidor de automação de código aberto, baseado em Java e possui um enormidade de plugins que auxiliam na criação, implantação e automação dos projetos. Outra característica peculiar é que Jenkins foi desenvolvido para Integração Contínua (Continuous Integration – CI) e Entrega Contínua (Continuous Delivery – CD), conceitos que juntos com uma cultura DevOps aceleram a conclusão de softwares. Tem como uma função principal atuar em toda a pipeline de entrega do software: Construção, Documentação, Teste, Implantação e Análise, facilitando os trabalhos do desenvolvedor. Utilizaremos o Docker para efetuar a montagem do ambiente de desenvolvimento, para tal siga os passos de instalação do Docker ou 60portunities.

Pré-instalação de plugins

Esta ferramenta irá executar downloads de centros de atualização, e o acesso à Internet é necessário para os centros de atualização padrão. Para instalar os plugins é possível passar um arquivo que contém esse conjunto de plugins (com ou sem quebras de linha). Por padrão, os plugins serão atualizados se não tiverem sido atualizados manualmente e se a versão da imagem do estivador for mais recente do que a versão no contêiner.As versões instaladas pela imagem são rastreadas através de um arquivo marcador.

Para listar os plugins instalados no jenkins, Painel de controle → Gerenciar Jenkins → Console de script, na console cole:

println "Lista de plugins instalados"
def plugins = jenkins.model.Jenkins.instance.getPluginManager().getPlugins()
plugins.each {
  println "[${it.getShortName()}]: ${it.getVersion()}" 
}
println "\nCantidad de plugins instalados: ${plugins.size()}"
  • Para forçar atualizações de plugins que foram atualizados manualmente, execute a imagem do estivador com : -e PLUGINS_FORCE_UPGRADE=true
  • Efetue a criação de um arquivo plugins.txt, como as informações abaixo:
  • ansible-tower:0.16.0
  • ansible:403.v8d0ca_dcb_b_502
  • ant:511.v0a_a_1a_334f41b_
  • antisamy-markup-formatter:162.v0e6ec0fcfcf6
  • apache-httpcomponents-client-4-api:4.5.14-208.v438351942757
  • apache-httpcomponents-client-5-api:5.4-118.v199115451c4d
  • artifactory:4.0.8
  • asm-api:9.7.1-97.v4cc844130d97
  • authentication-tokens:1.119.v50285141b_7e1
  • aws-credentials:231.v08a_59f17d742
  • aws-java-sdk-ec2:1.12.772-474.v7f79a_2046a_fb_
  • aws-java-sdk-minimal:1.12.772-474.v7f79a_2046a_fb_
  • backup:1.6.1
  • basic-branch-build-strategies:81.v05e333931c7d
  • blueocean-bitbucket-pipeline:1.27.16
  • blueocean-commons:1.27.16
  • blueocean-config:1.27.16
  • blueocean-core-js:1.27.16
  • blueocean-dashboard:1.27.16
  • blueocean-display-url:2.4.3
  • blueocean-events:1.27.16
  • blueocean-git-pipeline:1.27.16
  • blueocean-github-pipeline:1.27.16
  • blueocean-i18n:1.27.16
  • blueocean-jwt:1.27.16
  • blueocean-personalization:1.27.16
  • blueocean-pipeline-api-impl:1.27.16
  • blueocean-pipeline-editor:1.27.16
  • blueocean-pipeline-scm-api:1.27.16
  • blueocean-rest-impl:1.27.16
  • blueocean-rest:1.27.16
  • blueocean-web:1.27.16
  • bouncycastle-api:2.30.1.78.1-248.ve27176eb_46cb_
  • branch-api:2.1178.v969d9eb_c728e
  • caffeine-api:3.1.8-133.v17b_1ff2e0599
  • checks-api:2.2.1
  • cloud-stats:336.v788e4055508b_
  • cloudbees-bitbucket-branch-source:888.v8e6d479a_1730
  • cloudbees-folder:6.955.v81e2a_35c08d3
  • command-launcher:115.vd8b_301cc15d0
  • commons-compress-api:1.26.1-2
  • commons-httpclient3-api:3.1-3
  • commons-lang3-api:3.17.0-84.vb_b_938040b_078
  • commons-text-api:1.12.0-129.v99a_50df237f7
  • config-file-provider:978.v8e85886ffdc4
  • copyartifact:749.vfb_dca_a_9b_6549
  • credentials-binding:681.vf91669a_32e45
  • credentials:1384.vf0a_2ed06f9c6
  • dark-theme:479.v661b_1b_911c01
  • data-tables-api:2.1.8-1
  • display-url-api:2.204.vf6fddd8a_8b_e9
  • docker-commons:443.v921729d5611d
  • docker-compose-build-step:1.0
  • docker-java-api:3.4.0-94.v65ced49b_a_7d5
  • docker-plugin:1.7.0
  • docker-slaves:1.0.7
  • docker-workflow:580.vc0c340686b_54
  • durable-task:577.v2a_8a_4b_7c0247
  • echarts-api:5.5.1-2
  • eddsa-api:0.3.0-4.v84c6f0f4969e
  • email-ext:1844.v3ea_a_b_842374a_
  • external-monitor-job:215.v2e88e894db_f8
  • favorite:2.221.v19ca_666b_62f5
  • font-awesome-api:6.6.0-2
  • git-client:5.0.0
  • git-parameter:0.9.19
  • git-server:126.v0d945d8d2b_39
  • git:5.5.2
  • github-api:1.321-468.v6a_9f5f2d5a_7e
  • github-branch-source:1797.v86fdb_4d57d43
  • github-organization-folder:1.6
  • github:1.40.0
  • gradle:2.13.1
  • gson-api:2.11.0-85.v1f4e87273c33
  • handy-uri-templates-2-api:2.1.8-30.v7e777411b_148
  • htmlpublisher:1.36
  • instance-identity:201.vd2a_b_5a_468a_a_6
  • ionicons-api:74.v93d5eb_813d5f
  • jackson2-api:2.17.0-379.v02de8ec9f64c
  • jakarta-activation-api:2.1.3-1
  • jakarta-mail-api:2.1.3-1
  • javadoc:280.v050b_5c849f69
  • javax-activation-api:1.2.0-7
  • javax-mail-api:1.6.2-10
  • jaxb:2.3.9-1
  • jdk-tool:80.v8a_dee33ed6f0
  • jenkins-design-language:1.27.16
  • jersey2-api:2.44-151.v6df377fff741
  • jjwt-api:0.11.5-112.ve82dfb_224b_a_d
  • joda-time-api:2.13.0-93.v9934da_29b_a_e9
  • jquery:1.12.4-1
  • jquery3-api:3.7.1-2
  • jsch:0.2.16-86.v42e010d9484b_
  • json-api:20240303-101.v7a_8666713110
  • json-path-api:2.9.0-118.v7f23ed82a_8b_8
  • junit:1304.vc85a_b_ca_96613
  • ldap:725.v3cb_b_711b_1a_ef
  • mailer:488.v0c9639c1a_eb_3
  • matrix-auth:3.2.2
  • matrix-project:839.vff91cd7e3a_b_2
  • maven-plugin:3.23
  • metrics:4.2.21-451.vd51df8df52ec
  • mina-sshd-api-common:2.14.0-133.vcc091215a_358
  • mina-sshd-api-core:2.14.0-133.vcc091215a_358
  • okhttp-api:4.11.0-172.vda_da_1feeb_c6e
  • pam-auth:1.11
  • periodicbackup:2.0
  • pipeline-build-step:540.vb_e8849e1a_b_d8
  • pipeline-github-lib:61.v629f2cc41d83
  • pipeline-graph-analysis:216.vfd8b_ece330ca_
  • pipeline-input-step:495.ve9c153f6067b_
  • pipeline-maven-api:1457.vf7a_de13b_c0d4
  • pipeline-maven:1457.vf7a_de13b_c0d4
  • pipeline-milestone-step:119.vdfdc43fc3b_9a_
  • pipeline-model-api:2.2214.vb_b_34b_2ea_9b_83
  • pipeline-model-declarative-agent:1.1.1
  • pipeline-model-definition:2.2214.vb_b_34b_2ea_9b_83
  • pipeline-model-extensions:2.2214.vb_b_34b_2ea_9b_83
  • pipeline-rest-api:2.34
  • pipeline-stage-step:312.v8cd10304c27a_
  • pipeline-stage-tags-metadata:2.2214.vb_b_34b_2ea_9b_83
  • pipeline-stage-view:2.34
  • pipeline-utility-steps:2.18.0
  • plain-credentials:183.va_de8f1dd5a_2b_
  • plugin-util-api:5.1.0
  • pubsub-light:1.18
  • resource-disposer:0.24
  • scm-api:696.v778d637b_a_762
  • script-security:1365.v4778ca_84b_de5
  • snakeyaml-api:2.3-123.v13484c65210a_
  • sse-gateway:1.27
  • ssh-agent:376.v8933585c69d3
  • ssh-credentials:343.v884f71d78167
  • ssh-slaves:2.973.v0fa_8c0dea_f9f
  • ssh-steps:2.0.68.va_d21a_12a_6476
  • sshd:3.330.vc866a_8389b_58
  • structs:338.v848422169819
  • theme-manager:262.vc57ee4a_eda_5d
  • thinBackup:2.1.1
  • timestamper:1.27
  • token-macro:400.v35420b_922dcb_
  • trilead-api:2.147.vb_73cc728a_32e
  • variant:60.v7290fc0eb_b_cd
  • windows-azure-storage:419.v4046cd70d2e3
  • workflow-aggregator:600.vb_57cdd26fdd7
  • workflow-api:1336.vee415d95c521
  • workflow-basic-steps:1058.vcb_fc1e3a_21a_9
  • workflow-cps-global-lib:612.v55f2f80781ef
  • workflow-cps:3975.v567e2a_1ffa_22
  • workflow-durable-task-step:1371.vb_7cec8f3b_95e
  • workflow-job:1436.vfa_244484591f
  • workflow-multibranch:795.ve0cb_1f45ca_9a_
  • workflow-scm-step:427.v4ca_6512e7df1
  • workflow-step-api:678.v3ee58b_469476
  • workflow-support:926.v9f4f9b_b_98c19
  • ws-cleanup:0.47

Dockerfile

FROM jenkins/jenkins:lts-jdk17
LABEL Author="60portunities" 
USER root
RUN apt-get update && apt-get install -y make git
RUN mkdir /srv/backup && chown jenkins:jenkins /srv/backup
USER jenkins
RUN echo lts-jdk17 > /usr/share/jenkins/ref/jenkins.install.UpgradeWizard.state
RUN echo lts-jdk17 > /usr/share/jenkins/ref/jenkins.install.InstallUtil.lastExecVersion
COPY --chown=jenkins:jenkins plugins.txt /usr/share/jenkins/ref/plugins.txt
RUN jenkins-plugin-cli -f /usr/share/jenkins/ref/plugins.txt
COPY --chown=jenkins:jenkins config_jenkins /var/jenkins_home

Script Shell

#!/bin/bash
docker system df  # 
docker build . --tag <usuario-dockerhub.com>/devops-jenkins:1.0.0
#docker build . --tag <usuario-dockerhub.com>/devops-jenkins:1.0.0
docker login <usuario-dockerhub.com>
docker push <usuario-dockerhub.com>/devops-jenkins:1.0.0
docker run --detach --name <usuario-dockerhub.com>-jenkins -e PLUGINS_FORCE_UPGRADE=true -p 8082:8080 <usuario-dockerhub.com>/devops-jenkins:1.0.0

Executando

Para publicar no docker-hub e posteriormente executa-lo efetuamos os seguintes passos:

  • Acesse o repositório: https://hub.docker.com/repositories/<usuario-dockerhub.com>
  • Efetua o login no docker-hub: docker login <usuario-dockerhub.com>
  • Cria a imagem : docker build . --tag <usuario-dockerhub.com>/devops-jenkins:1.0.0
  • Publica a imagem no Docker-hub: docker push <usuario-dockerhub.com>/devops-jenkins:1.0.0
  • Para remover a imagem : docker build . --tag <usuario-dockerhub.com>/devops-jenkins:1.0.0
  • Agora vamos subir container Jenkins: docker run --detach --name docker-jenkins -v jenkins_home:/var/jenkins_home -v jenkins_backup:/srv/backup -p 8082:8080 <usuario-dockerhub.com>/devops-jenkins:1.0.0
  • Listar as imagens no docker: docker images
  • Listar Containers em Execução: docker ps
  • Listar Todos os Containers: docker ps -a
  • Logs: docker logs <id|name>
  • Para remover containers: docker rm <id|name>
  • Para remover imagens: docker rmi <id|name>