Obtenga la implementación front-end y back-end de Jenkins+Gitlab+Docker en diez minutos, tomando los proyectos de Spring y Vue como ejemplos


prefacio

Con la madurez del desarrollo de software, DevOps se ha arraigado profundamente en los corazones de las personas. Como parte importante de DevOps: la implementación automatizada siempre ha sido la infraestructura de máxima prioridad para todos. De hecho, existen muchas herramientas para la implementación automatizada. En mi artículo anterior, escribí sobre el uso de Gitlab Runner de la familia Gitlab para lograr la implementación automatizada. Sin embargo, limitado por el hecho de que Gitlab Runner no tiene complementos ni ecología, comenzó a intentar transferirse a Jenkins. Este artículo solo registra el inicio rápido de la implementación automatizada de Jenkins. Este artículo no cubre algunas operaciones avanzadas como la orquestación de procesos, Jenkinsfile y WebHook.

1. ¿Qué es Jenkins?

Jenkins es un servidor de automatización de código abierto. Ayuda a automatizar las partes del desarrollo de software relacionadas con la creación, las pruebas y la implementación, lo que facilita la integración continua y la entrega continua. Es un sistema basado en servidor que se ejecuta en un contenedor de servlet como Apache Tomcat. Admite herramientas de control de versiones, incluidas AccuRev, CVS, Subversion, Git, Mercurial, Perforce, ClearCase y RTC, y puede ejecutar Apache Ant, Apache Maven y proyectos basados ​​en sbt, así como scripts de shell arbitrarios y comandos por lotes de Windows.

2. Usar pasos

2.1 Instalación del programa

Un software como este sugiere elegir Docker sin pensar:

docker run \
  -d \
  -u root \
  -p 8080:8080 \
  -v /usr/local/docker/jenkins-data:/var/jenkins_home \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v "$HOME":/home \
  --privileged=true \
  --restart=always \
  --name jendemo \
  jenkinsci/blueocean

Después de que la ejecución sea exitosa, puede acceder directamente al puerto 8080 para ver esta interfaz.
inserte la descripción de la imagen aquí
Ingrese el contenedor según sea necesario para ver la contraseña de este archivo:
inserte la descripción de la imagen aquí

docker exec -it jendemo bash
cat /var/jenkins_home/secrets/initialAdminPassword

Elija instalar el complemento recomendado.
inserte la descripción de la imagen aquí
Jenkins tendrá un entorno Java 11 de forma predeterminada. Si necesita Gradle y Maven, debe configurarlo usted mismo.
inserte la descripción de la imagen aquí
El nombre de usuario y la contraseña del administrador pueden ser los que quieras.
inserte la descripción de la imagen aquí
Haga clic en Reiniciar y espere un momento. Jenkins debe reiniciarse cada vez que se instala el complemento. Es muy conveniente para nosotros usar Docker para reiniciar directamente el comando.
inserte la descripción de la imagen aquí
Después de reiniciar, ingrese Administración del sistema -> Administración de complementos y actualice todos los complementos que necesitan actualizarse. Instale los complementos Gitlab y NodeJS adicionalmente y luego reinicie.
inserte la descripción de la imagen aquí

2.2 Configuración del programa

inserte la descripción de la imagen aquí
En la configuración de la herramienta global en la gestión del sistema, puede seleccionar los entornos de Maven, Gradle y NodeJS, y comprobar la instalación automática. Pero hay un pequeño hoyo aquí, es decir, después de hacer clic en Guardar, no se descargará ni instalará directamente, sino solo cuando se use el activador. Por ejemplo, Maven debe seleccionar la opción Maven en el nuevo trabajo para descargar automáticamente; para Node, debe marcar esta opción para descargar automáticamente.
inserte la descripción de la imagen aquí
Dado que Jenkins en sí mismo ejecuta comandos relacionados en el contenedor, si cree que la configuración de su entorno no es fácil de usar, puede configurarlo e instalarlo usted mismo en el contenedor.

3. Proyecto primavera

3.1 Construcción del proyecto

Jenkins se puede usar directamente después de configurarse de acuerdo con el segundo paso. Para verificar, creamos un nuevo proyecto en Gitlab, verificamos SpringWeb y escribimos un controlador:

@RestController
public class GreetingController {
    
    
    @GetMapping("/greeting")
    public String greeting() {
    
    
        return "Hello Jenkins!";
    }
}

Cree una dockercarpeta en el directorio raíz y coloque un Dockerfilearchivo en ella:

# 指定是基于哪个基础镜像
FROM java:8

# 作者信息
MAINTAINER Peach

# 挂载点声明
VOLUME /tmp

# 将本地的一个文件或目录,拷贝到容器的文件或目录里
ADD /build/libs/demo-0.0.1-SNAPSHOT.jar springboot.jar

#shell脚本
RUN bash -c 'touch /springboot.jar'

# 将容器的8000端口暴露,给外部访问。
EXPOSE 8080

# 当容器运行起来时执行使用运行jar的指令
ENTRYPOINT ["java", "-jar", "springboot.jar"]

注:我这里的Spring是用Gradle依赖的,如果用maven请自行替换Jar包位置和构建命令

3.2 Configuración de Jenkins

En la página de inicio de Jenkins, cree una nueva tarea, seleccione Estilo libre:
inserte la descripción de la imagen aquí
Configure el proyecto, seleccione Git aquí para la administración del código fuente y luego coloque nuestra dirección de proyecto de Gitlab y agregue un nombre de usuario y contraseña de Gitlab en Credenciales.
inserte la descripción de la imagen aquí
Aquí se usa el método http.Si usa ssh, debe configurar las claves pública y privada del contenedor y transferirlas a la cuenta de Gitlab. Este artículo pretende ser rápido, por lo que no cubriré este método. inserte la descripción de la imagen aquí
Luego marcamos esta Build when a change is pushed to Gitlabopción, y copiamos la siguiente URL.
inserte la descripción de la imagen aquí
Copie la URL anterior en Gitlab y haga clic en Webhook:
inserte la descripción de la imagen aquí
después de agregar, podemos ver el Hook aquí y podemos hacer clic en Probar para probarlo.
inserte la descripción de la imagen aquí
Devolver 200 significa éxito, por lo que cada vez que el usuario envía el código, Jenkins recibirá una notificación activa para realizar la implementación automática.
inserte la descripción de la imagen aquí
Pero si ocurre el siguiente error 403 en la Prueba:
inserte la descripción de la imagen aquí
Debe configurar una política de seguridad en Jenkins y marcar el siguiente botón:
inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí
Finalmente, escribimos lo que Jenkins necesita para ejecutar después de recibir este evento. En la compilación, agregamos un shell de ejecución:
inserte la descripción de la imagen aquí
para ejecutar scripts de Linux, puede ejecutar lo que quiera. Aquí construyo el paquete Jar del proyecto a través de Gradle y luego construyo el Dockerfile, coloco el paquete Jar en la imagen de Docker y lo inicio.

gradle bootJar
docker rm -f app_docker
sleep 1
docker rmi -f app_docker:1.0
sleep 1
docker build -t app_docker:1.0 -f ./docker/Dockerfile .
sleep 1
docker run -d -p 5001:8080 --name app_docker app_docker:1.0

En la consola podemos ver la información específica de ejecución, de hecho, es lo mismo que teclear comandos en Linux, si algo sale mal, simplemente resuélvelo. Creo que puedes hacerlo.
inserte la descripción de la imagen aquíDespués de tener éxito aquí, puedo acceder directamente al puerto 5001 del servidor para ver el contenido del controlador que escribimos. Modifique directamente el contenido a Test123, espere unos segundos y actualice para ver el resultado.
inserte la descripción de la imagen aquí

3. Proyecto Vue

El fondo es similar al front-end, nada más que usar Gradle para el fondo y NodeJS para el front-end. Hay una manera simple, que es ejecutar el shell directamente como el proyecto Spring y luego colocar distla carpeta mv en el directorio Nginx del host del servidor. Utilizo un método más complicado aquí, lo incorporo en Docker y luego publico la dirección del front-end a través de Docker.
Primero, creemos una carpeta Docker y un Dockerfile en el directorio raíz del proyecto front-end:

# build stage
FROM node:lts-alpine as build-stage
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build

# production stage
FROM nginx:stable-alpine as production-stage
COPY --from=build-stage /app/dist /usr/share/nginx/html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]

No olvides crear un WebHook con el proyecto front-end en Jenkins en el Gitlab front-end ~ y el proyecto Spring en segundo plano, solo la ejecución del Shell es diferente:

docker rm -f glmx-fornt
sleep 1
docker rmi -f glmx-fornt:1.0
sleep 1
docker build -t glmx-fornt:1.0 -f ./docker/Dockerfile .
sleep 1
docker run -d -p 5003:8080 --name glmx-fornt glmx-fornt:1.0

Después de cargar el código, espere la construcción exitosa para acceder al puerto 5003 del servidor para ver el contenido del front-end.

Resumir

Lo anterior es la forma simple de usar Jenkins, espero que pueda brindarle alguna ayuda. Si tiene alguna pregunta, bienvenido a comunicarse conmigo en el área de comentarios.

Supongo que te gusta

Origin blog.csdn.net/u012558210/article/details/125805473
Recomendado
Clasificación