我有一个自定义的ubuntu docker镜像,我在其中安装了一些包并设置了环境变量,这样我就可以在jenkins中使用它来构建项目
FROM ubuntu:focal
# Set environment
ENV DEBIAN_FRONTEND=noninteractive
ENV PATH="${PATH}:/usr/local/bin"
ENV DB_PATH="/var/database"
ENV DB_TYPE=SQLITE
ENV CONAN_USER_HOME=/var/conan
VOLUME ${DB_PATH}
RUN dpkg --add-architecture i386
&& apt-get update
&& apt-get upgrade -y
&& apt-get install -y
jq
lld
git
curl
libncurses5
cmake
lsb-release
binutils
autoconf
pkg-config
subversion
ninja-build
python3
python3-pip
python3-dev
python-dev-is-python3
libudev-dev
libgtk2.0-dev
libgtk-3-dev
autotools-dev
openjdk-11-jdk
libwebkit2gtk-4.0-dev
gcc-multilib
g++-multilib
libdbus-1-dev:i386
libgtk-3-dev:i386
&& apt-get autoclean
&& rm -rf
/var/lib/apt/lists/*
/var/tmp/*
/tmp/*
RUN mkdir -p ${CONAN_USER_HOME}
RUN pip install conan
当我告诉我的jenkins管道使用这个图像来构建我的项目时,它会抛出一个无法访问/var/conan
的错误
$ docker run -t -d -u 1000:1000 -w /home/jenkins/workspace/Conan -v /home/jenkins/workspace/Conan:/home/jenkins/workspace/Conan:rw,z -v /home/jenkins/workspace/Conan@tmp:/home/jenkins/workspace/Conan@tmp:rw,z -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** git.example.com:8444/devops/docker-environments/ubuntu:focal cat
$ docker top 30052002a0f00f32e8f42901ba82a36867874ef29c17c5d20cbf564e5e20723c -eo pid,comm
[Pipeline] {
[Pipeline] stage
[Pipeline] { (export)
[Pipeline] sh
+ python scripts/export2local.py
Traceback (most recent call last):
File "/usr/local/lib/python3.8/dist-packages/conans/util/files.py", line 193, in save
os.makedirs(dir_path)
File "/usr/lib/python3.8/os.py", line 223, in makedirs
mkdir(name, mode)
PermissionError: [Errno 13] Permission denied: '/var/conan/.conan/hooks'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/usr/local/lib/python3.8/dist-packages/conans/client/command.py", line 2216, in run
method(args[0][1:])
File "/usr/local/lib/python3.8/dist-packages/conans/client/command.py", line 1115, in export
return self._conan.export(path=args.path,
File "/usr/local/lib/python3.8/dist-packages/conans/client/conan_api.py", line 93, in wrapper
return f(api, *args, **kwargs)
File "/usr/local/lib/python3.8/dist-packages/conans/client/conan_api.py", line 879, in export
cmd_export(self.app, conanfile_path, name, version, user, channel, keep_source,
File "/usr/local/lib/python3.8/dist-packages/conans/client/cmd/export.py", line 112, in cmd_export
hook_manager.execute("pre_export", conanfile=conanfile, conanfile_path=conanfile_path,
File "/usr/local/lib/python3.8/dist-packages/conans/client/hook_manager.py", line 52, in execute
save(self._attribute_checker_path, attribute_checker_hook)
File "/usr/local/lib/python3.8/dist-packages/conans/util/files.py", line 196, in save
raise OSError("The folder {} does not exist and could not be created ({})."
OSError: The folder /var/conan/.conan/hooks does not exist and could not be created (Permission denied).
当我进一步研究这个问题时,它似乎是使用自定义uid和gid-u 1000:1000
而不是作为root运行容器。当我为Conan home取消设置环境变量为时,它只是默认为/
,并给出相同的错误。有没有一种方法可以让一个目录对所有用户都有写权限,因为这个容器在构建时不存在jenkins用户?
我不知道在容器中创建一个新用户会让jenkins默认为该用户,我认为它传递的参数总是相同的。