使用 Jenkins 管道在 Docker Hub 中构建 Docker 镜像

Jenkins Pipeline 是一个强大的工具,可以自动执行部署。在各个阶段之间拆分的灵活和自定义操作是尝试此功能的一个很好的理由。

构建您自己的 Docker 镜像并将其上传到 Docker Hub 以保持存储库更新是了解 Jenkins Pipeline 如何改进您的工作方式的一个很好的示例。

条件

  • 运行 Jenkins 和 Docker 的服务器(应允许 Jenkins 用户运行 Docker)
  • GitHub 帐户
  • Docker Hub 帐户

为什么要使用 Docker Hub?

在 Docker Hub 中构建 Docker 镜像具有多种优势。它特别有利于实现软件开发的持续集成 (CI)持续部署 (CD) 系统。以下是使用 Docker Hub 部署 Docker 镜像的一些优势。

  • 协作:自定义 Docker 镜像可以在从事同一项目的不同开发人员之间共享,因此有助于团队内更好的协作。
  • 自动化:Docker Hub 简化了开发管道和工作流的过程,并确保了持续的 Docker 镜像更新。
  • 安全性:Docker Hub 提供必要的安全性,以帮助保护 docker 镜像免受已知漏洞的侵害。
  • 可移植性:Docker 镜像可以在任何支持 Docker 的环境或平台上运行。

如何使用 Jenkins 管道在 Docker Hub 中构建 Docker 镜像

1. 设置环境

在 Jenkins 上安装 Docker Pipelines 插件

管理 Jenkins →管理插件。

搜索 Docker Pipelines,单击***"安装而不重启",***然后等待完成。

将 Dockerfile 定义上传到 GitHub 存储库。单击绿色按钮"克隆或下载",然后复制 URL。

在 Jenkins 上,需要使用 Docker Hub 帐户详细信息创建新凭据。转到**"凭据"→全局→"添加凭据** ",然后使用您的用户名和密码填写表单。填写 ID 和描述。请注意,如果设置了 ID,则需要此特定 ID 才能从脚本中引用此凭据。在这里,我们只是使用dockerhub_id

2. 创建第一个 Jenkins 管道

现在,我们已准备好创建第一个管道。在 Jenkins 上,转到"**新建项→管道",**键入此管道项目所需的名称,然后单击"确定"。

之后,您可以跳过所有"常规 "和*"生成触发器"* 选项,直接转到*"管道*"部分。在这里,您可以包含一个 Pipeline 定义(通常命名为 Jenkinsfile),也可以引用外部位置,如 Git 或 Subversion。

3. 定义 Jenkins 流水线

以下代码片段,声明了 Jenkins Pipline 以从 GitHub 存储库构建 Docker 镜像:

Groovy 复制代码
pipeline {
  environment {
      registry = "YourDockerhubAccount/YourRepository"
      registryCredential = 'dockerhub_id'
      dockerImage = ''
  }

  agent any
  stages {
      stage('Cloning our Git') {
          steps {
              git 'https://github.com/YourGithubAccount/YourGithubRepository.git'
          }
      }
      stage('Building our image') {
          steps {
              script {
                  dockerImage = docker.build registry + ":$BUILD_NUMBER"
              }
          }
      }
      stage('Deploy our image') {
          steps {
              script {
                  docker.withRegistry( '', registryCredential ) {
                      dockerImage.push()
                  }
              }
          }
      }
      stage('Cleaning up') { 
          steps { 
              sh "docker rmi $registry:$BUILD_NUMBER" 
          }
      }
  }
}

请注意,需要使用特定的 Docker Hub 和 GitHub 详细信息修改上述代码: 在这里,我们定义的管道有四个阶段:

  • 第一个是从我们的 GitHub 存储库中获取。Dockerfile
  • 第二个将用于标记版本来构建镜像。$BUILD_NUMBER
  • 第三个是将生成的镜像推送到 Docker Hub 注册表。
  • 最后,我们将清理之前在本地服务器上构建的镜像。

4. 运行管道并生成镜像

现在,我们已准备好运行 Pipeline 并检查输出,如果运行期间的任何阶段都存在错误。
转到 Jenkins 上的 Pipeline 项目,然后单击 Build Now以手动运行。您应该获得类似于以下阶段的不同阶段的顺序输出:

如果一切正常,可以检查 Docker Hub 存储库中的新镜像,该镜像标记有与 Docker Hub 注册表匹配的 Jenkins 构建版本:

这是如何使用 Pipelines 和集成部署的不同组件的基本示例。

最后的思考

在本文中,我们演示了在 Docker Hub 中使用 Jenkins 构建 Docker 镜像的简单过程。在进行过程中,可以通过管道创建许多复杂的集成。

使用 Jenkins 的一些想法:

  • 定义一个 Webhook,以便在提交提交到 GitHub 存储库时运行管道。
  • 在同一管道中包含多个容器,以保留不同的阶段(如后端和前端)或不同的环境(开发/生产)
  • 通过电子邮件/电报/Slack 设置通知,其中包含管道的状态和/或输出。
相关推荐
yeflx17 分钟前
OpenMVS源码编译
运维
有泽改之_43 分钟前
ssh命令使用
linux·运维·ssh
玩大数据的龙威1 小时前
【乱占耕地建房】—试点工作平台自动化填报系统
运维·自动化
JoyCong19982 小时前
高效远程协作指南:基于ToDesk的六大应用场景详解
运维·服务器·远程工作·远程操作
三不原则3 小时前
实战:混沌工程入门,模拟服务器宕机的故障演练
运维·kubernetes·chaos mesh
cws2004013 小时前
MFA双因素用户使用手册
运维·windows·网络安全·github·邮件·邮箱
weixin_462446233 小时前
使用 Python 脚本自动化管理 Docker 容器:启动、修改密码、删除及系统资源监控
python·docker·自动化·系统监控
溜达的大象4 小时前
Navidrome 打造专属无损音乐库,加载cpolar局域网外访问也能超丝滑
阿里云·docker·云原生·eureka
断水客4 小时前
搭建ARM LINUX 内核 QEMU 仿真调试环境
linux·运维·arm开发·嵌入式
fantasy5_54 小时前
深入理解 Linux 动静态库:制作、原理与加载机制
linux·运维·restful