在我的 GitLab CI 脚本中,我正在创建一个新用户,然后执行命令。我注意到,当以此用户身份执行命令时,CI 环境变量不可用。
以下是我所做的:
before_script:
- useradd -U -d "$CI_PROJECT_DIR" newuser
test-app:
stage: test
image: open-jdk
script:
- echo $MY_CI_VAR #here I can see the env var set in GitLab CI
- su newuser -l -c "grails test-app -unit FooHelper" #in the code it is not available
问题
有没有办法在创建新用户时或以该用户身份执行命令时传递环境变量。
答案1
问题在于,您正在执行的命令是以其他用户的身份运行的,su
默认情况下不会带上您的环境。您指定-l
选项,该选项将在切换到其他用户之前清除环境变量。您可以删除该-l
选项,而改用-m
保留环境。
尝试这个:
- su newuser -m -c "grails test-app -unit FooHelper"
您可能需要设置完整路径,grails
因为您的PATH
环境变量不会设置为newuser
PATH。
如果您需要保留登录 shell,您也可以将其传递到命令中。
- su newuser -l -c "MY_CI_VAR=$MY_CI_VAR grails test-app -unit FooHelper"