当前位置: 首页 > news >正文

3 使用 Jenkins 构建镜像:将你的应用打包成镜像

我的资源库网站:https://www.byteooo.cn

前言

在上一章中,我们安装了 DockerJenkins,并实现了将两者打通。在这一章中,我们则使用 Jenkins 集成 Git 来构建 Docker 镜像,为后面的部署准备镜像资源。

1. 安装 Nodejs 环境

在上一章,我们其实并没有在服务端安装 Node 环境。如果想要安装 Node 环境,有以下两个办法:

  • 源码编译:这种方式是将 Node 源码拉下来后,在服务器端编译完成后才可以使用。时间比较长,流程也略复杂
  • 使用 Jenkins PluginNodeJS 插件自动配置安装

在这里,我们可以选择第二种方式来安装,既方便又省力。

我们打开 Jenkins 首页,找到左侧的系统配置 => 插件管理 => 可选插件,搜索 Node 。选中 NodeJS 后,点击左下角的 直接安装 开始安装插件
image.png
image.png
等待安装完毕后,返回 Jenkins 首页。找到 Global Tool Configuration => NodeJS => 新增NodeJS

接着回到 Jenkins 首页,找到左侧的 系统配置 ,选择 全局工具配置
image.png

找到下面的 NodeJS ,点击 NodeJS 安装,选择相应的版本填写信息保存即可。
image.png

如何使用

那我们在任务中如何使用呢?我们只需要在任务的配置中,找到构建环境,选中 Provide Node & npm bin/ folder to PATH ,选择刚才配置好的 NodeJS 即可。
image.png

第一次执行会下载对应的 Node 版本,后续不会下载。

2. 使用 SSH 协议集成 Git 仓库源

这一步,我们使用 Jenkins 集成外部 Git 仓库,实现对真实代码的拉取和构建。在这里,我们选用 Gitee 作为我们的代码源 (没有打广告,单纯觉得 Gitee 教学方便)。 这里准备一个 vue-cli 项目来演示构建。

2.1 生成公钥私钥

首先,我们先来配置公钥和私钥。这是 Jenkins 访问 Git 私有库的常用认证方式。我们可以使用 ssh-keygen 命令即可生成公钥私钥。在本地机器执行生成即可。这里的邮箱可以换成你自己的邮箱:

ssh-keygen -t rsa -C "janlay884181317@gmail.com"

执行后,会遇到第一步步骤: Enter file in which to save the key

这一步是询问你要将公钥私钥文件放在哪里。默认是放在 ~/.ssh/id_rsa 下,当然也可以选择输入你自己的路径。一路回车即可。
image.png
结束后,你会得到两个文件。分别是 xxx 和 xxx.pub。

其中,xxx 是私钥文件,xxx.pub 是对应的公钥文件。我们需要在 Git 端配置公钥,在 Jenkins 端使用私钥与 Git 进行身份校验。

2.2 在 Gitee 配置公钥

Gitee 中,如果你要配置公钥有2种方式:仓库公钥 和 个人公钥。其中,如果配置了仓库公钥,则该公钥只能对配置的仓库进行访问。如果配置了个人公钥,则账号下所有私有仓库都可以访问。

这里我们就以配置个人公钥为例子。首先打开右上角的设置 ,点击下面的 安全设置 => SSH公钥
image.pngimage.png
在下方有个添加公钥,填入信息即可。

其中的标题为公钥标题,这里可以自定义标题;公钥则为刚才生成的 xxx.pub 文件。使用 cat 命令查看下文件内容,将内容填入输入框并保存。接着去 Jenkins 端配置私钥

cat xxx.pub

image.png

2.3 在 Jenkins 配置私钥

回到 Jenkins。在 Jenkins 中,私钥/密码 等认证信息都是以 凭证 的方式管理的,所以可以做到全局都通用。
我们可以在配置任务时,来添加一个自己的凭证。点击项目的 配置,依次找到 **源码管理 => Git => Repositories **
image.png
image.png

这里的 Repository URL 则是我们的仓库地址, SSH 地址格式为 git@gitee.com:xxx/xxx.git 。可以从仓库首页中的 克隆/下载 => SSH 中看到
image.png

重点是 Credentials 这一项,这里则是我们选择认证凭证的地方。我们可以点击右侧 添加 => Jenkins 按钮添加一条新的凭证认证信息。

点击后会打开一个弹窗,这是 Jenkins 添加凭证的弹窗。选择类型中的 SSH Username with private key 这一项。接着填写信息即可:

  • ID:这条认证凭证在 Jenkins 中的名称是什么
  • 描述:描述信息
  • Username:用户名(邮箱)
  • Private Key:这里则是我们填写私钥的地方。点击 Add 按钮,将 xxx 私钥文件内所有文件内容全部复制过去(包含开头的 BEGIN OPENSSH PRIVATE KEY 和结尾的 END OPENSSH PRIVATE KEY)

接着点击添加按钮,保存凭证。

image.png

保存后,在 Credentials 下拉列表中选择你添加的凭证。

如果没有出现红色无权限提示,则代表身份校验成功,可以正常访问。
image.png

3. 构建镜像

在我们将环境准备就绪后,就可以开始构建镜像了。不过,我们需要先准备个 DockerFile 才可以构建镜像。那什么是 DockerFile 呢?

3.1 编写 Dockerfile

什么是 Dockerfile

Dockerfile 是一个 Docker 镜像的基础描述文件,里面描述了生成一个镜像所需要的执行步骤。我们也可以自定义一份 Dockerfile 来创建一个自己的镜像。

例如下面的步骤,使用 Dockerfile 可描述为:

  1. 基于 nginx:1.15 镜像做底座。
  2. 拷贝本地 html 文件夹内的文件,到镜像内 /etc/nginx/html 文件夹。
  3. 拷贝本地 conf 文件夹内的文件,到镜像内 /etc/nginx/ 文件夹。
FROM nginx:1.15-alpine
COPY html /etc/nginx/html
COPY conf /etc/nginx/
WORKDIR /etc/nginx/html

编写完成后,怎么生成镜像呢?我们只需要使用 docker build 命令就可以构建一个镜像了:

docker build -t imagename:version .

-t: 声明要打一个镜像的Tag标签,紧跟着的后面就是标签。标签格式为 镜像名:版本
. :声明要寻找dockerfile文件的路径,. 代表当前路径下寻找。默认文件名为 Dockerfile。
关于更多 DockerFile 的语法,详细可以看这里 https://www.runoob.com/docker/docker-dockerfile.html


因为我们的镜像只包含一个 nginx,所以 dockerfile 内容比较简单。我们只需要在代码根目录下新建一个名为 Dockerfile 的文件,输入以下内容,并将其提交到代码库即可。

vi Dockerfile
FROM nginx:1.15-alpine
COPY html /etc/nginx/html
COPY conf /etc/nginx/
WORKDIR /etc/nginx/html
git add ./Dockerfile
git commit -m "chore: add dockerfile"
git push

3.2 Jenkins 端配置

在代码源和 DockerFile 准备就绪后,我们只需在 Jenkins 端配置下要执行的 Shell 脚本即可。找到项目的配置,依次找到** 构建 => Execute shell**。输入以下脚本:

#!/bin/sh -lnpm install --registry=https://registry.npm.taobao.org
npm run build
docker build -t jenkins-test .

这里脚本很简单,主要是安装依赖 => 构建文件 => 构建镜像。填写完毕后保存

4. 执行任务

保存后我们去手动触发执行下任务。当未抛出错误时,代表任务执行成功
image.png

本章总结

在这一章,我们学会了使用 Jenkins 构建了自己的前端镜像。下一章我们将安装自己的私有镜像库,将镜像上传在镜像库内。

http://www.xdnf.cn/news/1228681.html

相关文章:

  • sqli-labs:Less-18关卡详细解析
  • 【隧道篇 / IPsec】(7.6) ❀ 02. 如何删除向导创建的IPsec安全隧道 (点对点) ❀ FortiGate 防火墙
  • K8S部署ELK(三):部署Elasticsearch搜索引擎
  • Java基础——实现图书管理系统交互功能
  • java实现运行SQL脚本完成数据迁移
  • String boot 接入 azure云TTS
  • 【深度学习②】| DNN篇
  • Python 字典为什么查询高效
  • Python编程基础与实践:Python基础数据类型入门
  • 如何在Ubuntu上部署excalidraw
  • 逻辑回归 银行贷款资格判断案列优化 交叉验证,调整阈值,下采样与过采样方法
  • 管家婆线下CS产品创建账套(普普、普及、辉煌II)
  • 小迪23-28~31-js简单回顾
  • LINUX82 shell脚本变量分类;系统变量;变量赋值;四则运算;shell
  • PYTHON从入门到实践-18Django从零开始构建Web应用
  • 9.3panic!最佳实践
  • 硬件-电容学习DAY1——钽电容失效揭秘:从冒烟到爆炸全解析
  • Next.js 怎么使用 Chakra UI
  • day38 力扣279.完全平方数 力扣322. 零钱兑换 力扣139.单词拆分
  • python---literal_eval函数
  • 轨道追逃博弈仿真
  • Node.js 路由与中间件
  • StarRocks vs ClickHouse:2025 年 OLAP 引擎终极对比指南
  • 高效截图的4款工具深度解析
  • cmd怎么取消关机命令
  • Oracle 11g RAC集群部署手册(二)
  • C语言(长期更新)第7讲:VS实用调试技巧
  • 仿真电路:(十七下)DC-DC升压压电路原理简单仿真
  • 【DL学习笔记】计算图与自动求导
  • 鸿蒙智选携手IAM进驻长隆熊猫村,为国宝打造智慧健康呼吸新空间