tutorial plugin pipelines hub docker jenkins kubernetes jenkins-pipeline

plugin - jenkinsfile docker



¿La forma más fácil de hacer el comando docker build dentro de Jenkinsfile corriendo en el nodo esclavo Jenkins? (1)

Ejemplo básico de lo que quiero que haga mi Jenkinsfile:

node { sh ''docker build -t foo/bar .'' }

Parece que necesito instalar la ventana acoplable en la imagen esclava de Jenkins que está ejecutando mi Jenkinsfile. ¿Hay una manera fácil de hacer esto? (Esa imagen esclava de Jenkins es en sí misma un contenedor acoplable)

¿Son mis suposiciones correctas?

  1. Cuando se ejecuta con Jenkins master / slaves, el Jenkinsfile es ejecutado por un esclavo Jenkins
  2. Los complementos de Jenkins instalados a través de la sección Administrar complementos (por ejemplo, el Complemento Docker o el plugin SDK de Gcloud) solo se instalan en los maestros Jenkins, por lo tanto, necesitaría construir manualmente la imagen esclava Jenkins e instalar la ventana acoplable en la imagen.

Como también necesito acceder al comando ''gcloud'' (estoy ejecutando Jenkins a través de Kubernetes Helm / Charts), he estado usando la imagen gcr.io/cloud-solutions-images/jenkins-k8s-slave para mi esclavo Jenkins .

Actualmente se equivoca diciendo "docker: no encontrado"


Mi suposición es que quieres docker build dentro del esclavo Jenkins (que es un pod de Kubernetes, supongo que creado por el complemento Jenkins de Kubernetes )

Para establecer el escenario, cuando Kubernetes crea un pod que actuará como esclavo de Jenkins, todos los comandos que ejecutes dentro del nodo se ejecutarán dentro de ese pod de Kubernetes, dentro de uno de los contenedores allí (de manera predeterminada solo habrá un contenedor, pero más sobre esto más adelante).

Entonces, en realidad está tratando de ejecutar un comando Docker dentro de un contenedor basado en gcr.io/cloud-solutions-images/jenkins-k8s-slave , que muy probablemente se basa en el Jenkins JNLP Slave oficial , que no contiene Docker.

De aquí en adelante, hay dos enfoques que puede tomar:

Aquí hay una vista completa de cómo configurar el plugin de Jenkins:

Tenga en cuenta que utiliza una imagen diferente (puede crear la suya propia y agregar cualquier binario que desee allí) y que monte el conector Docker dentro del contenedor.

  • El problema con el primer enfoque es que crea una nueva imagen bifurcada desde el esclavo JNLP oficial y agrega manualmente el cliente Docker. Esto significa que siempre que Jenkins o Docker tengan actualizaciones, debe actualizar manualmente su imagen y toda la configuración, lo que no es deseable. Con el segundo enfoque, siempre usa imágenes oficiales y usa el esclavo JNLP para iniciar otros contenedores en el mismo pod.

Aquí está el archivo completo de la imagen a continuación

Aquí está la documentación del plugin de Jenkins para hacer esto

Como dije, la imagen JNLP iniciará un contenedor que especifiques en el mismo pod. Tenga en cuenta que para usar Docker desde un contenedor, aún necesita montar el calcetín Docker.

Estas son las dos formas que encontré para lograr crear imágenes dentro de un esclavo Jenkins JNLP que se ejecuta dentro de un contenedor.

El ejemplo también muestra cómo insertar la imagen usando enlaces de credenciales de Jenkins, y cómo actualizar una implementación de Kubernetes como parte del proceso de compilación.

Algunos recursos más:

Gracias, Radu M