2017-08-21 83 views
3

我使用Jenkins流水線(使用由JHipster自動生成的流水線腳本)構建Docker圖像。我想將我的最終碼頭圖像推送到Google Container Registry。Jenkins使用Docker,Google Registry和Google Auth Plugin構建流水線

這裏是我做了什麼:

  1. 我已經安裝了兩個CloudBees的碼頭工人自定義生成環境插件與谷歌容器註冊驗證插件。
  2. 我已經設置了谷歌身份驗證憑據詹金斯以下說明了here
  3. 我已經配置了我的生成步驟使用谷歌註冊標記格式,例如:docker.build('us.gcr.io/[my-project-id]/[my-artifact-id]', 'target/docker')
  4. 我引用的ID我谷歌驗證憑證在我的推步:

(HM需要額外的文本行後子彈正確格式。)

docker.withRegistry('https://us.gcr.io', '[my-credential-id]') { 
    dockerImage.push 'latest' 
} 

但BUIL

ERROR: Could not find credentials matching [my-credential-id] 
Finished: FAILURE 

我在相信這些插件沒有在管道的世界而努力點基本上我,但我認爲我會問是否有人已經做到了這一點,並能給我一些指點:與d失敗。

stage('publish gcloud') { 
    sh "gcloud docker -- push us.gcr.io/[my-project-id]/[my-artifact-id]" 
} 

的gcloud指令是能夠找到的設置使用的身份驗證憑據:

回答

5

嘗試用「gcr:」爲憑證ID加前綴。

您的憑證編號看起來像「gcr:[my-credential-id]」。

完整的工作例如:

stage('Build image') { 
    app = docker.build("[id-of-your-project-as-in-google-url]/[name-of-the-artifact]") 
} 
stage('Push image') { 
    docker.withRegistry('https://eu.gcr.io', 'gcr:[credentials-id]') { 
    app.push("${env.BUILD_NUMBER}") 
    app.push("latest") 
    } 
} 

請注意圖片的名稱。直到我將圖像命名爲[id-of-your-project-as-in-google-url]/[artifact-name-artifact]符號之前,我一直在努力推動圖像,甚至連工作憑證。

當您收到需要啓用Google ....... API的消息時,可能是您的[id-of-your-project-as-in-google-url]錯誤。

圖片現在可以成功地與eu.gcr.io/[id-of-your-project-as-in-google-url]/[name-of-the-artifact]:47的網址一起使用。

LZ

+0

這當然有幫助。我不再收到「無法找到憑據」錯誤,但我被卡在「未授權:未授權」錯誤。感謝指針! – bcholmes

+1

我寫了那條評論之後,我試着清理掉了'.docker/config.json'中的所有內容,這似乎有所幫助。 – bcholmes

+1

寫了我的迴應幾個小時後,我結束了工作解決方案。我已經更新了答案以反映解決方案。 – LZaruba

0

我最終使用gcloud腳本階段到位碼頭工人,流水線級的,像這樣繞過問題在Jenkins服務器的命令行上輸入gcloud init

+0

我見過的gcloud指令回來與「未授權」一coupl'a倍。也許授權超時? – bcholmes

+0

是的,gcloud命令很快就失去了授權信息。這不是一個可行的解決方案。 – bcholmes

+0

[This](https://stackoverflow.com/questions/38764193/google-cloud-jenkins-gcloud-push-access-denied)問題提出了一種替代方法。 – bcholmes