【CICD】Jenkins 部署 Docker 容器形态的后端服务

news2024/11/18 18:35:48

在实现 Jenkins 构建部署前端项目之后,逐渐对使用 Jenkins 部署后端服务有了一定兴趣;总体流程没有什么很大的变化,不过是后端服务需要以 Docker 的形式进行启动,在此记录一下具体过程(部分过程与构建部署前端相同不做详细阐述,建议阅读前篇)。

1.目标

希望实现:本地 Git 推送代码或 Jenkins 直接构建,将后端服务代码(本文用 Express.js 演示)推送至后端服务器,并通过 Docker 容器将服务启动,结合宝塔将服务暴露给外部访问。

2.准备

  1. Gitee 项目仓库
  2. Jenkins (安装 NodeJs、Gitee、Publish Over SSH 等插件)
  3. Docker 服务
  4. Dockerfile 文件
  5. 后端服务器(用于运行后端服务;也可以是Jenkins服务器,使用不同端口即可)

在【Jenkins 构建部署前端项目】篇幅中已经对 jenkins 服务的插件安装以及配置进行了阐述,在这里不再重复进行,主要简单介绍一下 Docker 服务的安装以及 Dockerfile 文件的编写:

Ubuntu 22.04 安装 Docker

sudo apt update
sudo apt upgrade
sudo apt full-upgrade

sudo apt install apt-transport-https ca-certificates curl software-properties-common gnupg lsb-release
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update

sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin

安装完成后,可以通过 docker version 查看服务是否成功安装,如下图:
在这里插入图片描述

Dockerfile 编写

FROM node:latest # 指定基础镜像;FROM 指令必须是第一条,可以有多个(创建多个镜像,每个镜像一次)

RUN node -v # 执行指定命令,通过 shell 终端执行(/bin/sh -c)
RUN mkdir -p /app/server
COPY ./.  /app/server/ # 通过用于本地目录文件复制,格式为 COPY <src> <dest> 复制本地主机的 <src>(为 Dockerfile 所在目录的相对路径)到容器中的 <dest>
WORKDIR /app/server/ # 配置工作目录,与 linux 的 cd 指令有异曲同工之妙
RUN npm install # 根据 package.json 安装依赖

EXPOSE 8082 # 告诉 Docker 服务端口号,用于端口映射等情况

CMD ["node","index.js"] # 【容器启动时】执行的命令

3.操作

A.新建项目

在这里插入图片描述

B.填写基本描述信息(可选)

在这里插入图片描述

C.配置源码管理【Source Code Management】

选择【Git】,配置远程仓库地址,从未添加过仓库链接配置的或者是新链接配置的需要创建新的【Credentials】,随后选择相应的配置;分支的话默认使用的是 master ,可以自行变更,最终配置如下:
在这里插入图片描述

D.配置构建触发【Build Triggers】

这里使用的是 Gitee 的仓库,将 Gitee webhook URL 回填到 Gitee 中,并且点击【Generate】生成 Secret Token 填写到 Gitee 配置项中,具体如下图:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

E.配置构建环境【Build Environment】

在这里插入图片描述

F.配置构建步骤【Build Steps】

由于演示的文件是 Javascript 文件,无需进行编译并且项目结构是最初始的 Express.js 框架,因此也无需进行构建,直接将文件传至服务器即可;如果项目是需要构建的那么执行构建指令(通常为 npm install + npm run build,如有自行构建的脚本另行处理)得到构建后的代码,将其打包发送至服务器。本例具体操作如下:【Add build step】-【Send files or execute commands over SSH】
在这里插入图片描述

Exec command 命令如下:
cd /root/code/back_end

sudo docker rmi -f back_end_image
sudo docker build -t back_end_image .

sudo docker rm -f back_end_api
sudo docker run -itd -p 8082:8082 --name back_end_api back_end_image:latest

G.执行构建

在本地推送代码至 Gitee 或者在 Jenkins 对应的项目中点击 【Build Now】,开始执行构建,下图为执行成功示例:

在这里插入图片描述
如果有执行不成功的情况,那么大概率有可能是端口被占用,从而导致端口映射失败,容器无法正常运行,可以通过以下指令查看(本示例使用8082端口,并未被占用,这里只是提供了排查问题的方法):

netstat -tanlp # 查看端口使用情况
kill pid号 # 杀死对应进程

4.成果

在容器启动成功后,我们通过 IP + 端口的形式访问接口,能够查看到:
在这里插入图片描述
这样就已经能够成功启动后端的服务,对应在服务器上也能通过 Docker 指令查看容器的状态:
在这里插入图片描述

5.总结

总体过程:

  1. Dockerfile 文件准备
  2. Git 代码推送或者 Jenkins 上点击【构建】
  3. Jenkins 推送代码至服务器
  4. Docker 镜像生成
  5. Docker 容器启动

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

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

相关文章

windows下载安装jdk1.8(jdk8)基础篇

一、前言 目前jdk最高升级到JDK19版本了&#xff0c;但是大部分应用系统都是用的1.8&#xff0c;对于初学者来说&#xff0c;也需要下载安装这个版本的jdk。 二、下载安装步骤 一、我已经下载下来&#xff0c;大家到【我的下载目录】下载&#xff0c;密码3360&#xff0c;分…

使用Benchto框架对Trino进行SQL性能对比测试

有时需要对魔改源码前后的不同版本Trino引擎进行性能对比测试&#xff0c;提前发现改造前后是否有性能变差或变好的现象&#xff0c;避免影响数据业务的日常查询任务性能。而Trino社区正好提供了一个性能测试对比框架&#xff1a;GitHub - trinodb/benchto: Framework for runn…

金额大写转换

金额大写转换&#xff08;C语言 &#xff09; 本人喜欢探索各种算法。见站内好多此类文章&#xff0c;有些很好&#xff0c;有些不完整。姑且也来凑下热闹。 金额大写应用在很多方面&#xff0c;如支票、发票、各种单据&#xff0c;各种财务凭证&#xff0c;合同文本金额部分。…

【逐步剖C】-第七章-数据的存储

一、数据类型介绍 1. C语言基本内置类型&#xff1a; char //字符数据类型 short //短整型 int //整形 long //长整型 long long //更长的整形 float //单精度浮点数 double //双精度浮点数2. 类型的基本归类 &#xff08;1&#xff09;整型&#xff1a; charunsign…

c语言指针

指针 指针是存放地址的变量&#xff0c;也可以说指针地址。 对于定义p&#xff08;这里的话&#xff0c;只是定义&#xff0c;说明p是指针&#xff09;&#xff0c;p作为一个指针去指向存放数据的位置&#xff0c;而p意思是取&#xff08;p指向的内存位置的数据&#xff09;&…

es启动,浏览器无法访问9200

通过brew成功启动es&#xff0c;但是访问http://localhost:9200/报错&#xff0c;连接被拒绝 %:brew services start elasticsearch-full> Successfully started elasticsearch-full (label: homebrew.mxcl.elasticsearc可能原因如下&#xff1a; 1、安装java 要先安装ja…

聊聊async/await原理

前言 我们知道Promise的出现极大地解决了回调地狱&#xff0c;但是如果使用流程非常复杂的话&#xff0c;就非常容易过多地调用Promise的then()方法&#xff0c;这样也不利于使用和阅读。 例如&#xff1a;我希望在请求 www.baidu.com 后输出请求的结果&#xff0c;再去请求 …

【基于腾讯云的远程机械臂小车】

1. 项目来源 项目源码地址&#xff1a;https://gitcode.net/VOR234/robot_arm_car/-/blob/master/TencentOS-tiny123.zip https://gitee.com/vor2345/robot_arm_car 程序分别 视频演示&#xff1a;https://www.bilibili.com/video/BV15M4y1D7MD/?vd_source530bf85167de80ff…

46.在ROS中实现global planner(2)

前文实现了一个global planner的模板&#xff0c;并且可以工作&#xff0c;本文将实现astar算法&#xff0c;为后续完成一个astar global planner做准备 1. AStar简介 1.1 AStar Astar算法是一种图形搜索算法,常用于寻路。Astar算法原理网上可以找到很多&#xff0c;简单的说…

企业/品牌新闻稿怎么写?

撰写出优质的企业/品牌新闻稿对于任何一个希望通过新闻媒体推广自己品牌的公司来说都是十分重要的。在新闻稿中&#xff0c;您可以通过介绍自己的公司&#xff0c;披露最新的产品和服务信息以及宣传最新的成就来吸引媒体和读者的关注。下面是一些关于如何撰写出优质的企业/品牌…

【工具篇】Firmwalker车联网实用小工具介绍

前言 firmwalker这个小工具在工作中也一直在用&#xff0c;正好领导说要写一篇这个工具的分析说明文章&#xff0c;经过询问可以发表博客。由于一直在用&#xff0c;所以末尾优劣势部分存在一些主观想法。 编写不易&#xff0c;如果能够帮助到你&#xff0c;希望能够点赞收藏加…

SpringCloud, SpringCloud-Alibaba,Nacos概述

目录 SpingCloud概述 1.SpringCloud是什么? 2.SpringCloud和SpringBoot的关系 3.SpringCloud-Alibaba概述 3.1.Netflix公司项目进入维护模式 3.2.Spring Cloud Alibaba是什么&#xff1f; 3.3.Spring Boot和Spring Cloud的版本号说明 3.Nacos总结 SpingCloud概述 1.Spri…

蓝桥杯刷题——基础篇(一)

这部分题目&#xff0c;主要面向有志参加ACM与蓝桥杯竞赛的同学而准备的&#xff0c;蓝桥杯与ACM考察内容甚至评测标准基本都一样&#xff0c;因此本训练计划提供完整的刷题顺序&#xff0c;循序渐进&#xff0c;提高代码量&#xff0c;巩固基础。因竞赛支持C语言、C、Java甚至…

【JAVA八股文】算法、数据结构、基础设计模式

算法、数据结构、基础设计模式1. 二分查找2. 冒泡排序3. 选择排序4. 插入排序5. 希尔排序6. 快速排序7. ArrayList8. Iterator9. LinkedList10. HashMap1&#xff09;基本数据结构2&#xff09;树化与退化3&#xff09;索引计算4&#xff09;put 与扩容5&#xff09;并发问题6&…

从lettcue插件看skywalking

lettcue 的写操作是异步的。io.lettuce.core.RedisChannelWriter.write进行写入&#xff0c;io.lettuce.core.protocol.RedisCommand进行异步读取数据 skywalking 插件大体逻辑 在方法执行前&#xff0c;通过ContextManager创建span创建span的同时&#xff0c;判断trace上下文…

零信任-Akamai零信任介绍(6)

​Akamai零信任介绍 Akamai是一家专注于分布式网络服务的公司&#xff0c;它提供了一系列的互联网内容和应用加速服务。关于Akamai的零信任&#xff0c;它指的是Akamai的安全架构中不存在任何一个环节是可以被单独的控制或影响的&#xff0c;因此可以提供更高的安全性。通过使…

ChatGPT is not all you need,一文看尽SOTA生成式AI模型:6大公司9大类别21个模型全回顾(三)

文章目录ChatGPT is not all you need&#xff0c;一文看尽SOTA生成式AI模型&#xff1a;6大公司9大类别21个模型全回顾&#xff08;三&#xff09;Text-to-Text 模型ChatGPTLaMDAPEERMeta AI Speech from BrainText-to-Code 模型CodexAlphacodeText-to-Science 模型GalacticaM…

超简单!pytorch入门教程:Tensor

超简单&#xff01;pytorch入门教程&#xff1a;Tensor 一、pytorch安装 安装pytorch之前&#xff0c;需要安装好python&#xff08;废话&#xff09;&#xff0c;还没安装过python的宝宝请先移步到廖雪峰的python教程&#xff0c;待安装熟悉完之后&#xff0c;再过来这边。 …

C代码中访问链接脚本中的符号

一、目的在之前的《GNU LD脚本命令语言&#xff08;一&#xff09;》、《GNU LD脚本命令语言&#xff08;二&#xff09;》我们介绍了GNU链接脚本的知识点&#xff0c;基本上对链接脚本中的SECTION、REGION、以及加载地址与执行地址的关系等内容有了一定的了解。本篇主要讲解链…

工业4.0是如何优化垃圾处理行业的

如今&#xff0c;工业4.0正在影响着制造业和物流等行业&#xff0c;其发展潜力在未来还有望进一步扩大。一些全球领先的垃圾处理公司已经开始在水处理和废物回收等领域应用工业4.0。工业4.0的创新给这个领域带来了一些必要的改进。随着环境危机的加剧&#xff0c;垃圾处理行业面…