El camino hacia DevOps empresarial: Jenkins integra Harbour para publicar imágenes automáticamente

1. Información general

En la producción real, es demasiado bajo para publicar imágenes manualmente en Harbour. En la práctica, generalmente se combina con la canalización de Jenkins para compilar y publicar automáticamente.

imagen

Descripción general del proceso:\

  • Los desarrolladores envían su código al repositorio de Gitlab todos los días
  • Jenkins extrae el código fuente del proyecto del repositorio de código de Gitlab, lo compila y lo empaqueta en un paquete jar; luego lo construye en una imagen de Docker y empuja la imagen al repositorio de imágenes privadas de Harbour.
  • Jenkins envía un comando remoto SSH para permitir que el servidor de implementación de compilación extraiga la imagen del repositorio de imágenes privadas de Harbour al local; luego crea el contenedor
  • El último usuario tiene acceso al contenedor

2. Espejo de lanzamiento con guión de Jenkins

  • Nueva tarea de construcción

Nuevo elemento -> Construir un proyecto Maven

imagen

  • Configurar el repositorio de código

imagen

  • Subir el resultado al servidor

imagen

Dado que Jenkins se implementa en el sistema operativo Windows, se utilizan scripts por lotes. Utilice el comando por lotes o shell según el sistema operativo implementado por Jenkins. \

C:\jenkins\pscp.exe -r -l root -pw root %WORKSPACE%/zwt-pestilence/zwt-pestilence-web/target/zwt-pestilence-web-RELEASE.jar 192.168.10.8:/home/huangjinjin/software/springdocker
复制代码
  • liberar espejo

imagen

cd /home/huangjinjin/software/springdocker
docker build -t zwt:v1.0 .
docker login -u admin -p Harbor123 192.168.10.8
docker tag zwt:v1.0 192.168.10.8/omg/zwt:v1.0
docker push 192.168.10.8/omg/zwt:v1.0
复制代码
  • Crear archivo Docker

El jar construido se carga en la siguiente ruta

/home/huangjinjin/software/springdocker
复制代码

Así que crea un Dockerfile en esta ruta con el siguiente contenido:

FROM openjdk:8-jre-slim
MAINTAINER huangjinjin "[email protected]"
ENV PARAMS=""
ENV TZ=PRC
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
WORKDIR /servers
ADD zwt-pestilence-web-RELEASE.jar app/zwt-pestilence-web-RELEASE.jar
ENTRYPOINT ["sh","-c","java -jar $JAVA_OPTS /servers/app/zwt-pestilence-web-RELEASE.jar $PARAMS"]
复制代码

El contenido del archivo Dockerfile se modifica según la situación real del proyecto.

  • construir y verificar

Ejecutar tareas de Jenkins

imagen

Inicie sesión en Harbor para verificar si la imagen enviada al repositorio espejo de Harbor es exitosa\

imagen

3. Espejo de publicación del complemento de Jenkins

  • Instale el complemento CloudBees Docker Build and Publish

Administrar Jenkins -> Administrar complementos

imagen

  • Agregar credenciales

Administrar Jenkins -> Administrar credenciales

imagen

Cree un certificado de cuenta Harbor.

  • Build agrega Docker Build y Publish

imagen

Haga clic en Opciones avanzadas para configurar

  1. Contexto de compilación: ruta de contexto de compilación
  1. Dockerfile Path:Dockerfile 文件的路径

根据实际情况配置,配置如下:

imagen

经过以上设置,即可进行 Jenkins 任务执行,构建镜像。\

4. 附:开启Docker 的 Remote API 访问 2375端口

  • Docker 常见端口

2375:未加密的docker socket,远程root无密码访问主机2376:tls加密套接字,很可能这是您的CI服务器4243端口作为https 443端口的修改2377:群集模式套接字,适用于群集管理器,不适用于docker客户端5000:docker注册服务4789和7946:覆盖网络

  • 开启配置

方法一(该方法没有验证通过)

vi /etc/default/docker
复制代码

加入下面一行

DOCKER_OPTS="-H tcp://0.0.0.0:2375"
复制代码

修改 /usr/lib/systemd/system/docker.service 配置文件

EnvironmentFile=-/etc/default/docker
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock $DOCKER_OPTS
复制代码

重启docker即可

systemctl daemon-reload
systemctl restart docker
复制代码

这种简单配置让 Docker Daemon 把服务暴露在 tcp 的 2375 端口上,这样就可以在网络上操作 Docker 了。Docker 本身没有身份认证的功能,只要网络上能访问到服务端口,就可以操作 Docker。

方法二

/usr/lib/systemd/system/docker.service,配置远程访问。

产生/usr/lib/systemd/system/docker.service配置文件

systemctl enable docker
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.
复制代码

在 [Service] 这个部分的 ExecStart,加上-H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock

vi /usr/lib/systemd/system/docker.service
[Service]
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock
复制代码

重启

systemctl daemon-reload
systemctl restart docker
复制代码

方法三

修改/etc/docker/daemon.json的配置

vi /etc/docker/daemon.json

{
 "hosts": ["tcp://0.0.0.0:2375", "unix:///var/run/docker.sock"]
}
复制代码

"tcp://0.0.0.0:2375":tcp socket,表示允许任何远程客户端通过 2375 端口连接 Docker Daemon。

"unix:///var/run/docker.sock":unix socket,本地客户端将通过这个来连接 Docker Daemon。

修改配置后,然后让 Docker 重新读取配置文件,并重启 Docker 服务

systemctl daemon-reload
systemctl restart docker
复制代码

在启动时,可能报如下错误

Job for docker.service failed because the control process exited with error code. See "systemctl status docker.service" and "journalctl -xe" for details.
复制代码

Es porque hay un conflicto en los hosts de configuración de socket de Docker. La solución es editar el /usr/lib/systemd/system/docker.servicearchivo de configuración,

Cambie ExecStart =/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock a ExecStart=/usr/bin/dockerd y vuelva a iniciarlo.

Ver el proceso de la ventana acoplable

[root@slaver2 ~]# ps -ef| grep docker
root      44221      1  1 18:16 ?        00:00:06 /usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock
复制代码

El demonio Docker abre un socket HTTP para la comunicación remota.

  • verificar

-H es el servicio de Docker para el host de destino de la conexión

Comprobar la versión de Docker

docker -H tcp://192.168.10.8:2375 version
复制代码

Ver paquete de imágenes

docker -H tcp://192.168.10.8:2375 images
复制代码

Supongo que te gusta

Origin juejin.im/post/7082717843363954725
Recomendado
Clasificación