使用 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。

例 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 anystages {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.mzph.cn/news/745378.shtml

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

相关文章

产品推荐 - 基于Xilinx Kintex-7 XC7K160T/325T/410T打造的水星Mercury+ KX2核心板

水星Mercury KX2核心板 水星Mercury KX2核心板提供高性价比的Xilinx Kintex-7 28nm FPGA和常见的接口,如USB 2.0、PCIe Gen2和千兆以太网。 KX1有强大的FPGA和标准接口、很多具备LVDS能力的I/O、大容量DDR3 SDRAM、很多高速DSP slices,它既适合高端数字信…

第五十八回 吴用赚金铃吊挂 宋江闹西岳华山-飞桨图像分割套件PaddleSeg初探

鲁智深被贺太守抓住,押入死牢。武松得信后,正想回梁山报信,正好戴宗来了,就请戴宗赶快回梁山搬救兵。宋江说兄弟有难,怎能不救? 于是带了十六个头领来到少华山。 因为华州城池厚壮,宋江等无计可…

【开源】SpringBoot框架实验室耗材管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 耗材档案模块2.2 耗材入库模块2.3 耗材出库模块2.4 耗材申请模块2.5 耗材审核模块 三、系统展示四、核心代码4.1 查询耗材品类4.2 查询资产出库清单4.3 资产出库4.4 查询入库单4.5 资产入库 五、免责说明 一、摘要 1.1…

JavaEE之多线程(创建线程的五种写法)详解

😽博主CSDN主页: 小源_😽 🖋️个人专栏: JavaEE 😀努力追逐大佬们的步伐~ 目录 1. 前言 2. 操作系统"内核" 3. 创建线程的五种写法 (我们重点要掌握最后一种写法!!) 3.1 继承 Thread, 重写 run 3. 2 实现 Runnabl…

电脑坏了去维修,第一家报价800,第三家说报废!

这篇文章主要讲的是修理坏掉的电脑。 第一家报价300,第二家报价800,第三家说要报废! 相信很多朋友对于修电脑坏了要多少钱有很多困惑,修电脑坏了要多少钱,到底去正规售后服务还是去非品牌店维修一台坏掉的电脑。 今天高…

Jmeter扩展---自定义取样器

简介 Jmeter已经内置了各种协议的取样器,已经能满足常用的性能压测需求。且在前面一章Jmeter扩展开发--自定义java取样器-CSDN博客中也有关于Java取样器的扩展开发,不过有时候我们期望能定制自己的取样器和界面。为此,需要对Jmeter做扩展&am…

项目示例 - 4.配置中心 - 1.Nacos

项目示例 - 4.配置中心 - 1.Nacos 关联知识&#xff1a; 分布式微服务 - 4.配置中心 - 2.Nacos 内容提要&#xff1a; 基本使用 基本使用 建Module&#xff1a;微服务起名为nacos-config改pom&#xff1a;引入以下依赖 <dependencies><!--Nacos的配置管理-->…

界面控件DevExpress ASP.NET Scheduler - 助力快速交付个人信息管理系统(下)

DevExpress ASP. NET Scheduler组件能完全复制Microsoft Outlook Scheduler的样式和功能&#xff0c;具有日、周、月和时间轴视图&#xff0c;并包括内置的打印支持&#xff0c;因此用户可以在尽可能短的时间内交付全功能的个人信息管理系统。在上文中&#xff08;点击这里回顾…

Gemma中RoPE代码详细讲解

最近在看Gemma代码感觉比LLama的代码看的方便点&#xff0c; 看到RoPE代码跟常规的方式不太一样&#xff08;也不算常规&#xff0c;就是我理解的方式&#xff09;&#xff0c;特此记录一下。我的RoPE入门代码参考&#xff1a;Rotary Position Embedding (RoPE, 旋转式位置编码…

自然语言处理实验2 字符级RNN分类实验

实验2 字符级RNN分类实验 必做题&#xff1a; &#xff08;1&#xff09;数据准备&#xff1a;academy_titles.txt为“考硕考博”板块的帖子标题&#xff0c;job_titles.txt为“招聘信息”板块的帖子标题&#xff0c;将上述两个txt进行划分&#xff0c;其中训练集为70%&#xf…

服务器Debian 12.x中安装Jupyer并配置远程访问

服务器系统&#xff1a;Debian 12.x&#xff1b;IP地址&#xff1a;10.100.2.138 客户端&#xff1a;Windows 10;IP地址&#xff1a;10.100.2.38 利用ssh登录服务器&#xff1a; 1.安装python3 #apt install python3 2.安装pip #apt install python3-pip … 3.安装virtualen…

Unity Timeline学习笔记(3) - SignalTrack信号轨道和自定义带参数的Marker信号和轨道

信号轨道&#xff0c;顾名思义就是运行到某处发送一个信号。 普通用法 普通用法就是没有任何封装的&#xff0c;个人感觉特别难用&#xff0c;但是有必要理解一下工作原理。 添加信号 我们添加一个信号资源 生成后可以看到资源文件&#xff0c;这个是可以拖到SignalTrack上…

【Python数据结构与判断7/7】数据结构小结

目录 序言 整体回忆 定义方式 访问元素 访问单个元素 访问多个与元素 修改元素 添加元素 列表里添加元素 字典里添加元素 删除元素 in运算符 实战案例 总结 序言 今天将对前面学过的三种数据结构&#xff1a;元组&#xff08;tuple&#xff09;、列表&#xff08;…

微前端框架 qiankun 配置使用【基于 vue/react脚手架创建项目 】

qiankun官方文档&#xff1a;qiankun - qiankun 一、创建主应用&#xff1a; 这里以 vue 为主应用&#xff0c;vue版本&#xff1a;2.x // 全局安装vue脚手架 npm install -g vue/clivue create main-app 省略 vue 创建项目过程&#xff0c;若不会可以自行百度查阅教程 …

【Docker】常用命令 docker restart

文章目录 什么是docker restart命令基本用法常用选项-t&#xff1a;指定重新启动容器的超时时间-f&#xff1a;强制重新启动容器 实际示例重新启动一个正在运行的Nginx容器强制重新启动一个运行中的数据库容器 总结 在Docker中&#xff0c; docker restart命令用于重新启动正在…

java垃圾回收-三色标记法

三色标记法 引言什么是三色标记法白色灰色黑色 三色标记过程三色标记带来的问题多标问题漏标问题 如何弥补漏标问题增量更新原始快照总结 引言 在CMS,G1这种并发的垃圾收集器收集对象时&#xff0c;假如一个对象A被GC线程标记为不可达对象&#xff0c;但是用户线程又把A对象做…

MySQL 常见用法练习

LIMIT [参数1]--m,参数2--n; #表示从跳过m条数据开始取n行数据 #参数1为可选参数,表示跳过m条数据(默认为0) eg:1表示从第二行开始 #参数2为必选参数,表示取几行数据 SELECT *FROM employees ORDER BY hire_date DESC LIMIT 1; SELECT *FROM employees ORDER BY hire…

数字化经济的前沿:深入了解 Web3 的商业模式

随着区块链技术的迅速发展&#xff0c;Web3作为一种新型的互联网范式&#xff0c;正逐渐引起人们的关注。它不仅仅是一种技术革新&#xff0c;更是一种商业模式和价值观的转变。本文将深入探讨Web3的商业模式&#xff0c;以及它对数字化经济的影响。 1. 理解Web3的商业模式 We…

解决 Java 错误 Unreachable Statement

本篇文章介绍了 Java 中的 unreachable statement 错误。 Java中出现 unreachable statement 错误的原因 当我们尝试在分支控制流语句之后放置语句时&#xff0c;会发生不可到达语句错误。 分支语句包括 break、continue 和 return&#xff0c;它们用于跳转到代码的不同部分。…

go get x509:certificate signed by unknown authority

概述 在arm设备上构建golang 1.22的Docker镜像&#xff0c;用来做程序的编译镜像&#xff0c;直接安装用ubuntu作为基础镜像&#xff0c;构建好的镜像&#xff0c;在编译的时候执行go get的时候&#xff0c;会报下面错误 go: github.com/***: Get "https://goproxy.cn/g…