在GitLab CI的Ubuntu容器中执行Packer命令时如何指定root用户?
解决GitLab CI中Packer无法确定当前用户的问题
我之前也碰到过完全一样的问题!在GitLab CI的Ubuntu容器里执行Packer构建时,经常会因为容器内用户环境变量不完整,导致Packer没法识别当前用户,抛出你看到的那个错误。下面几个方法亲测有效,你可以试试:
方法1:直接以root用户运行Packer命令
GitLab CI里的ubuntu:latest容器默认是用root启动的,但有时候环境变量没完全加载,你可以用su - root来确保命令在完整的root环境下执行:
packer_build: image: ubuntu:latest script: - apt-get update && apt-get install -y packer - su - root -c 'PACKER_LOG=1 packer build image.json'
如果你的容器里装了sudo(可以先通过apt-get install -y sudo安装),也可以直接用sudo前缀:
packer_build: image: ubuntu:latest script: - apt-get update && apt-get install -y packer sudo - sudo PACKER_LOG=1 packer build image.json
方法2:手动设置用户相关环境变量
Packer识别用户依赖USER、HOME这些基础环境变量,有时候容器里这些变量没正确设置,你可以手动导出它们:
packer_build: image: ubuntu:latest script: - apt-get update && apt-get install -y packer - export USER=root - export HOME=/root - PACKER_LOG=1 packer build image.json
方法3:改用HashiCorp官方Packer镜像
最省心的办法其实是直接用HashiCorp官方维护的Packer Docker镜像,这个镜像已经预先配置好了正确的用户环境,默认就是root用户运行,完全不会有用户识别的问题:
packer_build: image: hashicorp/packer:latest script: - PACKER_LOG=1 packer build image.json
最后提醒一句:不管用哪种方案,记得在GitLab CI的项目变量里配置好AWS的访问凭证(AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY),不然还会碰到AWS权限相关的错误哦!
内容的提问来源于stack exchange,提问作者user_01_02
相关产品推荐
相关产品推荐

