开源项目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.hqwc.cn/news/573492.html

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

相关文章

MySQL数据库基础--约束

约束 约束是作用于表中字段上的规则,用于限制在表中的数据 目的:保证数据库中数据的正确,有效性和完成性。 分类: 注意:约束是作用于表中字段上的,可以在创建表/修改表的时候哦添加约束 外键约束 外键用…

2024年3月28日蚂蚁新村今日答案:人间能得几回闻和冰蚕吐凤雾绡空哪句诗描写的云锦之美?

蚂蚁新村是一个虚拟社区。在这个虚拟社区中,用户可以参与各种活动,比如生产能量豆、做慈善捐赠等。同时,蚂蚁新村也提供了一些知识问答环节,用户在参与的过程中可以增进知识。这些问答内容往往涉及广泛的主题,如文化、…

如何借用 NTFS 交换数据流 实现隐藏文件?如何使用【文件包含】PHP伪协议?不同操作系统如何实现文件隐藏和木马伪装?

如何借用 NTFS 交换数据流 实现隐藏文件?如何使用【文件包含】PHP伪协议?不同操作系统如何实现文件隐藏和木马伪装? NTFS交换数据流(Alternate Data Streams, ADS)是NTFS文件系统特有的一种功能,它允许在同一个文件名下存储多个数据流。除了默认的数据流(通常用于存储文…

PCB中的走线布线技巧

PCB中的布线技巧 电磁兼容性(EMC)及关联的电磁干扰(EMI)历来都需要系统设计工程师擦亮眼睛,在当今电路板设计和元器件封装不断缩小、OEM要求更高速系统的情况下,这两大问题尤其令PCB布局和设计工程师头痛。另一方面,EMI是由EMC或不想要的电磁…

大会邀请 |北京智慧城市时空信息大会

2024年3月27-28日,2024中关村论坛系列活动一一首届智慧城市时空信息大会将在北京国际财富中心举办,大势智慧作为协办单位出席大会,重点展出公司自主研发的实景三维全自主、全流程系列软硬件产品,并为您带来公司在智慧城市、智慧应…

《手把手教你》系列技巧篇(五十七)-java+ selenium自动化测试-下载文件-下篇(详细教程)

1.简介 前边几篇文章讲解完如何上传文件,既然有上传,那么就可能会有下载文件。因此宏哥就接着讲解和分享一下:自动化测试下载文件。可能有的小伙伴或者童鞋们会觉得这不是很简单吗,还用你介绍和讲解啊,不说就是访问到…

Unity -- 遮挡剔除

很多童鞋的Unity作品完成后,发现场景卡的要死,尽管在模型阶段采用了很多优化建模方法,但还是卡顿。电脑端都这么卡,发布到移动端就更不用说了。遇到这种情况,很多童鞋急得团团转,不知如何是好。此时&#x…

格式化危机!教你轻松恢复数据!

一、遭遇格式化,数据恢复并非难事 当存储设备遭遇格式化后,许多人可能会陷入恐慌,担心重要数据一去不复返。但实际上,数据恢复并非如想象中那般困难。格式化操作主要清除了文件系统的索引信息,而实际的数据往往还残留…

来了!小学生Python创意编程(视频教学版)

目录 写在前面 推荐图书 推荐理由 写在最后 写在前面 在最好的年纪,一起来学Python吧!本期博主给大家推荐一本适合小学生阅读的书籍,一起来看看吧~ 推荐图书 小学生Python创意编程(视频教学版) 直达链接&#x…

汉思电子封装材料-守护芯片的“钢铁侠”

在这个科技日新月异的时代,电子产品已经成为我们生活中不可或缺的一部分。从智能手机到智能家居,从无人驾驶到人工智能,电子技术在各个领域发挥着不可或缺的作用。然而,当我们惊叹于这些神奇的科技产品时,却往往忽略了…

今日早报 每日精选15条新闻简报 每天一分钟 知晓天下事 3月28日,星期四

每天一分钟,知晓天下事! 2024年3月28日 星期四 农历二月十九 1、 四部门:培育空中摆渡、私人包机等新业态,2030年形成万亿级市场规模。 2、 市监总局发文规范外卖营销防止浪费:不将主食纳入满减优惠展示范围。 3、 多…

腾讯云2核2G服务器CVM S5和轻量应用服务器优惠价格

腾讯云2核2G服务器多少钱一年?轻量服务器61元一年,CVM 2核2G S5服务器313.2元15个月,腾讯云2核2G服务器优惠活动 txyfwq.com/go/txy 链接打开如下图: 腾讯云2核2G服务器价格 轻量61元一年:轻量2核2G3M、3M带宽、200GB月…