在前一篇文章中介绍了在Jenkins中利用NodeJS插件实现创建、编译、镜像生成以及私库推送的Angular的应用的过程,这篇文章将进一步延伸,将生成的镜像直接运行起来。

基础知识

如果对于NodeJS的插件使用或者在Jenkins的Jenkinsfile中使用npm的基本方法不熟悉的开发者可以先行查看如下文章。

  • 在Jenkins中安装和设定NodeJS插件:https://liumiaocn.blog.csdn.net/article/details/102618269
  • 如何在Jenkinsfile中使用NodeJS:
  • https://liumiaocn.blog.csdn.net/article/details/102598127

而关于Alpine镜像中使用NodeJS则有诸多问题,常见的对应方法可以参看:

  • https://liumiaocn.blog.csdn.net/article/details/102587460

事前准备

安装NodeJS的10.15.3版,然后创建一个名为angular-pipeline-job的Pipeline类型的Job。

  • 确认镜像状况
liumiaocn:~ liumiao$ docker images |grep angulardemo
192.168.31.242:5000/angulardemo                 6                               2a62c78f86de        About an hour ago   145MB
192.168.31.242:5000/angulardemo                 7                               2a62c78f86de        About an hour ago   145MB
angulardemo                                     4                               2a62c78f86de        About an hour ago   145MB
angulardemo                                     5                               2a62c78f86de        About an hour ago   145MB
angulardemo                                     6                               2a62c78f86de        About an hour ago   145MB
angulardemo                                     7                               2a62c78f86de        About an hour ago   145MB
localhost:5000/angulardemo                      6                               2a62c78f86de        About an hour ago   145MB
liumiaocn:~ liumiao$
  • Registry 准备:
    本文使用docker registry作为镜像私库的管理,环境准备只需如下一行语句即可

执行命令:docker run -d -p 5000:5000 registry

使用docker ps确认私库管理的容器已经启动

liumiaocn:docker liumiao$ docker ps |grep registry
06601f2782c0        registry                     "/entrypoint.sh /etc…"   About a minute ago   Up About a minute   0.0.0.0:5000->5000/tcp                              cocky_murdock
liumiaocn:docker liumiao$

Jenkinsfile

node {stage('Prepare Node and NPM') { // confirm nodejs plugin and settingenv.NODEJS_HOME = "${tool 'nodejs-10.15.3'}"env.PATH="${env.NODEJS_HOME}/bin:${env.PATH}"sh 'npm --version'}stage('Prepare Angular CLI') { // install global angular clish 'npm -g install @angular/cli'sh 'ng --version'}stage('Prepare Angular Project') { // prepare angular demo appsh 'if [ ! -d demo ]; then ng new demo --style less; fi'}stage('Build Angular Project') { // build angular demo appsh 'cd demo && npm install && npm run build'}stage('Build Angular demo image') { // build image and push to registrysh 'cp /tmp/Dockerfile .'docker.withRegistry('http://192.168.31.242:5000') {def angular_img = docker.build("angulardemo:${env.BUILD_ID}")angular_img.push()}}stage('Deploy Angular image') { // docker run angular imagedocker.image("angulardemo:${env.BUILD_ID}").run('-p 8888:80')}
}

代码说明:
angular是通过cli来创建应用程序脚手架的,在Prepare Angular Project的stage中通过使用ng new demo创建了demo的angular应用。而在后续的stage中则通过npm install安装相关的依赖,通过npm run build则生成了结果的dist目录与文件,然后通过docker.withRegistry设定私库地址,通过docker.build构建,通过push方法进行推送,然后使用image的run方法运行容器。

结果确认

  • 执行日志确认
    执行日志如下所示:
Started by user root
Running in Durability level: MAX_SURVIVABILITY
[Pipeline] Start of Pipeline
[Pipeline] node
Running on Jenkins in /data/jenkins/workspace/angular-pipeline-job
[Pipeline] {
[Pipeline] stage
[Pipeline] { (Prepare Node and NPM)
[Pipeline] tool
[Pipeline] sh
+ npm --version
6.4.1
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (Prepare Angular CLI)
[Pipeline] sh
+ npm -g install @angular/cli
...省略
[Pipeline] // stage
[Pipeline] stage (hide)
[Pipeline] { (Build Angular demo image)
[Pipeline] sh
+ cp /tmp/Dockerfile .
[Pipeline] withEnv
[Pipeline] {
[Pipeline] withDockerRegistry
[Pipeline] {
[Pipeline] sh
+ docker build -t angulardemo:6 .
Sending build context to Docker daemon  309.2MBStep 1/2 : FROM nginx:latest---> 5a9061639d0a
Step 2/2 : ADD demo/dist/* /usr/share/nginx/html---> Using cache---> 2a62c78f86de
Successfully built 2a62c78f86de
Successfully tagged angulardemo:6
[Pipeline] dockerFingerprintFrom
[Pipeline] sh
+ docker tag angulardemo:6 192.168.31.242:5000/angulardemo:6
[Pipeline] sh
+ docker push 192.168.31.242:5000/angulardemo:6
The push refers to repository [192.168.31.242:5000/angulardemo]
6bcd7eb9d365: Preparing
cf2436e84ea8: Preparing
ed4a4820ee08: Preparing
b67d19e65ef6: Preparing
b67d19e65ef6: Mounted from my-nginx
cf2436e84ea8: Mounted from my-nginx
ed4a4820ee08: Mounted from my-nginx
6bcd7eb9d365: Pushed
6: digest: sha256:7fce52cd74ca42476dde1ee91f549d521982d5407b65190996e2e8a1dd60604c size: 1159
[Pipeline] }
[Pipeline] // withDockerRegistry
[Pipeline] }
[Pipeline] // withEnv
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
Finished: SUCCESS
  • 镜像构建结果确认
liumiaocn:~ liumiao$ docker images |grep angulardemo
192.168.31.242:5000/angulardemo                 6                               2a62c78f86de        About an hour ago   145MB
192.168.31.242:5000/angulardemo                 7                               2a62c78f86de        About an hour ago   145MB
192.168.31.242:5000/angulardemo                 9                               2a62c78f86de        About an hour ago   145MB
angulardemo                                     4                               2a62c78f86de        About an hour ago   145MB
angulardemo                                     5                               2a62c78f86de        About an hour ago   145MB
angulardemo                                     6                               2a62c78f86de        About an hour ago   145MB
angulardemo                                     7                               2a62c78f86de        About an hour ago   145MB
angulardemo                                     9                               2a62c78f86de        About an hour ago   145MB
localhost:5000/angulardemo                      6                               2a62c78f86de        About an hour ago   145MB
liumiaocn:~ liumiao$
  • 构建结果
    在blueocean上也能实时地确认到构建的输出信息

  • 运行结果确认
    使用如下命令也可以发现此服务已经运行在8888端口。

liumiaocn:~ liumiao$ docker ps |grep 8888
f7654fc19157        angulardemo:9               "nginx -g 'daemon of…"   17 minutes ago      Up 17 minutes       0.0.0.0:8888->80/tcp                                blissful_davinci
liumiaocn:~ liumiao$

使用浏览器也能直接确认结果了

Jenkins基础:使用NPM构建前端应用6:部署前端镜像相关推荐

  1. Jenkins基础:使用NPM构建前端应用1: nodejs插件的安装与设定

    关于在Jenkins中使用npm的需要,有多种方法,如果可以接受直接在Jenkins上手动地配置与设定的方式,使用名为nodejs的插件则可以实现前端应用的集成. 插件介绍 项目 说明 插件名称 no ...

  2. Jenkins教程(3)使用npm构建Node.js和React应用

    本教程将展示Jenkins如何使用 Node Package Manager (npm)去组合构建简单的 Node.js 和 React 应用 . 如果你是一个对CI/CD概念不了解的 Node.js ...

  3. Jenkins基础:Jenkinsfile使用实例:12:使用docker.build构建镜像

    在前面一篇文章中我们介绍了使用在Jenkinsfile中使用dockerfile来动态生成镜像,从而在指定的阶段进行使用.而对于将构建生成的二进制应用进行容器化,比如将spring boot应用的ja ...

  4. 【前端自动化构建】之 自动化部署

    项目说明 笔记来源:拉勾教育 大前端高薪训练营 阅读建议:建议通过左侧导航栏进行阅读 自动化部署 基本介绍 传统的部署方式 更新 本地构建 发布 更新 本地构建 发布 - 现代化的部署方式(CI / ...

  5. 【项目部署】使用Jenkins一键打包部署前端Vue应用

    文章目录 前言 一.准备工作 1.安装nginx 1.1 下载nginx的docker镜像 1.2 从容器中拷贝nginx配置 1.3 使用docker命令启动 1.4 测试 二.安装NodeJS插件 ...

  6. Jenkins自动化部署前端Vue项目

    Jenkins自动化部署前端Vue项目 前言 安装NodeJs 下载NodeJs 安装NodeJs npm配置 Jenkins配置NodeJs 安装NodeJs插件 配置NodeJs 新建及配置任务 ...

  7. 前端开发入门:前端构建工具百度FIS

    FIS是什么? FIS全称为Front-end Integrated Solution,即前端集成解决方案.前端团队发展大多会经历规范设计.技术选型.系统拆分.性能优化等阶段,其中的技术需求可以总结为 ...

  8. 前端项目自动化部署——超详细教程(Jenkins、Github Actions)

    本教程主要讲解了怎么使用 Jenkins 和 Github Actions 部署前端项目. 第一部分是使用 Gitea 配置局域网 git 服务器,再使用 Jenkins 将 Gitea 下的项目部署 ...

  9. 前端教程——前端项目自动化部署(Jenkins、Github Actions)

    本教程主要讲解了怎么使用 Jenkins 和 Github Actions 部署前端项目. 第一部分是使用 Gitea 配置局域网 git 服务器,再使用 Jenkins 将 Gitea 下的项目部署 ...

最新文章

  1. mac 配置 php,mac如何配置php环境
  2. C#正则实现匹配一块代码段
  3. 剑指Offer #06 旋转数组的最小数字(二分查找)| 图文详解
  4. 如何构建自己的游戏框架并且制作游戏
  5. android之SharedPreferences
  6. SAP CRM WebClient UI的cancel按钮处理
  7. java static是单例_JAVA基础-static关键字及单例设计模式
  8. 网页编辑器粘贴word格式的处理
  9. linux 调节风扇速度命令,ubuntu系统调节GPU风扇转速
  10. 三部曲打造无路由器破解闪讯WiFi共享 经好几个同学验证
  11. 2022年全国高中数学联赛二试几何题(A卷)详解
  12. 《超大流量分布式系统架构解决方案-人人都是架构师2.0》读书笔记
  13. 特斯拉DTC运营解读
  14. Excel 2010 VBA 入门 087 数据处理之按单列汇总多个工作表
  15. 【生活】解决广州社保无法查询的问题,2020年3月起,广州社保/医保/养老无法在微信/支付宝查询到的解决办法
  16. 使用JS进行日期计算
  17. Mybatis中注解和xml可以同时使用吗?
  18. Skia API的简单应用
  19. Android连接WiFi
  20. Android作业:设计一个能在图片上涂鸦的程序

热门文章

  1. cad脚本合适_如何制作cad脚本文件?cad脚本文件怎么做?
  2. qiankun 部署微前端-vue2(一)
  3. Win10设置文件夹权限报错-(提示:无法枚举容器中的对象 访问被拒绝)
  4. Python程序设计基础(一)
  5. element-UI输入框时间默认今天
  6. 论文翻译:Learning Invariant Representations and Risks for Semi-supervised Domain Adaptation
  7. ChatGPT + Midjourney + 闲鱼,能赚钱吗?
  8. python类型转换astype时间_python – 使用astype()无法转换Timedelta对象
  9. vlanif和vlan的区别和联系
  10. 41岁阿里工程师:35岁转管理,真的是必经之路吗?