【问题标题】:How does the Jenkins CloudBees Docker Build Plugin set its Shell PathJenkins CloudBees Docker Build Plugin 如何设置其 Shell Path
【发布时间】:2017-12-19 19:19:19
【问题描述】:

我正在使用我继承的 Jenkins 安装。此安装已安装 CloudBees Docker Custom Build Environment Plugin。我们认为这个插件在我们的构建配置中为我们提供了一个漂亮的在 Docker 容器内构建复选框。当我们使用此选项配置作业时,看起来(基于 Jenkins 控制台输出)Jenkins 使用以下命令运行构建

Docker container 548ab230991a452af639deed5eccb304026105804b38194d98250583bd7bb83q started to host the build
[WIP-Tests] $ docker exec -t 548ab230991a452af639deed5eccb304026105804b38194d98250583bd7bb83q /bin/sh -xe /tmp/hudson7939624860798651072.sh

但是——我们发现它在运行/bin/sh 时使用了非常有限的一组环境变量——包括不包括/bin$PATH!所以

  1. CloudBees Docker 自定义构建环境插件如何设置其/bin/sh 环境。该用户是否可以通过 UI 进行配置(如果可以,在哪里?)

  2. 看起来 Jenkins 正在使用 docker exec——我认为意味着它必须(不可见地)使用 docker run 设置一个具有长时间运行进程的容器。没有人知道CloudBees Docker Custom Build Environment Plugin 插件是如何调用docker run 的,如果这是用户可管理的?

【问题讨论】:

    标签: docker jenkins


    【解决方案1】:

    考虑到这个插件“准备采用”,我推荐官方JENKINS/Docker Pipeline Plugin

    source code show very few recent commits

    但不要忘记将任何容器 has a default entrypoint 设置为 /bin/sh

    ENTRYPOINT ["/bin/sh", "-c"]
    

    然后:

    Docker 容器在 SCM 被检出到从工作区后运行,然后由于 Docker 1.3 中引入的docker exec,所有以后的构建命令都在容器内执行

    这意味着您将要提取或构建/运行的映像必须有一个 shell,以允许 docker exec 在其中执行命令。

    【讨论】:

    • +1 感谢您提供有关 Pipeline 插件的提示 - 政治可能会阻止在此特定项目中使用它,但听起来我可能会在未来的项目中使用它。另外,感谢您提供有关 docker exec 的信息。根据最初的问题,我们知道 jenkins 使用 docker exec——但是,为了让 docker exec 工作,需要一个已经在运行而不是退出的容器——我们最终有兴趣了解 cloudbees 插件如何启动所有关闭。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-17
    • 1970-01-01
    • 1970-01-01
    • 2019-07-02
    • 2019-05-29
    • 2017-08-31
    相关资源
    最近更新 更多