使用 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.rhkb.cn/news/278390.html

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

相关文章

数据结构(三)——栈

三、栈、队列和数组 3.1 栈 3.1.1 栈的基本概念 线性表是具有相同数据类型的n(n≥0)个数据元素的有限 序列,其中n为表长,当n 0时线 性表是一个空表。若用L命名线性表,则其一般表示为 L (a1, a2, … , ai , ai1, ……

Java基础—2

1.面向对象 1.1 与面向过程区分 了解 Java是一种面向对象的编程语言,与面向过程的编程方式有明显的区别。 思维方式:面向对象编程(OOP)是基于对象的概念,强调将问题分解为对象,通过对象之间的交互来解决…

【GPT-SOVITS-02】GPT模块解析

说明:该系列文章从本人知乎账号迁入,主要原因是知乎图片附件过于模糊。 知乎专栏地址: 语音生成专栏 系列文章地址: 【GPT-SOVITS-01】源码梳理 【GPT-SOVITS-02】GPT模块解析 【GPT-SOVITS-03】SOVITS 模块-生成模型解析 【G…

Ansible管理主机的清单------------inventory

目录 一、 Ansible组成 二、inventory 主机清单 (1)主机变量使用 (2)inventory 中的变量含义 (3)组变量使用 (4)组嵌套使用 三、ansible命令 一、 Ansible组成 INVENTORY:Ansible管理主机的清单 /etc/ansible/hosts 需要管理的服务清单,(将你需要管理的主机 …

机器学习-绪论

机器学习致力于研究如何通过计算的手段、利用经验来改善系统自身的性能。在计算机系统中,“经验”通常以“数据”的形式存在,因此,机器学习所研究的主要内容,是关于在计算机上从数据中产生“模型”的算法,即“学习算法…

排序算法:快速排序(递归)

文章目录 一、创始人托尼霍尔的快速排序二、挖坑法三、前后指针法 所属专栏:C初阶 引言:这里所说的快速排序有三种,第一种是霍尔大佬自创的,还有一种叫做挖坑法,另外一种叫前后指针法 一、创始人托尼霍尔的快速排序 1.这里我们先…

VUE3 异步组件

概念 在大型项目中&#xff0c;我们可能需要拆分应用为更小的块&#xff0c;并仅在需要时再从服务器加载相关组件。Vue 提供了 defineAsyncComponent 方法来实现此功能&#xff1a; 使用 父组件 <template><div><asyncSon></asyncSon></div> <…

敏感信息泄露到接管云服务器

通过信息收集发现子域为xx.xx.com网站&#xff0c;打开先找功能点&#xff0c;测试登录&#xff0c;是微信扫描登录&#xff0c;自己太菜&#xff0c;测试一圈没测出来什么 指纹识别发现是js开发&#xff0c;如果登录或者找回密码不是扫码登录的话&#xff0c;八成是前端验证&a…

性能测试-Jmeter常用元件基础使用

一、Jmeter元件 #线程组 添加HTTP请求 #配置元件 配置元件内的元件都是用于进行初始化的东西 #监听器 监听器主要是用来获取我们使用取样器发送请求后的响应数据相关信息 #定时器 定时器主要用来控制我们多久后执行该取样器&#xff08;发送请求&#xff09; #前置处理器 前置处…

为什么手机和电视ip地址不一样

在数字化时代&#xff0c;我们每天都会与各种电子设备打交道&#xff0c;其中最常见的就是手机和电视。当我们连接到互联网时&#xff0c;这些设备都会被分配一个独特的IP地址&#xff0c;用于在网络上进行标识和通信。然而&#xff0c;您可能已经注意到&#xff0c;即使手机和…

1.MongoDB的特点与应用场景

什么是 MongoDB &#xff1f; MongoDB 是基于 C 开发的 NOSQL 开源文档数据库 &#xff0c;是最像关系型数据库的 nosql&#xff0c;功能也是最丰富的 nosql&#xff0c;它具有所以的可伸缩性&#xff0c;灵活性&#xff0c;高性能&#xff0c;高扩展性的优势。 大致有如下特…

【Stable Diffusion】入门-04:不同模型分类+代表作品+常用下载网站+使用技巧

目录 1 模型简介2 模型文件构成和加载位置2.1 存储位置2.2 加载模型 3 模型下载渠道3.1 HuggingFace3.2 Civitai 4 模型分类4.1 二次元模型4.2 写实模型4.3 2.5D模型 1 模型简介 拿图片给模型训练的这个过程&#xff0c;通常被叫做“喂图”。模型学习的内容不仅包括对具体事物…

云平台基本介绍 —— 什么是云原生及云服务器的购买和使用

云原生概述 在了解什么是云原生之前&#xff0c;我们先了解一下什么是云计算 什么是云计算 云计算是一种通过互联网提供计算资源和服务的模式。它允许用户通过网络访问虚拟化的计算资源&#xff0c;包括计算能力、存储空间和应用程序&#xff0c;而无需拥有实际的物理设备。…

uniapp h5 部署

uniapp 配置 服务器文件路径 打包文件结构 //nginx 配置 server {listen 8300;server_name bfqcwebsiteapp;charset utf-8;#允许跨域请求的域&#xff0c;* 代表所有add_header Access-Control-Allow-Origin *;#允许带上cookie请求add_header Access-Control-Allow-C…

WRF模型运行教程(ububtu系统)-- IV-1.模型相关文件参数说明【namelist.wps文件、namelist.input文件】

一、namelist.wps文件 文件位置&#xff1a;Build_WRF/WPS WPS模块有主要的三大程序geogrid.exe、ungrib.exe、metgrid.exe&#xff0c;namelist.wps文件是输入到这三大程序的配置文件。 namelist.wps文件一共包括四个部分&#xff1a;share, geogrid, ungrib和metgrid。 每个主…

2、鸿蒙学习-申请调试证书和调试Profile文件

申请发布证书 发布证书由AGC颁发的、为HarmonyOS应用配置签名信息的数字证书&#xff0c;可保障软件代码完整性和发布者身份真实性。证书格式为.cer&#xff0c;包含公钥、证书指纹等信息。 说明 请确保您的开发者帐号已实名认证。每个帐号最多申请1个发布证书。 1、登录AppGa…

PyQt5使用

安装Pyqt5信号与槽使用可视化界面编辑UI (Pyside2)ui生成之后的使用(两种方法)1 ui转化为py文件 进行import2 动态调用UI文件 安装Pyqt5 pip install pyqt5-tools这时候我们使用纯代码实现一个简单的界面 from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButto…

面试笔记——Redis(缓存击穿、缓存雪崩)

缓存击穿 缓存击穿&#xff08;Cache Breakdown&#xff09;&#xff1a; 当某个缓存键的缓存失效时&#xff08;如&#xff0c;过期时间&#xff09;&#xff0c;同时有大量的请求到达&#xff0c;并且这些请求都需要获取相同的数据&#xff0c;这些请求会同时绕过缓存系统&a…

豆瓣电影信息爬取与可视化分析

目录 一、项目背景 二、代码 三、总结 一、项目背景 &#xff08;1&#xff09;利用requests库采集豆瓣网分类排行榜 (“https://movie.douban.com/chart”)中各分类类别前100部电影的相关信息并存储为csv文件。 &#xff08;2&#xff09;利用获取的13个分类类别共1300部电…

Leetcode 1. 两数之和

心路历程&#xff1a; 很简单的题&#xff0c;双层暴力就可以&#xff0c;用双指针的话快一点。暴力时间复杂度O( n 2 n^2 n2)&#xff0c;双指针时间复杂度O(nlogn) O(n) O(n) O(nlogn)。 注意的点&#xff1a; 1、题目需要返回原数组的索引&#xff0c;所以排序后还需要…