学习某册子的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. Linux 概念:u-boot

    U-Boot介绍 参考:https://baike.baidu.com/item/U-Boot/10377075 参考:https://u-boot.readthedocs.io/en/latest/ ...

  2. Cannot use v-for on stateful component root element because it renders multiple elements.

    <template name:trailerStars> <image v-for="yellow in yellowScore" src="../st ...

  3. Unity的BuildPlayerProcessor:深入解析与实用案例

    Unity BuildPlayerProcessor Unity BuildPlayerProcessor是Unity引擎中的一个非常有用的功能,它可以让开发者在构建项目时自动执行一些操作.这个功能可 ...

  4. @ControllerAdvice 注解使用及原理探究

    最近在新项目的开发过程中,遇到了个问题,需要将一些异常的业务流程返回给前端,需要提供给前端不同的响应码,前端再在次基础上做提示语言的国际化适配.这些异常流程涉及业务层和控制层的各个地方,如果每个地方都 ...

  5. ArrayList底层原理、线程安全及其相关集合(面试常问)

    一.ArrayList底层原理 1.特点及其原理:ArrayList底层基于数组实现,查找快,增删慢 2.ArrayList底层原理,初始化及调用add()方法添加元素: 默认初始化容量为10 第一次 ...

  6. JavaScript的Map和WeakMap

    熟悉JavaScript的Map和WeakMap Map Map的键/值可以是任何类型 基本API 初始化映射: //使用new关键字和Map构造函数进行初始化 const m1 = new Map( ...

  7. 树链剖分 | 洛谷 P4114 Qtree1

    前言 题目链接:洛谷 P4114 Qtree1 前置知识:树链剖分 题意 给定一棵树,有修改边权和查询两点之间边权最大值两种操作,对于每个查询输出结果. 解析 已经在前置博客里提到,树链剖分 可以将树 ...

  8. 三维模型OSGB格式轻量化技术在大规模场景的加载和渲染的作用分析

    三维模型OSGB格式轻量化技术在大规模场景的加载和渲染的作用分析 在移动设备上,大规模场景的加载和渲染是一个不容忽视的问题.对于OSGB格式轻量化处理来说,大规模场景的加载和渲染也是其中一项重要的任务 ...

  9. API技术的使用场景

    ​ 互联网的发展和普及,API技术也变得越来越重要.API是应用程序接口,它是一种连接不同应用程序或系统之间数据交换和通信的方式.API技术不仅提高了不同应用程序之间的互操作性,还加速了应用程序的开发 ...

  10. 架构师必会之-DBA级问题的数据库底层设计思想

    大家好,我是sulny_ann,这期想跟大家分享一下我之前在面试里面问过比较难的数据库相关的问题. 大家经常也在调侃后端好像就是技术数据库的增删改查,所以作为后端开发,你对应数据库这一块掌握的怎么样, ...