更改Gitlab CI Runner用户

时间:2016-05-12 13:07:43

标签: gitlab gitlab-ci gitlab-ci-runner

目前,当我在GitlabCI中开始构建时,它在gitlab-runner用户下运行。我想将其改为公司的内部用户。我没有找到/etc/gitlab-runner/config.toml的任何参数来解决这个问题。

我目前的配置:

concurrent = 1
[[runners]]
  name = "deploy"
  url = ""
  token = ""
  executor = "shell"

7 个答案:

答案 0 :(得分:44)

运行ps aux您可以看到:

/usr/bin/gitlab-ci-multi-runner run --working-directory /home/gitlab-runner --config /etc/gitlab-runner/config.toml --service gitlab-runner --syslog --user gitlab-runner

服务正在使用选项--user运行。

所以让我们改变这一点,这取决于什么发行版。你正在运行它。如果是systemd,则有一个文件:

/etc/systemd/system/gitlab-runner.service:

[Service]
StartLimitInterval=5
StartLimitBurst=10
ExecStart=/usr/bin/gitlab-ci-multi-runner "run" "--working-directory" "/home/gitlab-runner" "--config" "/etc/gitlab-runner/config.toml" "--se

Bingo,我们现在改变这个文件:

gitlab-runner uninstall

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

重新启动计算机或重新加载服务(例如systemctl daemon-reload),etvoilà!

答案 1 :(得分:5)

请注意,与特定用户(--user)一起安装时,每次更新时,它将恢复为原始的systemd脚本,因此,将恢复为使用gitlab-runner用户。

为了使用户在更新之间保持一致,使用systemd覆盖(centos7),可以使用以下步骤(假设服务位于select ship_id, sum(case when task_type = 'V' then task_duration else 0 end) as v_duration, sum(case when task_type = 'T' then task_duration else 0 end) as t_duration, sum(case when task_type = 'C' then task_duration else 0 end) as c_duration from (select td.*, lead(task_type) over (partition by ship_id order by task_sid) as next_task_type, lead(task_type, 2) over (partition by ship_id order by task_sid) as next2_task_type, lag(task_type) over (partition by ship_id order by task_sid) as prev_task_type, lag(task_type, 2) over (partition by ship_id order by task_sid) as prev2_type, from task_detail td ) td where (task_type = 'V' and next_task_type = 'T' and next2_task_type = 'C') or (prev_task_type = 'V' and task_type = 'T' and next_task_type = 'C') or (prev2_task_type = 'V' and prev_task_type = 'T' and task_type = 'C') group by ship_id; ):

  1. 创建一个/etc/systemd/system/gitlab-runner.service目录。
  2. 创建一个/etc/systemd/system/gitlab-runner.service.d文件,其内容为:

    /etc/systemd/system/gitlab-runner.service.d/exec_start.conf
  3. 执行[Service] ExecStart= ExecStart=/usr/lib/gitlab-runner/gitlab-runner "run" "--working-directory" "/home/ubuntu" "--config" "/etc/gitlab-runner/config.toml" "--service" "gitlab-runner" "--syslog" "--user" "ubuntu"


现在要检查它是否正常工作,您可以执行以下操作:

  1. 重新安装GitLab Runner软件包systemctl daemon-reload,然后重新安装gitlab-runner uninstall

  2. 选中gitlab-runner install并确认正在使用正确的用户

来源:https://gitlab.com/gitlab-org/gitlab-runner/issues/3675

答案 2 :(得分:1)

[弃用的答案]

我找到了一个解决方案,这不是最好的pactrice,而是解决了它。我需要使用ssh执行器和ssh到localhost。需要将gitlab-runner id_rsa.pub添加到用户的authorized_keys中以便使用。有我的扩展代码:

concurrent = 1

[[runners]]
  name = "deploy"
  url = ""
  token = ""
  executor = "ssh"
  [runners.ssh]
    user = "user"
    host = "localhost"
    port = "22"
    identity_file = "/home/gitlab-runner/.ssh/id_rsa"

答案 3 :(得分:0)

为了将来参考,我正在使用我的设置的克隆版本进行测试,如果域名没有指向您正在使用的服务器,gitlab可能会认为您的跑步者离线。如果您在域指向的ip上运行另一个(复制的)实例并且没有防火墙阻塞,则gitlab-runner verify命令会说您的跑步者还活着。

解决方案可能是将指向127.0.0.1的域添加到您的hosts文件中。你必须重新启动你的gitlab实例和跑步者。

答案 4 :(得分:0)

对于最新版本的gitlab-runner,您应该修改/etc/default/gitlab-runner文件中的系统参数。

答案 5 :(得分:0)

gitlab-runner一旦注册(是的,它将安装在用户gitlab-runner和工作目录/home/gitlab-runner下),您可以执行以下命令来更改跑步者的用户

gitlab-runner uninstall
gitlab-runner install --working-directory <existing-path> --user <any-existing-user>

# eg: gitlab-runner install --working-directory /home/ec2-user --user ec2-user

然后重新启动服务

service gitlab-runner restart

注意:您不需要为此编辑/etc/systemd/system/gitlab-runner.service,因为一旦如上所述重新启动服务,它就会被更新

要检查配置是否正确,请运行

ps aux | grep gitlab

答案 6 :(得分:0)

这里是 docker gitlab-runner 的示例:

使用以下内容基于 Dockerfile 构建您自己的运行器映像

FROM gitlab/gitlab-runner
# add new user (if needed)
RUN useradd -u 998 gitlab-www && mkdir /home/gitlab-www && \
    chown gitlab-www /home/gitlab-www && chmod u+rwx /home/gitlab-www
# need to replace entrypoint to force new created user over gitlab-runner
ENTRYPOINT /usr/bin/dumb-init /entrypoint run --user=gitlab-www --working-directory=/home/gitlab-www

(根据需要更新 -u 998gitlab-www

.gitlab-ci.yml 脚本现在以用户 gitlab-www 运行。如果这个和主机挂载有相同的 uid,你也可以直接部署到主机文件夹。