Linux

是否可以將環境變數傳遞給新創建的使用者?

  • July 24, 2017

在我的 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

問題

有沒有辦法在創建新使用者或以該使用者身份執行命令時傳遞環境變數。

問題是您正在執行的命令是以不同的使用者身份執行的su,預設情況下不會帶來您的環境。您指定-l將在切換到其他使用者之前清除環境變數的選項。您可以放棄該-l選項並使用它-m來保護環境。

試試這個: - su newuser -m -c "grails test-app -unit FooHelper"

您可能需要將完整路徑設置為,grails因為您PATH是一個不會設置為newuserPATH 的環境變數。

如果您需要保留登錄 shell,您也可以將其傳遞給命令。 - su newuser -l -c "MY_CI_VAR=$MY_CI_VAR grails test-app -unit FooHelper"

引用自:https://serverfault.com/questions/864922