[英]sudo permission inside docker container for jenkins pipeline
我已經使用聲明性語法創建了一個Jenkinsfile來構建我的nodejs應用程序。 我曾經使用過docker代理來構建,現在它給了我權限錯誤。 這是我的樣本Jenkinsfile。
pipeline {
agent {
docker {
image 'node:8.4'
}
}
stages {
stage('build') {
steps {
sh 'pwd'
sh 'npm --version'
sh 'npm --prefix ./Server install'
}
}
}
}
Unhandled rejection Error: EACCES: permission denied, mkdir '/.npm'
我什至嘗試添加sudo命令
sh 'sudo npm --version'
但是然后它給我沒有sudo發現的錯誤。 我們如何從Jenkinsfile授予docker內部權限,當前的unix用戶是我也已添加到sudoers中的jenkins。 當我運行Jenkins文件時,我可以看到它使用-u選項將jenkins用戶和組傳遞給了docker。
docker run -t -d -u 109:116 -w /var/lib/jenkins/testapp
問題與npm嘗試將其緩存寫入/.npm文件夾有關。 由於使用-u標志運行容器,因此您運行的用戶不是root用戶(默認)。 在Linux機器上,默認情況下,非root用戶無法在/中創建新目錄。
您可以選擇幾種方法來解決問題:
我認為選項2是最簡單的,只需在構建腳本中的npm install之前運行以下命令:
export HOME=/tmp ; npm config set cache /tmp
同樣,npm將其配置存儲到用戶的主目錄中。 由於您使用的用戶不存在於容器中,因此其主目錄設置為/。 為了避免出現寫權限錯誤,請嘗試將HOME env變量也設置為/ tmp。 您的安裝命令變為:
export HOME=/tmp ; npm --prefix ./Server install
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.