以非 root 用户身份运行 gitlab-ci 管道作业

问题描述 投票:0回答:6

我有一个

mvn
项目,必须以非 root 用户身份构建 但默认情况下 gitlab-ci 允许运行者以 root 用户身份运行。 我通过设置
gitlab.com
文件来使用
gitlab-ci.yml
跑步者。 我尝试创建一个用户并像这样切换到它:

$ useradd ***
$ su -***
$ whoami
root

它仍然说我是root。 我该如何解决这个问题?

maven gitlab gitlab-ci gitlab-ci-runner
6个回答
5
投票

您可以使用

sudo
轻松实现此目的,例如, 摘自我的 .gitlab-ci.yml:

script:
    - useradd -d /builds/{GITLAB_USER} -g users -M -N builder
    - chown -R builder:users ..
    - |     
      sudo -H -i -u builder sh -e -x << EOS                                                                                                                                                                                                                       
      umask 0077                                                                                                                                                                                                                                               
      export CONTINUOUS_INTEGRATION_SYSTEM="gitlab" TIMESTAMP=`date +%Y%m%d%H%M%S` DEFAULT_TARGET="debug"                                                                                                                                                      
      export PREFIX="\${HOME}/usr" SYSCONFDIR="\${HOME}/etc/conf" LOCALSTATEDIR="\${HOME}/var"                                                                                                                                                                 
      cd my-project                                                                                                                                                                                                                                                  
      make install                                                                                                                                                                                                                                             
      make -C _deploy/debian clean package bundle BUILD_ID="-0{other}\${TIMESTAMP}"                                                                                                                                                                        
      EOS

其中 {GITLAB_USER} 是您实际的 gitlab 用户。 请记住在脚本中转义 $


0
投票

只需为正确的用户安装 gitlab-runner 服务即可:

gitlab-runner install --working-directory /home/ubuntu --user ubuntu

这里,

ubuntu
是任意非root用户。


0
投票

sudo gitlab-runner install --working-directory /home/username --user username

您需要 root 身份才能使用

--user
标志进行安装,这样您就可以作为非特权用户运行 gitlab-runner。


0
投票

最后,我使用 Dockerfile 构建了一个基础镜像,其中包括允许新用户使用 sudo:

RUN yum makecache \
  && yum -y install shadow-utils sudo \
  && /usr/sbin/useradd -d /builds -g users -M -N builder \
  && echo 'builder ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers

USER builder

然后修复管道文件中

/builds
部分中的
before_script
权限:
.gitlab-cy.yml

  before_script:
  - sudo /bin/chown -R builder:users /builds
  script:
  - ...

0
投票

以下是我在 Vagrant VM 中为非 root 用户设置

gitlab-runner
的方法(也应该适用于非 VM 机器):

  • 检查进程是否正在为现有用户运行:

ps aux | grep gitlab

  • 如果进程正在运行,则运行上一个命令后它将看起来像这样:

/usr/bin/gitlab-runner run --config /etc/gitlab/runner/config.toml --service gitlab-runner

  • 停止现有的
    gitlab-runner
    systemd 服务:

sudo systemctl stop gitlab-runner

  • 如果您再次输入

    ps aux | grep gitlab
    ,该进程不应再出现。

  • 卸载现有用户的“gitlab-runner”服务:

sudo gitlab-runner uninstall

  • 为新用户(例如非 root)创建“gitlab-runner”配置:
# Copy over the default 'gitlab-runner' config to the user's home directory
mkdir -p ~/.config/gitlab-runner
sudo cp /etc/gitlab-runner/config.toml ~/.config/gitlab-runner/
sudo chown $USER:$USER ~/.config/gitlab-runner/config.toml
chmod 600 ~/.config/gitlab-runner/config.toml
  • 为新用户重新安装服务:
sudo gitlab-runner install \
  --service gitlab-runner \
  --user $USER \
  --working-directory /home/$USER \
  --config /home/$USER/.config/gitlab-runner/config.toml
  • 重新加载 systemd 守护进程:

sudo systemctl daemon-reload

  • 启动新用户的
    gitlab-runner
    systemd 服务:

sudo systemctl start gitlab-runner

  • 检查该进程是否正在为新用户运行:

ps aux | grep gitlab

  • 新流程应该看起来像这样(我为此使用了 Vagrant,所以我的用户是
    vagrant
    ):

/usr/bin/gitlab-runner run --working-directory /home/vagrant --config /home/vagrant/.config/gitlab-runner/config.toml --service gitlab-runner --user vagrant


-1
投票

有多种方法可以实现这一点。 由于 gitlab-ci 作业只是运行进程的 docker 容器, 实现这一目标的一种方法 就是使用 gosu ,您可以以非 root 用户身份运行进程。 一些显示如何使用 gosu 的链接:

© www.soinside.com 2019 - 2024. All rights reserved.