簡體   English   中英

沒有根的Jenkins docker代理管道

[英]Jenkins docker agent pipeline without root

我有一個帶有非常基本的管道的Jenkinsfile,它可以旋轉docker容器:

pipeline {

  agent { dockerfile { args '-u root' } }

  stages {
    stage('Test') {
      steps {
        echo 'Testing...'
        sh 'whoami'
      }
    }
  }
}

問題是我在容器中設置的應用程序以必須以自己的用戶身份運行的方式進行配置,以root用戶身份運行將導致應用程序啟動失敗。 如果將args更改為args '-u foo' ,則在構建容器后會收到錯誤消息:

/var/lib/jenkins/workspace/*/*/jenkins-log.txt permission denied

該路徑在容器和jenkins服務器中都存在。 我在容器內的路徑上遇到問題。 保存在該位置的文件之一也是scripts.sh -jenkins將管道中的所有sh命令轉錄到該文件並運行該文件。

這使我陷入困境-似乎Jenkins要求容器以root用戶身份運行以實際發送任何命令,或者與容器中的任何內容進行交互,但是除非使用foo ,否則容器將無法正確構建。

有誰對這個問題有一個好的解決方案的想法?

問題在於,在Linux計算機上,docker大多以root身份運行。 Docker需要以root用戶身份運行,否則它將在聯網和其他方面遇到麻煩。 因此,您的Docker容器是由根進程運行的,所有創建的文件都將由啟用“根”的容器創建。

Jenkins雖然大多數情況下都不以root用戶身份運行,所以沒有刪除這些文件的權限。

可能的解決方案:

  • 確保在卷中創建的文件(到本地jenkins驅動器)具有分配給他們的權限,jenkins可以使用這些權限

希望我能正確解釋您的問題,對您有幫助...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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