Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

227
Views
Jenkins + Docker: cómo controlar al usuario de la ventana acoplable cuando se usa el comando Image.inside

Estimada comunidad de Stackoverflow,

Estoy tratando de configurar una canalización de CI de Jenkins utilizando imágenes acoplables como contenedores para mis procesos de compilación. Estoy definiendo un Jenkinsfile para tener una canalización de compilación como código. Estoy haciendo algo como esto:

 node { docker.withRegistry('http://my.registry.com', 'docker-credentials') { def buildimage = docker.image('buildimage:latest'); buildimage.pull(); buildimage.inside("") { stage('Checkout sources') { git url: '...', credentialsId: '...' } stage('Run Build and Publish') { sh "..." } } } }

Desafortunadamente, me estoy tropezando con un comportamiento extraño del complemento de canalización de Docker. En la salida de compilación, puedo ver que el comando Image.inside (...) activa el contenedor con un

 docker run -t -d -u 1000:1000 ...

Esto hace que mi compilación falle, porque el usuario definido en Dockerfile no tiene el UID 1000 ... en realidad se toma otro usuario. Incluso intenté especificar qué usuario debería usarse dentro del archivo Jenkins.

 node { docker.withRegistry('http://my.registry.com', 'docker-credentials') { def buildimage = docker.image('buildimage:latest'); buildimage.pull(); buildimage.inside("-u otheruser:othergroup") { stage('Checkout sources') { git url: '...', credentialsId: '...' } stage('Run Build and Publish') { sh "..." } } } }

pero esto conduce a un interruptor -u duplicado en el comando de ejecución de la ventana acoplable resultante

 docker run -t -d -u 1000:1000 -u otheruser:othergroup ...

y obviamente solo se aplica el primer -u porque mi compilación aún falla. También realicé la depuración usando whoami para validar mis suposiciones.

Entonces mis preguntas: ¿cómo puedo cambiar este comportamiento? ¿Hay un interruptor donde pueda desactivar -u 1000:1000? ¿Es esto siquiera un error? De hecho, me gusta trabajar con el complemento Docker porque simplifica el uso de un registro docker propio con credenciales mantenidas en Jenkins. Sin embargo, ¿hay otra forma sencilla de llegar a mi objetivo si el complemento Docker no se puede utilizar?

Gracias de antemano por su tiempo

about 4 years ago · Santiago Trujillo
2 answers
Answer question

0

Descubrí que en realidad puedes cambiar de usuario agregando args como los siguientes. Aunque -u 1000:1000 seguirá estando allí en la docker run , tendrá un -u adicional [su usuario] después de 1000:1000. Docker utilizará de forma precisa el último parámetro -u

 agent { docker { image 'your image' args '-u root --privileged' } }
about 4 years ago · Santiago Trujillo Report

0

Como puede ver aquí o aquí está codificado el hecho de agregar el uid y el gid del usuario que está ejecutando Jenkins (en su caso, el usuario de Jenkins creado dentro de la imagen oficial de la ventana acoplable).

Puede cambiar el usuario que ejecuta los procesos dentro de su imagen de Jenkins pasando el argumento --user (o -u) al comando de docker run . Tal vez esto pueda minimizar sus problemas.

editado

¿Cómo puedo cambiar este comportamiento? ¿Hay un interruptor donde pueda desactivar -u 1000:1000?

No puede cambiar este comportamiento en la versión real porque el whoami está codificado.

¿Es esto siquiera un error?

En este pull request parece que están trabajando en ello.

Sin embargo, ¿hay otra forma sencilla de llegar a mi objetivo si el complemento Docker no se puede utilizar?

La nueva versión del complemento de canalización que viene con Jenkins también usa el complemento docker-workflow-plugin para ejecutar los contenedores. No conozco otro complemento para ejecutar eso de una manera simple. Para solucionar esto, puede ejecutar su Jenkins como root, pero es una solución muy fea.

about 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!