专栏首页JenkinsJenkins Docker 镜像重大更新

Jenkins Docker 镜像重大更新

从 Jenkins 2.279 和 2.263.4 开始,Jenkins 项目会更新基础操作系统和 Java 的版本,涉及到的镜像包括:jenkins/jenkins:latestjenkins/jenkins:lts。会将 OpenJDK 8u242 替换为 AdoptOpenJDK 8u282,将 Debian 9 ("Stretch") 替换为 Debian 10 ("Buster")。

为什么?

我们更改基础镜像,是为了可以有更好的操作系统的支持,以及包含更多 Java 发行版本。

更好的操作系统支持

由 Jenkins 提供的 Docker 镜像依赖于操作系统提供者对于系统安全的维护。

我们的 Docker 镜像已经使用了 Debian 9 ("Stretch") 很多年。Debian 9 的安全更新已于 2020 年 7 月 6 日停止更新。Debian 9 长期支持版本的安全更新也将于 2022 年 6 月停止更新。使用 Debian 10 可以让我们得到由操作系统安全团队更好的维护。

更多 Java 发行版

Debian 9 Docker 镜像是基于 openjdk:8-jdk-stretch 的。它的最后一次更新是在一年前,包含 JDK 8u242. 我们需要一个及时维护的 Docker 基础镜像,和 JDK 发布以及操作系统的更新保持一定的节奏,这样控制器就可以运行在最新的 Java 以及操作系统的之上。

其他 Jenkins 控制器的基础镜像已经从 openjdk 切换为由 Eclipse Adoptium 提供的镜像。Eclipse Adoptium 是 AdoptOpenJDK 加入 Eclipse 基金会后成立的。镜像 jenkins/jenkins:latest 和 jenkins/jenkins:lts 已经采用了基础镜像 Adoptium JDK,与此同时使用 JDK 11 的 Jenkins 镜像也同样采用了新的基础镜像,例如:jenkins/jenkins:lts-jdk11。这是 Jenkins Platform SIG 和 Eclipse Adoptium 项目合作的成果。我们期待继续和对方合作。

非常感谢 Alex Earl 和 Jim Crowley 为镜像构建做了基础重构的工作,使得镜像升级变得容易。同时,也非常感谢 Oleg Nenashev 和其他贡献者在此过程中 review 已经测试工作。

发行包变更

基于 Debian 10 ("Buster") 的 Jenkins Docker 镜像中所包含的软件包会与 Debian 9 ("Stretch") 的有一些不同。部分软件包由于对应社区不再提供支持,已经被移除。另外有一些软件包则由于不再被广泛使用而移除。Jenkins Docker 镜像的用户如果还需要那些软件包的话,则需要自行定制镜像。

被移除的 SCM 软件包

Jenkins 控制器镜像 jenkins/jenkins:latest 以及 jenkins/jenkins:lts 中已经不再包含如下的软件配置管理包:

  • bzr
  • mercurial
  • subversion

其他被移除的软件包

Jenkins 控制器镜像中不再包含的其他软件包有:

  • bzip2
  • mime-support
  • python (the Python project stopped supporting Python 2 January 1, 2020)
  • xz-utils

你可以从 Pull Request 中看到完整的列表。

升级与兼容

Jenkins 控制器镜像设计时考虑到了可扩展性,以方便满足用户的需求。自定义 Jenkins 控制器镜像时,可以添加 Jenkins 插件以及其他操作系统软件包。

例如,在自定义 Docker 镜像中可以通过 Docker 的指令可以安装 Blue Ocean 插件和一些操作系统软件包。

带有 Subversion 的 Docker 镜像

下面的 Docker 镜像基于最新的 Jenkins 长期支持版,以及 subversion 插件和 subversion 命令:

FROM jenkins/jenkins:lts
USER root
RUN apt-get update && \
    apt-get install -y --no-install-recommends subversion
USER jenkins
RUN jenkins-plugin-cli --plugins subversion:2.14.0

从这个 Dockerfile 构建出一个新的镜像,并给一个合适的名称,例如:"myjenkins-subversion:1.1"

docker build -t myjenkins-subversion:1.1 .

带有 Mercurial 的 Docker 镜像

下面的 Docker 镜像基于最新的 Jenkins 长期支持版,以及 mercurial 插件和 hg 命令:

FROM jenkins/jenkins:latest
USER root
RUN apt-get update && \
    apt-get install -y --no-install-recommends mercurial
USER jenkins
RUN jenkins-plugin-cli --plugins mercurial:2.12

从这个 Dockerfile 构建出一个新的镜像,并给一个合适的名称,例如:"myjenkins-mercurial:1.1"

docker build -t myjenkins-mercurial:1.1 .

下一步?

Java 有新的版本发布后,我们会继续更新 Jenkins 的 Docker 镜像。

如果你对 Jenkins Docker 打包的新特性感兴趣的话,请持续关注后续的公告!你可以在 Jenkins 公开的 roadmap 上看到有多个正在进行中的计划。部分如下:

  • Switching to AdoptOpenJDK.
  • General availability of Windows images.
  • Support for more platforms (AArch64, IBM s390x, PowerPC).
  • Introducing multi-platform Docker images.

如果你对如上的任意项目感兴趣,并想要贡献的话,请联系平台特别兴趣小组,共同协作推进。

本文分享自微信公众号 - Jenkins(Jenkins-Community),作者:Mark Waite

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2021-04-01

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Jenkins agent Docker 镜像重新命名了,你知道吗?

    我们正式宣布 Jenkins agent 官方 Docker 镜像重命名了。这对 Jenkins 用户不会产生任何直接影响,但是希望各位逐渐升级其实例。本文提供...

    LinuxSuRen
  • 【Docker】更新docker镜像源

    使用 docker 拉取 Docker Hub 上镜像时,可能会由于网络限制,导致下载失败。可以将 docker 的镜像源设置为国内的镜像, 目前支持的镜像源...

    程序小工
  • Jenkins 配合 Kubernetes 实现服务持续集成的实践和建议

    当你在网上搜索 Jenkins 持续集成 dockers/kubernetes 时,80% 答案是在Kubernetes集群中容器化 Jenkins,在我看来,...

    用户5166556
  • 【云+社区年度征文】在Kubernetes环境中采用Spinnaker的意义

    Spinnaker是最初由Netflix设计和开发的开源多云连续交付工具。它有助于将应用程序部署到各种云提供商,例如Google Cloud Platform(...

    DevOps云学堂
  • 在Kubernetes环境中采用Spinnaker的意义

    该博客的目的是帮助开发人员,架构师和商业从业人员了解采用Kubernetes环境时使用Spinnaker的重要性。您将了解:

    DevOps云学堂
  • 利用Docker开启持续交付之路

    持续交付即Continuous Delivery,简称CD,随着DevOps的流行正越来越被传统企业所重视。持续交付讲求以短周期、小细粒度,自动化的方式频繁...

    小小科
  • Docker 之 Jenkins自动化部署

    Docker搭建微服务自动部署 <架构探险之路>,让我们来看看如何实现基于Docker的Jenkins自动化部署。

    架构探险之道
  • 基于 Docker 的 Jenkins pipeline 工作流

    DevOps时代
  • 基于 Kubernetes 构建企业 Jenkins 持续集成平台

    3、Jnekins Pipeline 介绍与动态生成 Jenkins Slave

    DevOps持续交付

扫码关注云+社区

领取腾讯云代金券