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

在实现 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 容器启动

猜你喜欢

转载自blog.csdn.net/weixin_42371354/article/details/129011291