Zainstalowałem Jenkinsa na maszynie Ubuntu 16.04. Sam Jenkins nie działa w kontenerze. Chcę po prostu zadzwonić yarn install
przy użyciu obrazu węzła. Oto mój plik Jenkins:
pipeline {
agent any
stages {
stage('install node modules...') {
agent { docker 'node' }
steps {
sh 'cd /path/to/package.json; yarn install'
}
}
}
}
Całkiem proste, prawda?
jenkins użytkownik / grupa jest 112:116
, a identyfikator UID kontenera węzła jest 1000
, dlatego proces przędzy (który jest uruchamiany jako użytkownik węzła 1000) nie może robić swoich rzeczy, takich jak mkdir /.config
.
Próbowałem podkręcić kontener węzła, przekazując argument -u 1000
, napotkał on problemy z uprawnieniami podczas próby utworzenia trwałych katalogów.
Wygląda jak jeden lub drugi rodzaj problemu, jak mogę to obejść?
Dzienniki Jenkinsa:
Poniżej znajduje się miejsce, w którym kompilacja rozpoczyna się i kończy niepowodzeniem.
[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
Michael
źródło
źródło
Odpowiedzi:
Miałem ten sam problem z węzłem. Rzecz w tym, że pliki w kontenerze są własnością „root: root”. Spróbuj dodać argumenty dokera
-u root:root
:źródło
pip install
poleceniu skutkującymCould not install packages due to an EnvironmentError: [Errno 13] Permission denied
; wzmiankowanie go tutaj, aby pomóc ludziom w szukaniu tego. Nawet używającvirtualenv
lubpip install --user
nie rozwiązując problemu dla mnie)Właśnie miałem dzisiaj podobny problem, chociaż z innym obrazem.
Odniesienie: https://docs.docker.com/storage/tmpfs/ W ten sposób nie powinieneś się martwić o wycieki zabezpieczeń lub pliki, które są obecne po zniszczeniu kontenera w jenkins.
źródło
buildEnv.inside("-u 0") {}
rozwiązał mój problem. Ale wtedy obszar roboczy będzie zawierał katalog i pliki należące do katalogu głównego, których użytkownik Jenkins nie może usunąć przy następnym uruchomieniu podczas czyszczenia obszaru roboczego, więc dodałemsh "sudo chown jenkins: -R \$PWD/"
na początku potoku.źródło