0

我正在尝试为我的代码创建一个 ci 管道。我已经在我的机器上注册了一个 docker executor 的跑步者。我注意到它正在使用 docker 容器内的 root 权限克隆存储库

$ ls -l
total 4
drwxrwxrwx 4 root root 4096 Jan  3 18:02 my-repo

因此,要在我的 repo 上构建内容,我必须使用 sudo 从我的 .gitlab-ci.yml 运行一些命令,而我不希望这样。

stages:
  - build

default:
  image: MyImage:latest

build:
  stage: build
  script: 
    # I don't want to use sudo here but as my repo is cloned with root privileges I must use sudo.
    - sudo ./build -j 1 

有没有办法告诉 gitlab-runner 以用户权限克隆存储库?

编辑

我的 dockerfile 使用用户创建图像

# Create a user of uid/gid 1000 to match user on most host machines
RUN apt-get update && apt-get -y install sudo && rm -rf /var/lib/apt/lists/*
RUN addgroup --gid 1000 myUser
RUN adduser --disabled-password --gecos "" --uid 1000 --gid 1000 myUser
RUN usermod -a -G sudo myUser
RUN echo '%sudo ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers
RUN usermod -a -G dialout myUser

USER myUser

RUN touch ~/.sudo_as_admin_successful

COPY --chown=1000:1000 export.sh .
RUN ./export.sh

WORKDIR /dev_folder/
CMD ["/bin/bash"]
4

1 回答 1

0

如果你在构建阶段需要这个,你必须从你的 Dockerfile 处理你的 repo 的用户权限。

这是来自 gitlab-ci 的构建阶段的经典示例:

build:
  stage: build
  script:
    - docker build --pull -t $CONTAINER_TEST_IMAGE -f ./docker/Dockerfile .
    - docker logout
    - docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN $REGISTRY_SERVER
    - docker push $CONTAINER_TEST_IMAGE
  only:
    - tags@group/project

所以你可以把你的代码写进 dockerfile 然后让 gitlab 来构建它

在您的情况下,您有两种方法:

  • 1 处理你图片的默认入口用户和权限
  • 2 在您的 gitlab-ci 文件中添加一个入口点,如下所示:

image:
  name: super/sql:experimental
  entrypoint: ["docker-entrypoint.sh"]

最后一个覆盖容器的默认入口点。我认为第一点是干净简单的方法

于 2022-01-03T18:33:17.823 回答