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

gra*_*dev 6 maven gitlab gitlab-ci gitlab-ci-runner

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

$ useradd ***
$ su -***
$ whoami
root
Run Code Online (Sandbox Code Playgroud)

它仍然说我是根.我怎么解决这个问题?

Amo*_*son 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
Run Code Online (Sandbox Code Playgroud)

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

  • 在 GitLab 10.0 及更高版本中,您可以使用 `${GITLAB_USER_LOGIN}` 而不用手动进行用户名替换 - 这使得它可以跨分支工作。您可能还希望将实际项目名称替换为“${CI_PROJECT_NAME}”(请注意,您不应转义_this_“$”),这使得它甚至可以在采用不同项目名称的分叉上工作。 (2认同)

Jim*_*bor -1

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