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>