Ich habe Jenkins auf einem Ubuntu 16.04-Computer installiert. Der Jenkins selbst wird nicht in einem Container ausgeführt. Ich möchte einfach yarn install
mit einem Knotenbild aufrufen . Also hier ist meine Jenkins-Datei:
pipeline {
agent any
stages {
stage('install node modules...') {
agent { docker 'node' }
steps {
sh 'cd /path/to/package.json; yarn install'
}
}
}
}
Ziemlich einfach, oder?
Jenkins Benutzer / Gruppe ist 112:116
, und die UID des Knotencontainers ist 1000
, daher kann der Garnprozess (der als Knotenbenutzer 1000 ausgeführt wird) seine Dinge nicht tun, wie z mkdir /.config
.
Ich habe versucht, den als Argument übergebenen -u 1000
Knotencontainer hochzufahren. Beim Versuch, dauerhafte Verzeichnisse zu erstellen, sind Berechtigungsprobleme aufgetreten.
Es sieht nach dem einen oder anderen Problem aus. Wie kann ich das umgehen?
Jenkins Protokolle:
Unten beginnt der Build und schlägt fehl.
[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
quelle
Antworten:
Ich hatte das gleiche Problem mit Node. Die Sache ist, dass Dateien im Container "root: root" gehören. Versuchen Sie, Docker-Argumente hinzuzufügen
-u root:root
:quelle
pip install
Befehl, der dazu führteCould not install packages due to an EnvironmentError: [Errno 13] Permission denied
, dass ich ihn hier erwähnte, um den Leuten bei der Suche zu helfen. Selbstvirtualenv
pip install --user
Ich hatte heute gerade ein ähnliches Problem, obwohl mit einem anderen Bild.
Referenz: https://docs.docker.com/storage/tmpfs/ Auf diese Weise sollten Sie sich keine Sorgen über Sicherheitslecks oder Dateien machen, die vorhanden sind, nachdem der Container in den Jenkins zerstört wurde.
quelle
buildEnv.inside("-u 0") {}
mein Problem gelöst. Aber dann enthält der Arbeitsbereich ein Verzeichnis und Dateien im Besitz von root, die vom Benutzer Jenkins beim nächsten Ausführen beim Bereinigen des Arbeitsbereichs nicht gelöscht werden können, also habe ichsh "sudo chown jenkins: -R \$PWD/"
am Anfang der Pipeline hinzugefügt .quelle