簡體   English   中英

如何在 Jenkins 上的 docker 圖像中運行快車道

[英]How to run a fastlane lane in a docker image on Jenkins

我正在使用 Jenkins 來運行 CI。 我正在使用 docker 映像mingc/android-build-box在容器中運行快車道 ( dokka )。 如果我遵循此處建議的指南並運行:

docker run --rm -v `pwd`:/project mingc/android-build-box bash -c 'cd /project; bundle exec fastlane dokka'

操作成功,但所有生成的文件都歸 root 所有。 這會破壞 CI,因為不再需要它們時我無法刪除它們。

我試圖通過 CI 用戶:

docker run --rm --user $(id -u):$(id -g) -v `pwd`:/project mingc/android-build-box bash -c "cd /project; bundle install --deployment; bundle exec fastlane dokka"

我得到錯誤:

/不可寫。 Bundler 將臨時使用 `/tmp/bundler20200511-6-m21qkb6' 作為您的主目錄。 bundler:加載失敗命令:fastlane (/usr/local/bin/fastlane) Bundler::GemNotFound:在任何源中都找不到 aws-eventstream-1.1.0

所以我嘗試在bundle install --deployment之前調用 bundle bundle exec ,現在我得到了錯誤:

fileutils.rb:232:in `mkdir': [.] Permission denied @ dir_s_mkdir - /:fastlane (Errno::EACCES)

我用谷歌搜索了這個錯誤,我發現了很多報告,但沒有一個包含有用的答案,無論如何,這並不理想,因為 docker 圖像已經安裝了 fastlane gem,能夠在沒有的情況下使用它會很好不得不重新安裝它。

另一種解決方案是讓容器以 root 用戶身份運行,然后在使用文件后刪除文件。 該解決方案也不理想,因為我必須記住刪除創建的每個文件,但容器除外。

如果您在 Jenkins 中運行它,它的標准 Docker 支持會為您處理安裝、權限 在腳本化的管道代碼中,應該足夠了

docker.inside('mingc/android-build-box') {
  sh 'bundle exec fastlane dokka'
}

Jenkins 會將WORKDIR掛載到容器中(在相同的路徑上),以相同的用戶 ID 運行,保持相同的工作目錄,等等。 您可以在其日志中看到它使用的(相當長的) docker run命令。

暫無
暫無

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

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