You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jenkins以jenkins用户启动流水线容器遇权限拒绝错误

问题:Jenkins非root用户运行自定义Ubuntu镜像时Conan目录权限问题

问题背景

我制作了一个自定义Ubuntu Docker镜像,用于Jenkins构建项目,安装了所需软件包并配置了环境变量。对应的Dockerfile内容如下:

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).

问题核心

Jenkins以自定义UID/GID(1000:1000)的非root用户运行容器,而该用户在镜像构建时并不存在。创建的/var/conan目录默认属于root用户,导致Jenkins用户无法写入。即使取消CONAN_USER_HOME环境变量,Conan默认尝试写入的目录也因权限问题报错。

解决方案

方法1:直接开放目录全权限(CI环境常用)

修改Dockerfile中创建${CONAN_USER_HOME}的指令,添加权限设置,让所有用户都能读写该目录:

RUN mkdir -p ${CONAN_USER_HOME} \
    && chmod -R 777 ${CONAN_USER_HOME}

方法2:更严谨的权限配置(可选)

如果不想使用过于宽松的777权限,可以设置目录的组权限继承,并开放其他用户的读写权限:

RUN mkdir -p ${CONAN_USER_HOME} \
    && chmod -R ug+rwx,o+rw ${CONAN_USER_HOME} \
    && chmod g+s ${CONAN_USER_HOME}

g+s位可以确保后续在该目录下创建的文件自动继承目录的组权限,避免后续子目录出现权限问题。

额外注意

如果后续Conan默认路径仍出现权限问题,可以将CONAN_USER_HOME指向Jenkins的工作目录(该目录已通过挂载赋予读写权限),修改环境变量:

ENV CONAN_USER_HOME=/home/jenkins/workspace/Conan/.conan

不过这种方式依赖Jenkins工作目录的挂载配置,不如修改目录权限通用。

内容的提问来源于stack exchange,提问作者WilliamB

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 08:33:26