Как я уже упоминал в этом комментарии , решение должно заключаться в добавлении надлежащего пользователя внутри контейнера.Jenkins использует 984:984
для uid / gid на моем компьютере (но может отличаться на вашем - войдите на хост, на котором работает Jenkins и выполните sudo -u jenkins id -a
для их обнаружения), поэтому вам нужно скопировать его в контейнер, который должен бытьвыполняется Jenkins:
FROM python:3.7
RUN mkdir /home/jenkins
RUN groupadd -g 984 jenkins
RUN useradd -r -u 984 -g jenkins -d /home/jenkins jenkins
RUN chown jenkins:jenkins /home/jenkins
USER jenkins
WORKDIR /home/jenkins
CMD ["/bin/bash"]
Конечно, поскольку вы больше не являетесь пользователем root
в контейнере, либо создайте виртуальную среду:
$ docker run --rm -it jenkins/python /bin/bash
jenkins@d0dc87c39810:~$ python -m venv myenv
jenkins@d0dc87c39810:~$ source myenv/bin/activate
jenkins@d0dc87c39810:~$ pip install numpy
или используйте --user
аргумент:
$ docker run --rm -it jenkins/python /bin/bash
jenkins@d0dc87c39810:~$ pip install --user --upgrade pip
jenkins@d0dc87c39810:~$ pip install --user numpy
и т. Д.
В качестве альтернативы вы можете (но в большинстве случаев не должны) входить в контейнер как root
, но с jenkins
group:
$ docker run --user 0:984 ...
Таким образом, хотя измененные файлы все равно изменят владельца, их групповое владение останется без изменений, поэтому Jenkins сможет очистить файлы (илиВы можете сделать это самостоятельно, через
sh 'rm -f modified_file'
в Jenkinsfile
.