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