如何在詹金斯(Jenkins)的docker镜像中运行快速车道

问题描述 投票:0回答:1

我正在使用Jenkins来运行CI。我正在使用Docker映像mingc/android-build-box在容器中运行快速车道(dokka)。如果我遵循建议的准则here,然后运行:

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

该操作成功,但是所有生成的文件均由root拥有。这破坏了配置项,因为在不再需要它们时我无法删除它们。

我试图通过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'作为您的主目录。 捆绑器:无法加载命令:fastlane(/ usr / local / bin / fastlane) Bundler :: GemNotFound:在任何来源中都找不到aws-eventstream-1.1.0

所以我尝试在bundle install --deployment之前调用bundle exec,现在出现错误:

fileutils.rb:232:in'mkdir':[!]权限被拒绝@ dir_s_mkdir-/.fastlane(Errno :: EACCES)

我用错误搜索了一下,但发现了很多报告,但都没有一个有用的答案,反正这并不理想,因为docker镜像已经安装了fastlane gem,因此能够使用它无需重新安装它。

另一种解决方案是让容器以root用户身份运行,然后在使用文件后删除文件。该解决方案也不理想,因为我必须记住删除创建的每个文件(容器除外)。

ruby docker jenkins fastlane
1个回答
1
投票

如果您在Jenkins中运行此程序,则its standard Docker support为您处理安装,权限,。在脚本化的管道代码中,它应该足以完成

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

Jenkins将WORKDIR安装到容器中(在相同路径上),以相同的用户ID运行,保留相同的工作目录,依此类推。您可以在其日志中看到它使用的(相当长的)docker run命令。

© www.soinside.com 2019 - 2024. All rights reserved.