AWS EC2上Shell执行器GitLab Runner运行流水线无系统配置写入权限如何解决
问题产生原因
你使用的是Shell执行器的GitLab Runner,CI任务默认以EC2实例上的gitlab-runner普通用户身份执行,没有root权限。而amazon-linux-extras install属于系统级包安装操作,需要写入/etc/yum.repos.d/等只有高权限用户才能修改的系统目录,普通用户没有对应写入权限,因此触发报错。
可行解决方法
- 方法1:给
gitlab-runner用户配置sudo权限
登录EC2实例执行visudo编辑sudo规则,添加如下配置,可根据安全需求选择全局权限或者仅放开包管理相关命令权限:
配置完成后修改CI脚本中的对应命令,添加sudo前缀即可:# 全局无密码sudo权限(配置简单,安全性稍低) gitlab-runner ALL=(ALL) NOPASSWD: ALL # 仅放开包管理相关命令的无密码sudo权限(更安全) gitlab-runner ALL=(ALL) NOPASSWD: /usr/bin/amazon-linux-extras, /usr/bin/yum, /usr/bin/dnfsudo amazon-linux-extras install docker - 方法2:提前在EC2实例完成Docker安装,移除CI中的安装步骤
你已经在EC2实例上安装过Docker,无需每次执行CI任务都重复安装。只需要把gitlab-runner用户加入docker用户组,CI任务就可以直接调用docker命令:
之后删除CI脚本里的# 执行添加用户组命令 usermod -aG docker gitlab-runner # 重启GitLab Runner服务生效 systemctl restart gitlab-runneramazon-linux-extras install docker步骤即可。 - 方法3:更换为Docker执行器
重新注册GitLab Runner时选择Docker执行器,直接使用预装了Docker环境的官方镜像作为CI运行基础环境,不需要在任务中执行系统级安装操作,也能避免权限问题,同时更符合GitLab CI的隔离性最佳实践。
内容的提问来源于stack exchange,提问作者toto'
相关产品推荐
相关产品推荐

