如何将GitLab Runner服务器的20个Runner重新注册到新自管理GitLab实例?
GitLab Runner批量迁移到新实例的解决方案
核心结论
可以批量更新注册令牌完成迁移,不需要逐个手动重新注册,同时你的Runner版本(16.4)和新GitLab实例版本(EE 16.3.4)是兼容的(GitLab允许Runner版本比实例高1个次要版本),无需降级。
关于gitlab-runner reset-token的作用
这个命令不能直接帮你切换到新GitLab实例,它的用途是:针对同一个GitLab实例,当某个Runner的注册令牌过期、失效时,重新获取并更新该Runner配置里的令牌,让它能重新连接原实例。因为新实例的注册令牌和原实例完全独立,所以这个命令对你的迁移场景没用。
批量迁移的具体操作
方法1:批量修改Runner配置文件(推荐)
所有Runner的配置都存在/etc/gitlab-runner/config.toml(默认路径)里,每个[[runners]]块对应一个Runner。你只需批量修改两个关键字段:
url:替换为新GitLab实例的地址(比如url = "https://new-gitlab.your-domain.com/")token:替换为新实例对应层级的注册令牌(实例级、组级或项目级,根据你原来的Runner注册层级选择)
批量修改技巧:
- 用sed批量替换地址:
sudo sed -i 's/https://old-gitlab.your-domain.com/https://new-gitlab.your-domain.com/g' /etc/gitlab-runner/config.toml - 如果所有Runner都用同一个新令牌(比如实例级或同一组),批量替换令牌:
sudo sed -i 's/old-runner-token-string/new-registration-token/g' /etc/gitlab-runner/config.toml - 如果每个Runner需要对应不同项目的令牌,可直接打开
config.toml用编辑器批量替换,或者写个简单脚本遍历修改。
修改完成后重启Runner服务:
sudo gitlab-runner restart
方法2:用脚本批量重新注册
如果你不想手动改配置文件,可以写个shell脚本循环调用注册命令,批量生成新的Runner配置:
# 配置新实例信息 NEW_GITLAB_URL="https://new-gitlab.your-domain.com/" NEW_TOKEN="你的新注册令牌" # 按原Runner的描述和标签填写,顺序对应 RUNNER_NAMES=("Build-Runner-1" "Test-Runner-2" "Deploy-Runner-3") RUNNER_TAGS=("build,nodejs" "test,python" "deploy,k8s") RUNNER_EXECUTOR="docker" # 根据你的实际执行器修改,比如shell、kubernetes for idx in "${!RUNNER_NAMES[@]}"; do gitlab-runner register \ --non-interactive \ --url "$NEW_GITLAB_URL" \ --registration-token "$NEW_TOKEN" \ --description "${RUNNER_NAMES[$idx]}" \ --tag-list "${RUNNER_TAGS[$idx]}" \ --executor "$RUNNER_EXECUTOR" done
注意:这种方式会在config.toml里新增新的Runner条目,若不需要旧配置,可先备份后删除原config.toml再执行脚本。
验证迁移结果
重启后,在新GitLab实例的Admin → Runners页面检查所有Runner是否显示为在线状态,也可以在Runner服务器上执行:
gitlab-runner verify
确认所有Runner都能正常连接新实例。
内容的提问来源于stack exchange,提问作者foad322
相关产品推荐
相关产品推荐

