Liberación y reversión de código basado en Jenkins CICD

 

Puntos de conocimiento del caso


1. Introducción a Jenkins

Jenkins, anteriormente conocido como Hudson, cambió a su nombre actual en 2011. Es una herramienta de software de código abierto para la integración continua. Sitio web oficial: https://jenkins.io/.

Jenkins puede monitorear los problemas existentes en el proceso de integración continua, proporcionar archivos de registro detallados y funciones de recordatorio, y también puede usar gráficos para mostrar visualmente la tendencia y la estabilidad de la construcción del proyecto.

2. Introducción a Maven

Maven Project Object Model (POM) es una herramienta de gestión de proyectos de software que puede gestionar la construcción, los informes y la documentación del proyecto a través de una pequeña información de descripción.

3. Introducción a Docker

Docker es un motor contenedor de aplicaciones de código abierto que permite a los desarrolladores empaquetar sus aplicaciones y dependencias en cualquier imagen portátil y luego publicarlas en cualquier máquina Linux popular.

4. Introducción a Ansible

Ansible es una herramienta automatizada de operación y mantenimiento desarrollada en base a Python que implementa funciones como la configuración del sistema por lotes, la implementación de programas por lotes y la ejecución de comandos por lotes.

Entorno del caso


Sistema operativo

dirección IP

nombre de la CPU

Role

CentOS 7.5

192.168.200.111

git

Registro Git/Docker

CentOS 7.5

192.168.200.112

jenkins

Jenkins

CentOS 7.5

192.168.200.113

estibador

Estibador

Publicar proyectos Java basados ​​en Jenkins+Git+Docker


Opera en todos los hosts

[root@localhost ~]# setenforce 0

[raíz@localhost ~]# iptables -F

[root@localhost ~]# systemctl detener firewalld

[root@localhost ~]# systemctl detener NetworkManager

Requisitos del caso

Después de que el desarrollador envíe el código desarrollado al repositorio de versiones de código Git, haga clic en el botón de tarea de Jenkins para extraer automáticamente el código, compilarlo, compilarlo e implementarlo automáticamente en el servidor web. Los usuarios pueden acceder a la última versión del proyecto.

1. Configurar el almacén de Git


Git es un sistema de control de versiones distribuido de código abierto que puede manejar de manera efectiva y rápida la gestión de versiones de proyectos desde pequeños hasta muy grandes. Actualmente es el sistema de gestión de versiones de código más utilizado en las empresas.

Utilice yum para instalar Git y configurarlo

[root@git ~]# yum -y instalar git

[root@git ~]# usuarioadd git

[root@git ~]# echo "123456" | contraseña --stdin git

Configure el host de Jenkins para extraer el repositorio de Git sin interacción

Cree un par de claves en el host de Jenkins y agregue el contenido id_rsa.pub al archivo /home/git/.ssh/authorized_keys en el servidor Git.

[root@jenkins ~]# ssh-keygen # Simplemente presione Enter hasta el final

[root@jenkins ~]# ssh-copy-id [email protected]

Pruebe el inicio de sesión sin interacción

[raíz@jenkins ~]# ssh [email protected]

[git@git ~]$ salir

desconectar

Conexión al 192.168.200.111 cerrada.

Para crear un repositorio de versiones de prueba en el servidor Git, generalmente la forma estandarizada para Git es usar .git como sufijo. como sigue:

[raíz@git ~]# su - git

[git@localhost ~]$ mkdir sonda.git

[git@localhost ~]$ cd sonda.git

[git@localhost probe.git]$ git --bare init

Inicialice un repositorio Git vacío en /home/git/probe.git/

[git@localhost probe.git]$ salir

desconectar

Extraiga el sistema de blog Java de código abierto psi-probe de Github.

[root@jenkins ~]# git clone https://github.com/psi-probe/psi-probe.git

[root@jenkins ~]# cd psi-probe/

Elimine la dirección de inserción anterior y agregue la nueva dirección de confirmación de Git. como sigue:

 [root@jenkins psi-probe]# git remoto eliminar origen

[root@jenkins psi-probe]# git remoto agregar origen [email protected]:/home/git/probe.git

Envíe el código al repositorio de Git y cree una etiqueta. como sigue:

[root@jenkins psi-probe]# toque psi-probe-web/src/main/webapp/a.html

[root@jenkins psi-probe]# git add.

[root@jenkins psi-probe]# git config --global user.email "[email protected]"

[root@jenkins psi-probe]# git config --global nombre.usuario "crushlinux"

[root@jenkins psi-probe]# git commit -m "a"

[maestro 5354df1] un

 1 archivo modificado, 0 inserciones(+), 0 eliminaciones(-)

 crear modo 100644 web/src/main/webapp/a.html 

[root@jenkins psi-probe]# git tag 1.0.0
[root@jenkins psi-probe]# git push origen 1.0.0


Objetos enumerados: 40775, hecho.
Recuento de objetos en: 100% (40775/40775), hecho.
Compresión usando 2 hilos.
Objetos comprimidos en: 100% (12232/12232), hecho.
Objetos escritos en: 100% (40775/40775). , 23,41 MiB | 43,34 MiB/s, completado.
Total 40775 (diferencia 24175), reutilización 40740 (diferencia 24160)
A 192.168.200.111:/home/git/probe.git
 * [nueva etiqueta] 1.0.0 -> 1.0.0

2. Configurar el servidor Docker


[Instale Docker y opere en todos los hosts]

Verifique el entorno de instalación e instálelo.

[root@localhost ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

[root@localhost ~]# yum -y instalar yum-utils dispositivo-mapper-persistent-data lvm2

[root@localhost ~]# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

[root@localhost ~]# ls /etc/yum.repos.d/

copia de seguridad CentOS-aliyun.repo CentOS-Media.repo docker-ce.repo

[root@localhost ~]# yum -y instalar docker-ce

[root@localhost ~]# systemctl iniciar ventana acoplable

[root@localhost ~]# systemctl habilitar ventana acoplable

[root@docker ~]# versión de Docker

Configuración del host Git Alibaba Cloud Image Accelerator

[root@git ~]# cat << FIN > /etc/docker/daemon.json

{

        "espejos de registro":[ "https://nyakyfun.mirror.aliyuncs.com" ]

}

FIN

[root@git ~]# systemctl daemon-recarga

[root@git ~]# systemctl reiniciar la ventana acoplable

3. Implementar el almacén espejo


Docker Hub es el almacén público oficial predeterminado de Docker ; si los usuarios desean crear su propio almacén espejo privado, se proporciona el espejo de registro oficial, lo que hace que sea muy sencillo construir un almacén espejo privado.

Implementar el almacén privado de Docker en git

[root@git ~]# docker run -d -v /opt/registry:/var/lib/registry -p 5000:5000 --restart=always --name registro registro

[root@git ~]# ventana acoplable ps -l

[root@git ~]# imágenes acoplables

Disponibilidad del registro de prueba

Dado que se accede a la CLI de Docker a través de HTTPS de forma predeterminada y el registro implementado no proporciona HTTPS, debe agregar confianza HTTP al host de Docker de la imagen de extracción.

[¡Operación en hosts Docker y jenkins! ! !

[root@docker ~]# vim /etc/docker/daemon.json

{"registros-inseguros":["192.168.200.111:5000"]}

[root@docker ~]# systemctl daemon-reload

[root@docker ~]# systemctl reiniciar ventana acoplable

Etiquetar y enviar la imagen al registro.

  [root@docker ~]# cat centos-7-x86_64.tar.gz | importación de ventana acoplable - centos: 7

[root@docker ~]# etiqueta acoplable centos:7 192.168.200.111:5000/centos:7

[root@docker ~]# imágenes de Docker 

[root@docker ~]# docker push 192.168.200.111:5000/centos:7 

Ver la imagen cargada por el registro:

[root@docker ~]# curl http://192.168.200.111:5000/v2/_catalog

{"repositorios":["centos"]}

[root@docker ~]# curl http://192.168.200.111:5000/v2/centos/tags/list

{"nombre":"centos","tags":["7"]}

Descargue la imagen del registro:

[root@docker ~]# docker rmi 192.168.200.111:5000/centos:7

[root@docker ~]# docker pull 192.168.200.111:5000/centos:7

[root@localhost ~]# imágenes acoplables

Construir la imagen base de Tomcat

Instale JDK en jenkins y hosts acoplables:

[root@docker ~]# tar xf jdk-8u191-linux-x64.tar.gz

[ root @ docker ~ ] # mv jdk1 .8.0_191 // usr / local / java

[root@docker ~]# ls -l apache-tomcat-8.5.40.tar.gz

[root@docker ~]# vim Dockerfile

DESDE centos:7

MANTENEDOR Crush Linux

VERSIÓN ENV=8.5.40

ENV JAVA_HOME /usr/local/java

AÑADIR ./apache-tomcat-${VERSIÓN}.tar.gz /tmp

EJECUTAR cd /tmp && \

    mv apache-tomcat-${VERSIÓN} /usr/local/tomcat && \

    rm -rf apache-tomcat-${VERSIÓN}.tar.gz /usr/local/tomcat/webapps/* && \

    mkdir /usr/local/tomcat/webapps/ROOT

EXPONER 8080

CMD ["/usr/local/tomcat/bin/catalina.sh", "ejecutar"]

[root@docker ~]# docker build -t 192.168.200.111:5000/tomcat-85.

[root@docker ~]# imágenes de Docker

Construya la imagen y cárguela en el registro:

[root@docker ~]# docker extrae tomcat

[root@docker ~]# etiqueta acoplable tomcat 192.168.200.111:5000/tomcat-85

[root@docker docker-tomcat]# docker push 192.168.200.111:5000/tomcat-85

5. Configurar el entorno Jenkins


Jenkins es un proyecto de software de código abierto y una herramienta de integración continua desarrollada en base a Java, que se utiliza para la compilación, implementación, prueba, etc. Jenkins también es una herramienta de integración multiplataforma, compatible con la mayoría de las plataformas principales, y la instalación es muy simple: se instalará aquí implementando un paquete de guerra.

Dirección de descarga del sitio web oficial: https://jenkins.io/download/.

Modificar el usuario que ejecuta jenkins

[raíz@jenkins ~]# vim /etc/sysconfig/jenkins

JENKINS_USER="raíz"

[root@jenkins ~]# reinicio de jenkins

Reiniciando jenkins (a través de systemctl):            

Configuración de la herramienta global de configuración de Jenkins

En la página de inicio de Jenkins, haga clic en "Administrar Jenkins" -> "Configuración global de herramientas" -> "JDK" -> Agregar "JDK" y establezca el alias de JDK en "JDK1.8". Elimine la opción "Instalar automáticamente" y configure "JAVA_HOME" en la ruta de instalación real del JDK en este caso.

rz Importe el paquete jdk-8u191-linux-x64.tar.gz, si existe, no lo use

[root@jenkins ~]# tar xf jdk-8u191-linux-x64.tar.gz

[ raíz @ jenkins ~ ] # mv jdk1 .8.0_191 / / usr / local / java

[raíz@jenkins ~]# vim /etc/profile

exportar JAVA_HOME=/usr/local/java

exportar CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar

exportar RUTA=$JAVA_HOME/bin:$RUTA

[root@jenkins ~]# rm -rf /usr/bin/java

[No es necesario cambiar la versión de Java]

[root@jenkins jenkins]# actualizaciones de mkdir

[root@jenkins ~]# cd /var/lib/jenkins/updates

[actualizaciones de root@jenkins]# touch default.json

[actualizaciones de root@jenkins]# sed -i 's/http:\/\/updates.jenkins-ci.org\/download/https:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g 'predeterminado.json

[actualizaciones de root@jenkins]# sed -i 's/http:\/\/www.google.com/https:\/\/www.baidu.com/g' default.json

[root@jenkins] # reinicio de jenkins

 

Busque la opción de configuración de Maven en la interfaz de configuración "Configuración global de herramientas", luego haga clic en "Agregar Maven" y establezca el alias en "Maven3.5".

[Si no hay apache-maven-3.5.0-bin.tar.gz, impórtelo usted mismo]

[root@jenkins ~]# tar xf apache-maven-3.5.0-bin.tar.gz

[root@jenkins ~]# mv apache-maven-3.5.0 /usr/local/maven-3.5.0

Cambiar la estación espejo de Alibaba Cloud para maven

[root@jenkins ~]# vim /usr/local/maven-3.5.0/conf/settings.xml

    <espejo>

        <id>nexo-aliyun</id>

        <mirrorOf>central</mirrorOf>

        <nombre>Nexus aliyun</nombre>

        <url>http://maven.aliyun.com/nexus/content/groups/public</url>

    </espejo>

configuración de git

[root@jenkins ~]# cuál git

/usr/bin/git

 Una vez completada la configuración básica global anterior, haga clic en Guardar para completar.

Jenkins instala los complementos necesarios

Administrar Jenkins-> Administrar complementos

 

Instalar el complemento SSH

 Instale el complemento de parámetros de Git

 

Descripción del complemento:

SSH: se utiliza para SSH en hosts Docker remotos para ejecutar comandos de Shell.

Parámetro de Git: obtenga dinámicamente la rama y la etiqueta del almacén de Git.

Configurar el complemento SSH

Cree credenciales para conectarse al host Docker. Página de inicio->Credenciales->Sistema->Credenciales globales->Agregar credenciales.

 

 

Ingrese el nombre de usuario y la contraseña para conectarse al host Docker (escriba Docker en la descripción)

Agregue un host remoto SSH. Administrar Jenkins->Configurar sistema.

Configurar hosts remotos SSH

6. Jenkins crea el proyecto y publica la prueba.


Página principal -> Nuevo elemento -> Ingrese el nombre de la tarea para crear un proyecto Maven

Nota: Si no se muestra la opción "Crear un proyecto Maven", debe instalar el "Proyecto Maven" en el complemento de administración.

Complemento de integración”.

Configurar la compilación parametrizada de Git

Obtenga dinámicamente la etiqueta del almacén de Git e interactúe con el usuario para seleccionar la etiqueta para su publicación.

Especifique la dirección del almacén de Git del proyecto

Establezca la opción del comando de compilación de maven "limpiar paquete -Dmaven.test.skip=true"

Cree el proyecto utilizando el archivo pom.xml. Cree y envíe la imagen local al almacén de imágenes en Jenkins y conéctese de forma remota al host Docker a través de SSH para crear un contenedor utilizando la imagen enviada.

Seleccione Pasos de publicación ->Agregar paso posterior a la compilación ->Ejecutar shell, lo que mostrará el primer cuadro de entrada

Seleccione Publicar pasos ->Ejecutar script de shell en un host remoto usando ssh, lo que mostrará el segundo cuadro de entrada.

 pom.xml: Declara que el descriptor del proyecto sigue la versión del modelo POM. La versión del modelo en sí rara vez cambia, pero sigue siendo esencial garantizar la estabilidad cuando Maven introduce nuevas funciones u otros cambios en el modelo.

Contenido del primer cuadro de comando.

REPOSITORIO=192.168.200.111:5000/sonda:${Etiqueta}

# Construir imagen

gato > Dockerfile << EOF

DESDE 192.168.200.111:5000/tomcat-85:último

EJECUTAR rm -rf /usr/local/tomcat/webapps/ROOT

COPIAR psi-probe-web/target/*.war /usr/local/tomcat/webapps/ROOT.war

CMD ["/usr/local/tomcat/bin/catalina.sh", "ejecutar"]

EOF

ventana acoplable build -t $REPOSITORIO ./

# Cargar imagen

Empuje la ventana acoplable $ REPOSITORIO

El contenido del segundo cuadro de comando.

REPOSITORIO=192.168.200.111:5000/sonda:${Etiqueta}

# desplegar

sonda docker rm -f |verdadero

imágenes acoplables rm $REPOSITORY |true

ejecución del contenedor acoplable -d --name probe -v /usr/local/java:/usr/local/java -p 8090:8080 $REPOSITORY

[root@docker ~]# vim /etc/docker/daemon.json

{"registros-inseguros":["192.168.200.111:5000"]}

[root@docker ~]# systemctl daemon-reload

[root@docker ~]# systemctl reiniciar ventana acoplable

Nota: Desde el comando de implementación, puede ver que la última línea del nombre del contenedor es sonda, lo que expone el puerto del host 8090, es decir, utilizando la IP del host: 8090, puede acceder al proyecto de la sonda.

El proyecto de la sonda ha sido configurado y comenzó a construirse.

Seleccione la etiqueta y comience a construir

 Genere la información de inicio del registro de compilación en la consola de tareas.

Genere la información final del registro de compilación en la consola de tareas.

[root@docker ~]# docker ps -a

Después de una ejecución exitosa, el navegador accede al proyecto de prueba: http://192.168.200.113:8090

7. Reversión de la versión


La reversión se refiere a un error de procesamiento de datos o un programa, restaurando el programa o los datos a la última versión correcta. La reversión incluye la reversión del programa y la reversión de datos. Para este capítulo, si la versión actual del código no se publica, retroceda a la versión normal anterior y reanude el negocio lo antes posible.

Idea de reversión: vuelva a ejecutar para especificar la versión anterior de la imagen. Porque durante cada proceso de lanzamiento, el código debe encapsularse en una imagen y etiquetarse para distinguir las diferentes versiones. Por ejemplo, si ocurre un problema de código durante el proceso de lanzamiento, los ingenieros de operación y mantenimiento deben volver rápidamente a la versión anterior, para que el negocio pueda volver a la normalidad rápidamente. ¿Cómo debería implementarse este proceso? En este momento, puede volver a crear una "tarea de estilo de proyecto de software libre", crear una versión específica mediante parametrización, es decir, especificar la imagen de la versión normal anterior y luego volver a ejecutar el comando de creación de contenedor para volver a la normal anterior. versión.

Enviar código de la versión 1.0.1

[root@jenkins ~]# cd psi-probe/

[root@jenkins psi-probe]# echo "prueba1" > psi-probe-web/src/main/webapp/test1.html

[root@jenkins psi-probe]# git add.

[root@jenkins psi-probe]# git commit -m "prueba1"

[maestro 7b36b14] prueba1

 1 archivo modificado, 1 inserción(+)

 crear modo 100644 web/src/main/webapp/test1.html

[root@jenkins psi-probe]#git etiqueta 1.0.1

[root@jenkins psi-probe]#git push origen 1.0.1

Contando objetos: 12, listo.

Comprimir objetos: 100% (6/6), listo.

Objetos de escritura: 100% (7/7), 574 bytes | 0 bytes/s, listo.

Total 7 (delta 2), reutilizado 0 (delta 0)

A [email protected]:/home/git/probe.git

 * [nueva etiqueta] 1.0.1 -> 1.0.1

Enviar código de la versión 1.0.2

 [root@jenkins psi-probe]# echo "test2" > psi-probe-web/src/main/webapp/test2.html

[root@jenkins psi-probe]# git add.

[root@jenkins psi-probe]# git commit -m "prueba2"

[maestro eb617d6] prueba2

 1 archivo modificado, 1 inserción(+)

 crear modo 100644 web/src/main/webapp/test2.html

[root@jenkins psi-probe]# etiqueta git 1.0.2

[root@jenkins psi-probe]# git push origen 1.0.2

Contando objetos: 12, listo.

Comprimir objetos: 100% (6/6), listo.

Objetos de escritura: 100% (7/7), 577 bytes | 0 bytes/s, listo.

Total 7 (delta 2), reutilizado 0 (delta 0)

A [email protected]:/home/git/probe.git

 * [nueva etiqueta] 1.0.2 -> 1.0.2  

Versión de lanzamiento 1.0.1

[root@docker ~]# docker exec -it sonda /bin/bash

[ root@1b57d0ebb506 /]# ls /usr/local/tomcat/webapps/ROOT

META-INF WEB-INF a.html banderas css index.jsp js test1.html

Crear una tarea de estilo de proyecto de software libre

 

 

 

REPOSITORIO=192.168.200.111:5000/sonda:${Etiqueta}

# desplegar

sonda docker rm -f |verdadero

ejecución del contenedor acoplable -d --name probe -v /usr/local/java:/usr/local/java -p 8090:8080 $REPOSITORY

 

[root@docker ~]# docker ps -l

 

[root@docker ~]# docker exec -it sonda /bin/bash

[ root@6991b6b06f6d /]# ls /usr/local/tomcat/webapps/ROOT

META-INF WEB-INF a.html css banderas index.jsp js

Supongo que te gusta

Origin blog.csdn.net/2302_77750172/article/details/132470433
Recomendado
Clasificación