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

news2024/11/16 20:30:03

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。

例 Github 存储库


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

Docker 中心 ID

2. 创建第一个 Jenkins 管道

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

创建 Jenkins 管道

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

3. 定义 Jenkins 流水线

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

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 管道



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

Docker Hub 存储库


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

最后的思考

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

使用 Jenkins 的一些想法:

  • 定义一个 Webhook,以便在提交提交到 GitHub 存储库时运行管道。
  • 在同一管道中包含多个容器,以保留不同的阶段(如后端和前端)或不同的环境(开发/生产)
  • 通过电子邮件/电报/Slack 设置通知,其中包含管道的状态和/或输出。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1526278.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

详细分析Python装饰器(附Demo)

目录 前言1. 基本知识2. 无参装饰器3. 有参装饰器4. 多个装饰器 前言 装饰器类似Java的切点切面增强 推荐阅读: 详细分析Spring中的Around注解(附Demo)java框架 零基础从入门到精通的学习路线 附开源项目面经等(超全&#xff0…

如何实现Git Push之后自动部署到服务器?

在平时个人开发的过程中是不是有这样的烦恼: 项目开发完成,Push之后 登录服务器,手动git pull,然后运行部署命令 这真的很烦诶! 那么能不能Git push之后,远端服务器自动 Git pull 然后运行部署命令呢&a…

内网安全之-NTLM协议详解

NTLM(New Technology LAN Manager)身份验证协议是微软用于Windows身份验证的主要协议之一。早起SMB协议以明文口令的形式在网络上传输,因此产生了安全性问题。后来出现了LM(LAN Manager)身份验证协议,它非常…

排序问题—java实现

冒泡排序 算法思想: 每次比较相邻元素,若逆序则交换位置,每一趟比较n-1次,确定一个最大值。故需比较n趟,来确定n个数的位置。 外循环来表示比较的趟数,每一趟确定一个最大数的位置内循环来表示相邻数字两…

2024考研国家线公布,各科分数线有哪些变化?考研国家线哪些涨了,哪些跌了?可视化分析告诉你

结论在文章结尾 2024考研国家线 一、近五年国家线趋势图-学术硕士 文学 管理学 工学照顾专业 体育学 交叉学科 军事学 历史学 理学 享受少数名族照顾政策的考生 中医类照顾专业 教育类 艺术类 医学 工学 哲学 法学 农学 经济学 二、近五年国家线趋势图-专业硕士 中医 应用心理 …

IPSEC VPN-详解原理

目录 IPSEC提供的安全服务 IPSEC协议簇 ​编辑 安全协议 1.传输模式 2. 隧道模式 AH ---鉴别头协议 AH提供的安全服务: AH头部 AH的保护范围 1.传输模式 2.隧道模式 ​编辑 ESP ---封装安全载荷协议 ESP提供的安全服务: ESP的头部 ESP的保护范围 1.传输…

如何选择合适的数据可视化工具?

如果是入门级的数据可视化工具,使用Excel插件就足够了! Excel插件,tusimpleBI 是一款 Excel 图表插件,提供超过120项图表功能,帮助用户制作各种 Excel 所没有的高级图表,轻轻松松一键出图。 它能够制作10…

【送书福利!第一期】《ARM汇编与逆向工程》

🐮博主syst1m 带你 acquire knowledge! ✨博客首页——syst1m的博客💘 😘《CTF专栏》超级详细的解析,宝宝级教学让你从蹒跚学步到健步如飞🙈 😎《大数据专栏》大数据从0到秃头👽&…

SD-WAN解决企业在工业互联网时代的新困境

工业互联网迎来全新的发展契机,而SD-WAN技术将成为制造企业快速崭露头角的得力助手! 制造业的数字化转型已成为经济全球化和数字化浪潮的必然产物。许多制造企业迅速向人口密集区域扩张,呈现出分支众多、布局分散的特点。随着工业互联网的蓬勃…

Linux环境开发工具之yum

前言 前面我们已经对基本的指令和权限进行了介绍,本期开始我们将介绍常用的开发工具。例如:软件包管理器yum。 本期内容介绍 Linux上安装软件的方式 什么是yum yum的相关操作 yum的本地配置和yum源 一、Linux上安装软件的方式 在介绍Linux上如何安装一…

upload-lab 11-20解法

pass11 查看代码 这里我们先解读下代码 $is_upload false; $msg null; if(isset($_POST[submit])){# 定义了白名单数组$ext_arr array(jpg,png,gif);# 截取上传文件名最后一个带点的文件后缀 $file_ext substr($_FILES[upload_file][name],strrpos($_FILES[upload_file][n…

10:00面试,10:06就出来了,问的问题有点变态。。。

从小厂出来,没想到在另一家公司又寄了。 到这家公司开始上班,加班是每天必不可少的,看在钱给的比较多的份上,就不太计较了。没想到8月一纸通知,所有人不准加班,加班费不仅没有了,薪资还要降40%…

SHELL——条件判断语句练习

目录 一、练习题目 二、解答过程 1、判断当前磁盘剩余空间是否有20G,如果小于20G,则将报警邮件发送给管理员,每天检查次磁盘剩余空间。 安装邮件服务 配置邮件服务 编写脚本work1.sh 添加计划任务 2、判断web服务是否运行:…

基于PyTorch的视频分类实战

1、数据集下载 官方链接:https://serre-lab.clps.brown.edu/resource/hmdb-a-large-human-motion-database/#Downloads 百度网盘连接: https://pan.baidu.com/s/1sSn--u_oLvTDjH-BgOAv_Q?pwdxsri 提取码: xsri 官方链接有详细的数据集介绍&#xf…

疯狂 META:Aavegotchi 新一季稀有度挖矿来了!

经过数周的激烈讨论和参与,AavegotchiDAO 再次投票决定资助新一季的稀有度挖矿活动,这也是我们神奇的第八季!朋友们,我们又开始啦——拿出你们最好的装备,擦亮那些可穿戴设备,准备好赚钱吧! 与…

HarmonyOS系统开发ArkTS入门案例及组件

目录 一、声明式UI 二、ArkTs 快速入门案例 三、组件 四、渲染控制 一、声明式UI 声明式UI就是一种编写用户界面的范式或方式、 ArArkTS 在继承了Typescript语法的基础上,主要扩展了声明式UI开发相关的能力。 声明式UI开发范式大致流程:定义页面…

IPv4到IPv6的过渡策略

IPv4到IPv6的过渡是一个复杂且必要的过程,随着全球互联网的不断发展,IPv4地址资源的枯竭使得向IPv6过渡成为一项紧迫的任务。IPv6提供了更广阔的地址空间、更高的安全性和更灵活的路由方式,是未来互联网发展的必然趋势。下面将详细阐述如何从…

面向对象【内部类】

什么是内部类 将一个类 A 定义在另一个类 B 里面,里面的那个类 A 就称为内部类(InnerClass),类 B 则称为外部类(OuterClass) 为什么要声明内部类 具体来说,当一个事物 A 的内部,还…

基于SpringBoot的后勤管理系统【附源码】

后勤管理系统开发说明 开发语言:Java 框架:ssm JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7(一定要5.7版本) 数据库工具:Navicat11 开发软件:eclipse/myecli…

LLM 面试知识点——模型基础知识

1、主流架构 目前LLM(Large Language Model)主流结构包括三种范式,分别为Encoder-Decoder、Causal Decoder、Prefix Decode。对应的网络整体结构和Attention掩码如下图。 、 各自特点、优缺点如下: 1)Encoder-Decoder 结构特点:输入双向注意力,输出单向注意力。 代表…