Instalé Jenkins en una máquina Ubuntu 16.04. El Jenkins en sí no se ejecuta en un contenedor. Lo que quiero hacer es simplemente llamar yarn install
usando una imagen de nodo. Así que aquí está mi archivo Jenkins:
pipeline {
agent any
stages {
stage('install node modules...') {
agent { docker 'node' }
steps {
sh 'cd /path/to/package.json; yarn install'
}
}
}
}
Bastante sencillo, ¿verdad?
jenkins user / group es 112:116
, y el uid del contenedor de nodos es 1000
, por lo tanto, el proceso de hilo (que se ejecuta como nodo de usuario 1000) no puede hacer sus cosas, como mkdir /.config
.
Traté de hacer girar el contenedor del nodo pasando el argumento -u 1000
, se topó con problemas de permisos al intentar crear directorios duraderos.
Parece uno u otro tipo de problema, ¿cómo puedo solucionarlo?
Jenkins registra:
A continuación es donde comienza la construcción y falla.
[Pipeline] sh
[Pipeline_Test_Jenkins_test-4JTFYMX7KSJY6ZH44VINNGEB7WH2D2HWYZN5ABF6O32O2HBQJYXQ@2] Running shell script
+ docker inspect -f . node
.
[Pipeline] withDockerContainer
Jenkins does not seem to be running inside a container
$ docker run -t -d -u 112:116 -w /var/lib/jenkins/workspace/Pipeline_Test_Jenkins_test-4JTFYMX7KSJY6ZH44VINNGEB7WH2D2HWYZN5ABF6O32O2HBQJYXQ@2 -v /var/lib/jenkins/workspace/Pipeline_Test_Jenkins_test-4JTFYMX7KSJY6ZH44VINNGEB7WH2D2HWYZN5ABF6O32O2HBQJYXQ@2:/var/lib/jenkins/workspace/Pipeline_Test_Jenkins_test-4JTFYMX7KSJY6ZH44VINNGEB7WH2D2HWYZN5ABF6O32O2HBQJYXQ@2:rw,z -v /var/lib/jenkins/workspace/Pipeline_Test_Jenkins_test-4JTFYMX7KSJY6ZH44VINNGEB7WH2D2HWYZN5ABF6O32O2HBQJYXQ@2@tmp:/var/lib/jenkins/workspace/Pipeline_Test_Jenkins_test-4JTFYMX7KSJY6ZH44VINNGEB7WH2D2HWYZN5ABF6O32O2HBQJYXQ@2@tmp:rw,z -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** --entrypoint cat node
[Pipeline] {
[Pipeline] sh
[Pipeline_Test_Jenkins_test-4JTFYMX7KSJY6ZH44VINNGEB7WH2D2HWYZN5ABF6O32O2HBQJYXQ@2] Running shell script
+ cd /path/to/package.json
+ yarn install
yarn install v0.24.6
error An unexpected error occurred: "EACCES: permission denied, mkdir '/.config'".
info If you think this is a bug, please open a bug report with the information provided in "/var/lib/jenkins/workspace/Pipeline_Test_Jenkins_test-4JTFYMX7KSJY6ZH44VINNGEB7WH2D2HWYZN5ABF6O32O2HBQJYXQ@2/<path>/yarn-error.log".
info Visit https://yarnpkg.com/en/docs/cli/install for documentation about this command.
[Pipeline] }
$ docker stop --time=1 c1147934ea689f71a449e486282db03338b12182368def31bdf8e8cf179ab46a
$ docker rm -f c1147934ea689f71a449e486282db03338b12182368def31bdf8e8cf179ab46a
[Pipeline] // withDockerContainer
[Pipeline] }
[Pipeline] // node
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
ERROR: script returned exit code 1
Finished: FAILURE
jenkins
docker
jenkins-pipeline
Miguel
fuente
fuente
Respuestas:
Tuve el mismo problema con el nodo. La cuestión es que los archivos en el contenedor son propiedad de "root: root". Intente agregar argumentos de docker
-u root:root
:fuente
pip install
comando simple que resultó enCould not install packages due to an EnvironmentError: [Errno 13] Permission denied
; mencionándolo aquí para ayudar a las personas que buscan eso. Incluso usandovirtualenv
opip install --user
no solucionó el problema para mí)Hoy tuve un problema similar, aunque con otra imagen.
Referencia: https://docs.docker.com/storage/tmpfs/ De esta manera no debe preocuparse por las fugas de seguridad o los archivos que están presentes después de que el contenedor se destruya dentro de los jenkins.
fuente
buildEnv.inside("-u 0") {}
resolvió mi problema Pero luego, el espacio de trabajo contendrá el directorio y los archivos propiedad de root que el usuario Jenkins no puede eliminar en la próxima ejecución al limpiar el espacio de trabajo, por lo que he agregadosh "sudo chown jenkins: -R \$PWD/"
al comienzo de la tubería.fuente