簡體   English   中英

詹金斯管道的docker容器內的sudo權限

[英]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用戶無法在/中創建新目錄。

您可以選擇幾種方法來解決問題:

  1. 通過刪除-u選項以root用戶身份運行容器(這意味着npm將由root用戶運行,這可能會導致安全問題)
  2. 將npm緩存路徑更改為非特權用戶可以在其中寫入的文件夾,例如/ tmp
  3. 使用自定義docker映像代替默認節點之一,在該默認節點上創建/.npm目錄並向非特權用戶授予寫權限。

我認為選項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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM