开源项目ChatGPT-Next-Web的容器化部署(二)-- jenkins CI构建并推送镜像

一、背景

接着上文已制作好了Dockerfile,接下来就是docker build/tag/push等一系列操作了。

不过在这之前,你还必须在jenkins等CI工具中,拉取源码,然后build构建应用。

因为本文的重点不是讲述jenkins ci工具,所以只会把核心的一些知识交待清楚。
包括以下:

  • jenkins pod template 新增docker容器
  • 新增groovy library库,构建并推送镜像
  • nodejs.jenkinsfile构建应用,调用库函数

但是,本文的内容,都是由jenkins完成。

二、 pod template 新增docker容器

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
选择jnlp-h5模板:

在这里插入图片描述
新增docker容器:(注意红线勾选出来的部分,特别是需要分配伪终端)
在这里插入图片描述
如果你就这么配置,不出意外的话,docker build就会报错如下:

12:32:14  Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

啥意思,明明我们在pod模板里增加了docker客户端,怎么还说没有运行。
这是因为它依赖host的docker环境。

增加以下配置,把主机的/var/run/docker.sock挂载到pod的/var/run/docker.sock:
在这里插入图片描述

三、新增groovy library库

构建并推送镜像,前提是你必须登录阿里云镜像仓库服务。

在 docker.groovy 文件里新增函数pushToAly():

def pushToAly(appName, version, dockerfileName, repoDomain = "xxx-harbor-registry.cn-hangzhou.cr.aliyuncs.com", repoProject= "xxx") {// 1、构建sh """docker build -f ${dockerfileName} -t ${repoProject}/${appName}:${version} ."""// 2、登录、打标签、推送withCredentials([usernamePassword(passwordVariable: 'DOCKER_PASSWORD', usernameVariable: 'DOCKER_USERNAME', credentialsId: "95197cab-bb78-4e45-97df-2c7414adea98",)]) {sh """docker login --username=${DOCKER_USERNAME} --password=${DOCKER_PASSWORD} ${repoDomain}docker tag ${repoProject}/${appName}:${version} ${repoDomain}/${repoProject}/${appName}:${version}docker push ${repoDomain}/${repoProject}/${appName}:${version}"""}// 3、删除本地镜像sh """docker rmi -f ${repoProject}/${appName}:${version}docker rmi -f ${repoDomain}/${repoProject}/${appName}:${version}"""
}

1、登录阿里云镜像仓库

需要把用户名和密码一并输入,username和password前面是两个横杆字符,而非一个横杆字符。
如果你输入的用户名和密码无误,却遇到了下面同样的错误,请检查自己的格式:

12:40:21  + docker login '-username=xxx' '-password=****' xxx-harbor-registry.cn-hangzhou.cr.aliyuncs.com
12:40:21  WARNING! Using --password via the CLI is insecure. Use --password-stdin.
12:40:21  Error response from daemon: Get https://xxx-harbor-registry.cn-hangzhou.cr.aliyuncs.com/v2/: unauthorized: authentication required

2、新增Credentials

在这里插入图片描述
在这里插入图片描述
选择“Username with password”,输入用户名和密码。

在这里插入图片描述
注意credentialsId的值是否一致,

这里使用了jenkins的插件,简单地对密码进行保护。用户名字段是DOCKER_USERNAME, 密码字段是DOCKER_PASSWORD。

withCredentials([usernamePassword(passwordVariable: ‘DOCKER_PASSWORD’, usernameVariable: ‘DOCKER_USERNAME’, credentialsId: “95197cab-bb78-4e45-97df-2c7414adea98”,)])

3、系统配置Global Pipeline Libraries

下文jenkinsfile中将调用 docker.groovy 的 函数pushToAly(),所以你需要再次确认,是否配置好了全局pipeline库。

在这里插入图片描述

四、nodejs.jenkinsfile构建应用

因为Nodejs是需要容器化部署的,和h5等静态页面的项目所有不同,故这里新增一个jenkinsfile。它的步骤只有三步:

  • 1、拉取源码
  • 2、build构建
  • 3、构建并推送镜像
#!groovy
@Library('jenkinslib') _
# 持久化目录
String sharefile = "/opt"# 引用pipeline库
def docker = new com.xxx.devops.docker()# 应用的名称
String zipName = "${env.zipName}".trim()
# 应用的版本
String appVersion = ""
# Dockerfile所在路径
String dockerfileName = sharefile + "/" + zipName + "/Dockerfile"pipeline {agent {kubernetes {inheritFrom 'jnlp-h5'}}options {timestamps()  //日志会有时间skipDefaultCheckout()  //删除隐式checkout scm语句disableConcurrentBuilds() //禁止并行timeout(time: 1, unit: 'HOURS')  //流水线超时设置1h}stages {# 1、拉取源码# 2、构建,并对appVersion赋值# 3、推送镜像到阿里云镜像仓库stage('Push Docker Image') {steps {script {container('docker') {dir("${env.WORKSPACE}") {docker.pushToAly(zipName, appVersion, dockerfileName)}}}}}}
}

五、jenkins job打包

在这里插入图片描述
在这里插入图片描述

可以看到,成功推送了镜像到远程的仓库,最后删除本地的镜像。

12:52:45 1.0.4: digest: sha256:4e6f6f526fc7d9f402e6dbca3a766f9ca447e59e6c12b33e2696eca9561a0b04 size: 2002

通过sha2569(它类似于md5值),去阿里云镜像仓库查看核实。

在这里插入图片描述

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

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

相关文章

亮数据——让你的IP走出去,让价值返回来

亮数据——让你的IP走出去,让价值返回来 前言跨境电商最最最大的痛点——让IP走出去超级代理服务器加速网络免费的代理管理软件亮数据解决痛点亮数据优势介绍亮数据浏览器的使用示例总结 前言 当前社会信息的价值是不可想象的,今天在亮数据中看到了个【…

Ipython与Jupyter之间的关系

IPython 和 Jupyter 之间的关系可以从它们的历史和目标中得到很好的解释。IPython(Interactive Python)最初是由 Fernando Prez 于 2001 年创建的,旨在提升 Python 的交互式计算体验。它提供了一个强大的交互式 Python shell 和一个面向高效计…

『VUE』03. 模板语法 使用js与插入html(详细图文注释)

目录 vscode终端中创建项目什么是模板语法?模板语法--js"变量"用法模板语法--插入html总结 欢迎关注 『VUE』 专栏,持续更新中 欢迎关注 『VUE』 专栏,持续更新中 vscode终端中创建项目 回顾一遍前面的cmd. 首先在vscode中打开一个新的空文件…

SpringAOP+自定义注解实现限制接口访问频率,利用滑动窗口思想Redis的ZSet(附带整个Demo)

目录 1.创建切面 2.创建自定义注解 3.自定义异常类 4.全局异常捕获 5.Controller层 demo的地址,自行获取《《—————————————————————————— Spring Boot整合Aop面向切面编程实现权限校验,SpringAop自定义注解自定义异常全局…

WordPress分页函数function

1、可以通过下面的代码在编辑器上添加一个分页符按钮。 2、将下面的代码添加到当前主题functions.php即可。 3、代码如下: function mce_page_break($mce_buttons) { $pos array_search(wp_more, $mce_buttons, true); if ($pos ! false) { $buttons …

全球最强开源AI大模型来了!Databricks称DBRX吊打Llama 2和GPT-3.5

美国AI初创公司Databricks公布,在语言理解、编程和数学方面,其将开源的模型DBRX的测试得分均高于GPT-3.5、Mixtral、Meta的Llama 2-70B、马斯克旗下xAI的Grok-1。作为混合专家模型,DBRX的输出token速度高Llama 2一筹。 全球最强大的开源人工智…

车载以太网AVB交换机 gptp透明时钟 5口 全千兆 SW1500

全千兆车载以太网交换机 一、产品简要分析 5端口千兆车载以太网交换机,包含4个通道的1000BASE-T1接口使用罗森博格H-MTD和泰科MATEnet双接口,1个通道1000BASE-T标准以太网(RJ45接口),可以实现车载以太网多通道交换,千兆和百兆车载…

Docker搭建LNMP环境实战(06):Docker及Docker-compose常用命令

Docker搭建LNMP环境实战(06):Docker及Docker-compose常用命令 此处列举了docker及docker-compose的常用命令,一方面可以做个了解,另一方面可以在需要的时候进行查阅。不一定要强行记忆,用多了就熟悉了。 1、…

Golang hash/crc32 库实战指南:从基础到优化

Golang hash/crc32 库实战指南:从基础到优化 引言理解CRC32hash/crc32库概览实战技巧数据校验性能优化多线程应用 错误处理与调试错误处理调试 实际案例分析结论 总结重点回顾 引言 在现代软件开发中,数据的完整性和安全性至关重要。无论是数据库存储、…

Vue-vue3

一、Vue3简介二、Vue3有那些优化性能的提升源码升级拥抱TypeScript新的特性 三、创建Vue3.0工程四、Vue3工程结构(使用cli创建的vue3)五、常用的Composition API(组合式API)setupsetup的两个注意点 ref函数reactive函数Vue3.0中的…

PCL 彩色点云RGB转灰度并显示

目录 一、算法原理1、原理概述2、参考文献二、代码实现三、结果展示本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫与GPT。 一、算法原理 1、原理概述 不同要素之间的灰度差异较为明显。点云灰度值与RGB属性的关系为:

MySQL高阶SQL语句(二)

文章目录 MySQL高阶SQL语句(二)一、MySQL常用查询1、子查询1.1 语法1.1.1 结合select语句查询1.1.2 结合insert语句查询1.1.3 结合update语句查询1.1.4 结合delete语句查询1.1.5 在in前面添加not1.1.6 exists关键字 2、别名 二、MySQL视图1、视图介绍1.1…

《科学技术创新》是什么级别的期刊?是正规期刊吗?能评职称吗?

问题解答: 问:《科学技术创新》期刊是哪个级别? 答:省级 主管单位:黑龙江省科学技术协会 主办单位:黑龙江省科普事业中心 问:《科学技术创新》期刊影响因子? 答:(2…

bugku-web-Flask_FileUpload

查看页面源码 这里提示给他一个文件,它将返回一个python运行结果给我,并且提示只能上传jpg和png文件 传递一个图片 查看源码 传递一个非图片 将源码写入新建的txt文件中 print(hello world) 将文件后缀改为jpg 上传 上传成功 查看源码 得到运行结果 我…

展示大屏-24小时天气预报

一、项目说明 展示大屏显示未来一周天气和24小时天气详情。 二、技术工具 1.语言&框架:java、springboot 2.UI界面:jQuery、HTML、CSS、 VUE 3.开发工具:IntelliJ IDEA、Eclipse 三、实现步骤 后端步骤 1.调取免费或收费的API接口。 …

JAVA面试大全之并发篇

目录 1、并发基础 1.1、多线程的出现是要解决什么问题的? 本质什么? 1.2、Java是怎么解决并发问题的? 1.3、线程安全有哪些实现思路? 1.4、如何理解并发和并行的区别? 1.5、线程有哪几种状态? 分别说明从一种状态到另一种状态转变有哪些方式? 1.6、通常线程有哪几…

mysql数据库高级面试题-2024

数据库三大范式是什么 第一范式:列不可再分 第二范式:行可以唯一区分,主键约束,要求表中的每个非主键列完全依赖于主键列 第三范式:表的非主属性不能依赖与其他表的非主属性 外键约束 且三大范式是一级一级…

「DevExpress中文教程」如何将DevExtreme JS HTML编辑器集成到WinForms应用

在本文中我们将演示一个混合实现:如何将web UI工具集成到WinForms桌面应用程序中。具体来说,我们将把DevExtreme JavaScript WYSIWYG HTML编辑器(作为DevExtreme UI组件套件的一部分发布的组件)集成到Windows Forms应用程序中。 获取DevExtreme v23.2正式…

2024最新版克魔助手抓包教程(9) - 克魔助手 IOS 数据抓包

引言 在移动应用程序的开发中,了解应用程序的网络通信是至关重要的。数据抓包是一种很好的方法,可以让我们分析应用程序的网络请求和响应,了解应用程序的网络操作情况。克魔助手是一款非常强大的抓包工具,可以帮助我们在 Android …

远程todesk 和向日葵连接ubuntu无法连接

问题 今天远程用todesk 和向日葵连接对方ubuntu22.04 LTS的 电脑,无法连接,一开始以为是防火墙问题,后来发现不是,找了半天资料最后解决。 原因 没有安装X11桌面环境,还是原先的wayland 解决方案 ctrl alt T …