我的编程空间,编程开发者的网络收藏夹
学习永远不晚

docker封装nuxt项目使用jenkins发布

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

docker封装nuxt项目使用jenkins发布

vue项目可以打一个dist静态资源包,直接使用Nginx发布即可。

但是nuxt项目无法像vue那样,可以打一个dist静态资源包。

需要安装Node.js,并使用npm install 安装依赖包才行。

 

现在由于要上docker,需要将nuxt项目和nojs.js依赖包打成一个镜像才行。

 

目录结构

在服务器新建目录/data/nuxt_web/,目录结构如下:

./
├── dockerfile
├── nuxt_base
│   ├── code
│   │   └── package.json
│   └── dockerfile
└── update.sh

 

先来看一下基础镜像nuxt_base

/data/nuxt_web/nuxt_base/dockerfile

FROM alpine:3.9
COPY code /code
WORKDIR /code
RUN echo "https://mirrors.aliyun.com/alpine/v3.9/main" > /etc/apk/repositories \
    && apk add nodejs npm \
    && npm config set registry http://registry.npm.taobao.org/ \
    && npm i node-sass --sass_binary_site=https://npm.taobao.org/mirrors/node-sass/ \
    && npm install

这里设定了更新源为taobao

 

/data/nuxt_web/nuxt_base/code/package.json是用来存放nuxt项目需要的依赖包列表,使用npm install,就会安装package.json里面列举的依赖包。

package.json内容我就不贴了,根据实际情况来。

 

/data/nuxt_web/dockerfile

FROM nuxt_base:v1
COPY code /code 
WORKDIR /code
EXPOSE 3002
#RUN cd /code && npm i node-sass --sass_binary_site=https://npm.taobao.org/mirrors/node-sass/ &&/usr/bin/npm install
CMD /usr/bin/npm run build

这里注释掉了npm install执行命令。为什么呢?因为nuxt_base:v1镜像已经安装了依赖包,不需要再安装一次了。

 

/data/nuxt_web/update.sh

#!/bin/bash
# 判断是否更新基本镜像

diff /data/code/nuxt_web_3002/code/package.json /data/nuxt_web/nuxt_base/code/package.json
if [ `echo $?` == 0 ];then
  echo true
else
  echo false
  #exit
  \cp /data/code/nuxt_web_3002/code/package.json /data/nuxt_web/nuxt_base/code/package.json
  cd /data/nuxt_web/nuxt_base
  docker build -t nuxt_base:v1 . --no-cache
fi

 

这个脚本,是用来判断。项目中的package.json是否和nuxt_base:v1镜像中的package.json是否一致。

如果一致,就更新基础镜像,否则不更新。

 

基础镜像

先来封装基础镜像

cd /data/nuxt_web/nuxt_base
docker build -t nuxt_base:v1 .

 

nuxt项目镜像

将/data/nuxt_web/dockerfile 拷贝到 nuxt项目根目录,使用命令构建

docker build -t nuxt_web:v1 .

 

由于只有一个nuxt项目,不需要将dockerfile提交到github中,放到服务器的固定位置即可。

发布时,将dockerfile拷贝到目录即可。先执行update.sh,再执行docker build命令。

 

环境介绍

gitlab版本:GitLab 社区版 10.5.1 

jenkins版本:2.219

服务器:centos 7.6

 

由于jenkins服务器的操作系统为:centos 6.9,它不能安装docker,因此docker打包动作需要在服务器上面执行。

ansible分组

vi /etc/ansible/hosts

内容如下:

[test_nuxt]
192.168.28.34

 

ansible playbook

vi /opt/ansible/test/docker_nuxt.yml

内容如下:

---
 # 需要传入变量HOSTS
 # 分别表示: 主机
 - hosts: "{{ HOSTS }}"
   remote_user: root
   become: yes
   become_method: sudo
   # 声明变量
   vars:
     PROJECT_NAME: "nuxt_web"
     PORT: 3002
     # 远程项目基础目录
     BASE_DIR: "/data/code"
     # 远程项目目录名
     PROJECT_DIR: "{{ PROJECT_NAME }}_{{ PORT }}"
     # 完整的jenkins 项目跟路径
     JENKINS_DIR: "/data/jenkins_data/workspace/{{ JOB_NAME }}"
   tasks:
    #删除原来的目录
     - name: delete directory
       file:
         path: "{{  BASE_DIR }}/{{ PROJECT_DIR }}/code/"
         state: absent
    #同步文件到目标服务器
     - name: synchronous web static file
       synchronize:
         class="lazy" data-src: "{{ JENKINS_DIR }}/"
         dest: "{{  BASE_DIR }}/{{ PROJECT_DIR }}/code/"

    #更新基础镜像
     - name: update base image
       shell: bash /data/nuxt_web/update.sh

    #复制dockerfile
     - name: copy dockerfile
       shell: \cp /data/nuxt_web/dockerfile {{  BASE_DIR }}/{{ PROJECT_DIR }}/

    # 打包镜像
     - name: docker build
       shell: cd {{ BASE_DIR }}/{{ PROJECT_DIR }} && docker build -t {{ PROJECT_NAME }}:{{ BUILD_NUMBER }} .
       # 由于有fsevent警告信息,要忽略警告
       ignore_errors: yes

    #删除之前的docker
     - name: docker rm image
       shell: docker rm -f {{ PROJECT_NAME }}
       ignore_errors: yes

    #启动docker
     - name: docker run image
       # 提前创建bridge网络:docker network create testnet
       shell: docker run -it -d --restart=always --name {{ PROJECT_NAME }} --network testnet --network-alias {{ PROJECT_NAME }} -p {{ PORT }}:{{ PORT }} {{ PROJECT_NAME }}:{{ BUILD_NUMBER }}
     - name: view port,Wait for 45 seconds
       shell: sleep 45;docker exec {{ PROJECT_NAME }} netstat -anpt|grep {{ PORT }}

这个项目默认采用3002端口,因此也使用3002端口来映射。

 

新建job

新建一个job,名字为:test_nuxt,使用自由风格

1.png

 

 源码管理

1.png

 

 

执行shell脚本

1.png

 

 完整命令如下:

ansible-playbook -v /opt/ansible/test/docker_nuxt.yml -e "HOSTS=test_nuxt JOB_NAME=${JOB_NAME} BUILD_NUMBER=${BUILD_NUMBER}"

 

点击最下面的保存,最后点击构建即可

1.png

 

由于服务器运行的vue项目,映射的是非80端口,域名解析到这台服务器,是无法访问的。

因此需要使用Nginx转发一下即可。

server {
 listen 80;
 server_name nuxt.baidu.com;
 access_log /var/log/nginx/nuxt.baidu.com.access.log main;
 error_log /var/log/nginx/nuxt.baidu.com.error.log;
 location / {
        proxy_pass http://127.0.0.1:3002;
        proxy_set_header           Host $host;
        proxy_set_header           X-Real-IP $remote_addr;
        proxy_set_header           X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_connect_timeout 300s;
        proxy_send_timeout 300s;
        proxy_read_timeout 300s;
         # websocket support
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
 }
}

 


免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

docker封装nuxt项目使用jenkins发布

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

docker封装nuxt项目使用jenkins发布

vue项目可以打一个dist静态资源包,直接使用Nginx发布即可。但是nuxt项目无法像vue那样,可以打一个dist静态资源包。需要安装Node.js,并使用npm install 安装依赖包才行。现在由于要上docker,需要将nux
2023-01-31

docker封装vue项目并使用jenkins发布

vue项目可以打一个dist静态资源包,直接使用Nginx发布即可。现在由于要上docker,需要将vue项目和nginx打成一个镜像才行。项目结构如下:./├──build│└──build.js├──config│└──index.js
2023-01-31

如何使用jenkins一键打包发布vue项目

这篇文章主要介绍如何使用jenkins一键打包发布vue项目,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!jenkins的安装Jenkins是一款开源 CI&CD 软件,用于自动化各种任务,包括构建、测试和部署软件。
2023-06-15

如何使用Docker部署打包发布springboot项目

这篇文章将为大家详细讲解有关如何使用Docker部署打包发布springboot项目,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。前言从安装docker到多种方式打包发布,编译,镜像,容器等问题,遇到种种
2023-06-29

怎么使用Docker组件开发Django项目

本篇内容主要讲解“怎么使用Docker组件开发Django项目”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么使用Docker组件开发Django项目”吧!Docker 是一个开源的应用容器引
2023-06-19

vue项目使用axios封装request请求的过程

这篇文章主要介绍了vue项目使用axios封装request请求,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
2023-05-17

如何在vue项目中使用封装后的axios

这篇文章给大家介绍如何在vue项目中使用封装后的axios,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。为什么要使用VueVue是一款友好的、多用途且高性能的JavaScript框架,使用vue可以创建可维护性和可测试
2023-06-06

使用基于Node.js的构建工具Grunt来发布ASP.NET MVC项目

Grunt 简介 Grunt是一款基于js和node.js的构建工具,由于这段时间node.js越来越火爆,grunt拥有丰富的开源社区支持,产生了很多插件。还有一些插件散落在node社区。构建是一个和宽泛的表述,传统理解就是编译、打包、复
2022-06-04

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录