J'ai installé Jenkins sur une machine Ubuntu 16.04. Le Jenkins lui-même n'est pas exécuté dans un conteneur. Ce que je veux faire, c'est simplement appeler en yarn install
utilisant une image de nœud. Voici donc mon fichier Jenkins:
pipeline {
agent any
stages {
stage('install node modules...') {
agent { docker 'node' }
steps {
sh 'cd /path/to/package.json; yarn install'
}
}
}
}
Assez simple, non?
jenkins user / group est 112:116
, et l'uid du conteneur de noeud est 1000
, donc le processus de fil (qui est exécuté en tant qu'utilisateur de noeud 1000) ne peut pas faire ses choses, comme mkdir /.config
.
J'ai essayé de faire tourner le conteneur de nœuds en passant l'argument -u 1000
, il a rencontré des problèmes d'autorisation lors de la création de répertoires durables.
Cela ressemble à l'un ou l'autre type de problème, comment puis-je contourner ce problème?
Journaux Jenkins:
Vous trouverez ci-dessous où la génération démarre et échoue.
[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
la source
Réponses:
J'ai eu le même problème avec le nœud. Le fait est que les fichiers dans le conteneur appartiennent à "root: root". Essayez d'ajouter des arguments de docker
-u root:root
:la source
pip install
commande qui en résultaitCould not install packages due to an EnvironmentError: [Errno 13] Permission denied
; le mentionner ici pour aider les gens à le rechercher. Même en utilisantvirtualenv
oupip install --user
sans résoudre le problème pour moi)Je viens d'avoir un problème similaire aujourd'hui, bien qu'avec une autre image.
Référence: https://docs.docker.com/storage/tmpfs/ De cette façon, vous ne devriez pas vous inquiéter des fuites de sécurité ou des fichiers qui sont présents après la destruction du conteneur à l'intérieur des jenkins.
la source
buildEnv.inside("-u 0") {}
résolu mon problème. Mais alors l'espace de travail contiendra un répertoire et des fichiers appartenant à root qui ne peuvent pas être supprimés par l'utilisateur Jenkins lors de la prochaine exécution lors du nettoyage de l'espace de travail, j'ai donc ajoutésh "sudo chown jenkins: -R \$PWD/"
au début du pipeline.la source