学习某册子的CICD,记录使用Jenkins构建镜像的过程。

使用Jenkins集成Git来构建Docker镜像,为后面的部署准备镜像资源。

1. 安装Nodejs环境

如果想要安装Node环境,有以下两个办法:

  • 源码编译:这种是将Node源码拉下来后,在服务器端编译完成后才可以使用。时间比较长,流程也略复杂

  • 使用Jenkins PluginNodeJS插件自动配置安装

    Jenkins首页,左侧的系统管理=>插件管理=>可选插件,搜索Node;选中NodeJS后,点击左下角的直接安装开始安装插件。

    发现Jenkins版本太低(去年装的Jenkins),装了Node插件不能用(),更新一下Jenkins:

    安装参考:https://blog.51cto.com/u_15670038/5351840

    ## pkg.jenkins.io上的jenkins版本太低,改为使用https://mirrors.jenkins.io/redhat-stable/
    yum remove jenkins # 删除旧版本的jenkins
    wget https://mirrors.jenkins.io/redhat-stable/jenkins-2.346.2-1.1.noarch.rpm # 下载
    rpm -ivh jenkins-2.346.2-1.1.noarch.rpm # 安装
    service jenkins start # 启动服务

安装完毕,返回首页,找到系统管理=>Global Tool Configuration(全局工具配置)=>NodeJS=>新增NodeJS,点击新增NodeJS,选择相应的版本填写信息保存即可。

如何在任务中使用?

只需要在任务的配置中,找到构建环境,选中Provide Node & npm bin/ folder to PATH,选择刚才配置好的NodeJS即可。

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

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

这一步,使用Jenkins集成外部Git仓库,实现对真实代码的拉取和构建。

创建一个vue3项目用于测试构建:

npx vue create cicd_test

选择vue3项目开始下载安装,然后推送至github仓库

2.1 生成公钥私钥

这是Jenkins访问Git私有库的常用认证方式。可以使用ssh-keygen命令即可生成公钥私钥。在本地机器执行生成即可。(使用自己邮箱)

ssh-keygen -t rsa -C "yeying0827@126.com"

完成后需要在Git端配置公钥,在Jenkins端使用私钥与Git进行身份校验。

2.2 在GitHub配置公钥

配置下SSH远程登录到虚拟机

  1. 先在虚拟机上安装ssh服务和net-tools工具

    yum install openssh-server # 默认已装
    yum install net-tools
  2. 在mac终端通过ssh命令登录:ssh 用户名@ip

    ssh yy@10.211.55.6
    # 登录后通过cat命令获取公钥
    cat /root/.ssh/id_rsa.pub

获取公钥后去github的settings里配置即可

2.3 在Jenkins配置私钥

Jenkins中,私钥/密码等认证信息都是以凭证的方式管理的,所以可以做到全局通用。

我们可以在配置任务时,来添加一个自己的凭证。点击项目的配置,依次找到 源码管理=>Git=>Repositories

点击Credentials下面的添加,填写完后点击添加按钮

无法连接仓库错误:Error performing git command: git ls-remote -h git@github.com:yeying0827/cicd_test.git HEAD

需要在虚拟机上安装git客户端工具yum -y install git

点击保存

3. 构建镜像

需要先准备DockerFile才可以构建镜像。

3.1 编写DockerFile

什么是DockerFile?

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

  • 在前面vue3项目的根目录创建DockerFile
vi Dockerfile
FROM nginx:1.15-alpine
COPY dist /etc/nginx/html
COPY conf /etc/nginx/
WORKDIR /etc/nginx/html

描述内容为:

  1. 基于nginx:1.15镜像做底座
  2. 拷贝本地dist文件夹内的文件,到镜像内/etc/nginx/html文件夹内
  3. 拷贝本地conf文件夹内的文件,到镜像内/etc/nginx/文件夹内
  4. 指定工作目录
  • 提交到代码库
git add ./Dockerfile
git commit -m "chore: add dockerfile"
git push
  • 生成镜像:使用docker build命令就可以构建一个镜像
docker build -t imagename:version .

-t 声明要打一个镜像的Tag标签,后面紧跟的就是标签。标签格式为 镜像名:版本

. 声明要寻找dockerfile文件的路径,.代表当前路径下寻找,默认文件名为Dockerfile

更多DockerFile的语法

3.2 Jenkins端配置

在代码源和DockerFile准备就绪后,我们只需在Jenkins端配置下要执行的shell脚本即可。

找到项目的配置,依次找到 构建=>Execute shell,输入以下脚本:

#!/bin/sh -l

npm install --registry=https://registry.npm.taobao.org
npm run build
docker build -t jenkins-test .

脚本主要操作:安装依赖=>构建文件=>构建镜像。填写完毕后保存

4. 执行任务

在项目下点击立即构建触发执行任务,GLIBC等版本报错,无法执行node命令,报错

// 使用strings命令查看查看最高只有2.17
strings /lib64/libc.so.6 |grep GLIBC_

安装glibc_2.28和gcc 8.2

reboot重启,启动jenkins。

Node版本过高构建失败,使用node14.17.0版本。

没有conf文件夹构建失败,新建conf文件夹提交到库。

构建成功。

至此,完成了使用Jenkins构建自己的前端镜像。

从控制台输出可以看出,是先根据配置的git仓库拉取了代码,而后执行了配置的shell,最后根据Dockfile里的配置生成镜像

使用Jenkins构建镜像:将应用打包成镜像的更多相关文章

  1. windows环境下,spring boot服务使用docker打包成镜像并推送到云服务器私有仓库

    最近在淘宝上学习springcloud教程,其中有几节课是讲解讲本地springboot服务打包成镜像并推送到云服务器私有仓库,但是教程里面用的事Mac环境,我的是Windows环境,而且课程里面没有 ...

  2. 将自己的ubuntu18.04打包成镜像

    将自己的ubuntu18.04打包成镜像 2018年11月10日 10:40:06 舌耳 阅读数:1590 先下载remastersys wget ftp://ftp.gwdg.de/pub/linu ...

  3. Docker容器打包成镜像 - OpenDaylight官方 SDN Hub Tutorial VM 的docker镜像

    由于工作需要,在看OpenDaylight (一个SDN的开源控制器) 官方Tutorial有一个比较基础且介绍比较详细的文档(http://sdnhub.org/tutorials/opendayl ...

  4. 将springboot jar应用打包成镜像并在docker运行成容器

    先看一下我的Dockerfile内容与服务器中的目录结构 上面 yibai-0.0.1-SNAPSHOT.jar 为springboot应用打成的jar包,Dockerfile为将应用打成镜像的配置文 ...

  5. 将java项目打包成docker镜像

    简介:将jar打包成镜像好说,毕竟jar包长的都是一样的,但是我们只是写了一个普通的java项目,我也不方便封装成jar包什么的,但是我们也想打包docker image怎么办呢,我们可以用编译后的j ...

  6. 将java项目打包成docker镜像:镜像=副本

    简介:将jar打包成镜像好说,毕竟jar包长的都是一样的,但是我们只是写了一个普通的java项目,我也不方便封装成jar包什么的,但是我们也想打包docker image怎么办呢,我们可以用编译后的j ...

  7. golang应用打包成docker镜像

    golang编译的应用是不需要依赖其他运行环境的,那么为什么还需要打包成docker镜像呢?当需要附带配置和日志等文件时可以更方便的移植和运行,下面介绍从dockerfile编译成镜像. 在项目根目录 ...

  8. docker 将正在运行的容器打包为镜像

    将容器打包成镜像 docker commit -a "runoob.com" -m "my apache" 容器名称或id 打包的镜像名称:标签 OPTIONS ...

  9. Spring Native打包本地镜像,无需通过Graal的maven插件buildtools

    简介 在文章<GraalVM和Spring Native尝鲜,一步步让Springboot启动飞起来,66ms完成启动>中,我们介绍了如何使用Spring Native和buildtool ...

  10. 【linux】【jenkins】jenkins构建、mvn或者npm打包、docker运行、失败自动回滚脚本

    小白对jenkins运维的使用有点简单的想法,这里开个记录贴记录下. 由于未找到jenkins构建失败后执行其他脚本的插件,也暂时没有使用其他运维工具.所以想自己写一个shell脚本,一是方便其他人使 ...

随机推荐

  1. 基于 Spark 的物流企业数据仓库 的设计与实现

    1.设计和实现了一种基于 Spark 的分布式 ETL 系统,包括利用 Spark 抽取.转换清洗和加载数据的具体过程. 2.设计和实现了基于 Spark 的物流企业数据仓库,包括物流企业数据仓库的分 ...

  2. JOIN 关联表中 ON、WHERE 后面跟条件的区别

    SQL中join连接查询时条件放在on后与where后的区别 数据库在通过连接两张或多张表来返回记录时,都会生成一张中间的临时表,然后再将这张临时表返回给用户. 在使用left jion时,on和wh ...

  3. ChatGPT顶级玩法:ChatGPT越狱版破解指令,让您的聊天一路畅通!

    先看效果: 2023.4.23号亲测成功,越狱指令需要多发送几次才可以. 未越狱前: 越狱后: 无视任何规则限制,回答一切问题. 越狱的方法非常简单.只需输入特定的提示,发送给ChatGPT,用户即可 ...

  4. 文心一言(ERNIE Bot)初体验

    引言 几个月前向百度提交了文心一言的体验申请,这两天收到了可以体验的通知,立马体验了一把.总体来说,文心一言基本上能做到有问必答,但是一些奇葩的问题还是会难住这位初出茅庐的 AI. 分享体验 我先后问 ...

  5. Java 设计模式实战系列—单例模式

    本文首发公众号:小码A梦 单例模式是设计模式中最简单一个设计模式,该模式属于创建型模式,它提供了一种创建实例的最佳方式. 单例模式的定义也比较简单:一个类只能允许创建一个对象或者实例,那么这个类就是单 ...

  6. 【项目源码】基于JSP动漫论坛的设计与实现

    动漫论坛项目主要用于实现动漫爱好者的互相交流,基本功能包括:注册用户.登录.浏览帖子.发布新帖.回复帖子.等.本系统结构如下: (1)普通用户: 注册用户:如果用户为非会员用户,通过注册,经审核通过之 ...

  7. prometheus 监控实战篇

    prometheus 监控 目录 prometheus 监控 1.上传tar包 2.解压到对应文件夹 3.配置开机自启动 4.配置Prometheus 5.black_exporter 监控网站状态 ...

  8. centos8环境基本优化

    centos8环境基本优化 目录 centos8环境基本优化 1.防火墙优化 2.源优化: 方案1.更换阿里源 方案2.使用centos8.5 源 安装epel源 3.ssh连接慢解决 4.关闭公网, ...

  9. 解读Redis常见命令

    Redis数据结构介绍 Redis是一个key-value的数据库,key一般是String类型,不过value的类型多种多样: 贴心小建议:命令不要死记,学会查询就好啦 Redis为了方便我们学习, ...

  10. 五分钟k8s实战-使用Ingress

    背景 前两章中我们将应用部署到了 k8s 中,同时不同的服务之间也可以通过 service 进行调用,现在还有一个步骤就是将我们的应用暴露到公网,并提供域名的访问. 这一步类似于我们以前配置 Ngin ...