Instalei o Jenkins em uma máquina Ubuntu 16.04. O Jenkins em si não é executado em um contêiner. O que eu quero fazer é simplesmente chamar yarn install
usando uma imagem de nó. Então, aqui está o meu arquivo Jenkins:
pipeline {
agent any
stages {
stage('install node modules...') {
agent { docker 'node' }
steps {
sh 'cd /path/to/package.json; yarn install'
}
}
}
}
Bem simples, certo?
O usuário / grupo jenkins é 112:116
e o uid do contêiner do nó é 1000
, portanto, o processo do fio (que é executado como usuário do nó 1000) não pode fazer suas coisas, como mkdir /.config
.
Tentei girar o contêiner do nó que passava no argumento -u 1000
, ele esbarrava em problemas de permissão ao tentar criar diretórios duráveis.
Parece um ou outro tipo de problema, como posso resolver isso?
Registros de Jenkins:
Abaixo é onde a compilação começa e falha.
[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
fonte
fonte
Respostas:
Eu tive o mesmo problema com o nó. Os arquivos no contêiner pertencem a "root: root". Tente adicionar argumentos do docker
-u root:root
:fonte
pip install
comando resultando emCould not install packages due to an EnvironmentError: [Errno 13] Permission denied
; mencioná-lo aqui para ajudar pessoas à procura de que mesmo utilizando.virtualenv
oupip install --user
não corrigir o problema para mim)Acabei de ter um problema semelhante hoje, embora com outra imagem.
Referência: https://docs.docker.com/storage/tmpfs/ Dessa forma, você não deve se preocupar com vazamentos ou arquivos de segurança que estejam presentes após a destruição do contêiner dentro dos jenkins.
fonte
buildEnv.inside("-u 0") {}
resolveu meu problema. Mas o espaço de trabalho conterá o diretório e os arquivos pertencentes à raiz, que não poderão ser excluídos pelo usuário Jenkins na próxima execução ao limpar o espaço de trabalho, portanto, adicioneish "sudo chown jenkins: -R \$PWD/"
no início do pipeline.fonte