作为构建管道的一部分,我有一个包含构建工具的容器,该容器用于多个项目。我的项目之一包含构建步骤,以构建和发布容器,该步骤是从build-tools容器内完成的。我的启用了docker的jenkins-slaves配置为具有jenkins
group中的用户docker
。我使用-v挂载docker二进制文件和scoket。可以通过以下任一方式实现/复制:
在构建工具的Dockerfile中添加用户(jenkins)和组(docker),并将其设置为主机UID和GID
使用-u选项启动容器,提供UID和GUID(根据文档,容器中不需要存在用户和组)。
第一种策略的问题在于,在多个构建计算机上,用户名和组ID是不同的。我可以通过将所有构建机器的UID和GID更改为相同的值来解决此问题,但是docker是否不是要在没有对环境/上下文有很多依赖性的情况下独立运行的?这感觉不适合我。第二种策略在命令行上可以很好地工作,但是,似乎没有办法将UID和GID传递给Jenkinsfile中的agent命令。该args
参数不支持脚本或变量,如$(id -u)
。
我本来不是第一个遇到此问题的人,但是,我自己,搜索机器和堆栈溢出都无法找到解决方案。我应该选择“准备好的”构建奴隶,还是有办法使第二种策略起作用?
。
-edit-我了解以root身份运行容器并在启动后进行切换的选项(例如,使用入口点)。但是,这将需要我的Jenkins奴隶以root身份连接,这对我来说是不可接受的。另一个找到的替代方法是所有资源的chmod777,这完全不保证不以root用户身份运行Jenkins从站的安全性。我更愿意对容器使用-u选项,但是在从Jenkinsfile中启动docker agent(docker run
命令)之前,我找不到在jenkins从属服务器上确定UID和GID 的方法。