2017-02-23 54 views
1

當我試圖運行下面的管道,它失敗,此錯誤:在詹金斯管道與碼頭工人劑使用git

Cloning into '/go/src/github.com/gorilla/websocket'...

fatal: unable to look up current user in the passwd file: no such user

package github.com/gorilla/websocket: exit status 128

據我瞭解,這個問題是,詹金斯開始與容器用戶從jenkins用戶,以保持文件系統權限(碼頭運行-t -d -u 108:113 ....),但我怎樣才能使用GIT呢?

pipeline { 
agent none 
stages { 

... 

    stage('Build Code') { 
     agent { 
      docker { 
       image 'xxx.de/go_build_container' 
       args '-v=$WORKSPACE:/go/src/bitbucket.org/xxx/service_donation' 
      } 
     } 
     environment { 
      HOME = "." 
     } 
     steps { 
      sh 'cd /go/src/bitbucket.org/xxx/service_donation && go get github.com/gorilla/websocket' 

     } 
    } 

回答

3

當用戶ID不在/ etc/passwd中運行時,很多程序將無法工作,並且git是其中一個程序。

您必須爲您的碼頭容器指定正確的-u參數,即存在於您的xxx.de/go_build_container圖像中的參數,根(或0:0)是其中之一。 因此,像這樣:args '-v=$WORKSPACE:/go/src/bitbucket.org/xxx/service_donation -u 0:0'它會工作。

然後,你將面對另一個問題:在你的卷創建的文件將屬於你正在使用你的貨櫃裏的UID,您可能需要添加一些chown如果你想在你的管道後重新使用這些文件。

+0

謝謝它幫助我很多! –

1

我發現的另一個選擇是將/ etc/passwd掛載到容器。

 agent { 
      docker { 
       image 'xxxx' 
       args '-v=/etc/passwd:/etc/passwd' 
      } 
     } 

我不知道,如果有任何其他的問題,但它似乎工作,你不必與錯誤的權限問題。