jenkins+docker+nginx+nodejs持续集成部署vue前端项目

Jenkins+Docker+nginx+nodejs持续集成部署Vue前端项目

概述

这篇攻略主要讲解如何使用Jenkins、Docker、nginx和nodejs实现持续集成和部署Vue前端项目。下文将对Jenkins、Docker、nginx以及nodejs的相关概念、安装和使用作详细的介绍,并通过两个示例说明如何实现持续集成和部署。

Jenkins简介

Jenkins是一种基于Java的开源自动化服务器,可以实现自动化构建、测试和部署。在本攻略中,Jenkins用来管理代码仓库、执行构建、测试和部署任务。

Docker简介

Docker是一种开源容器技术,可以将应用及其依赖打包为一个容器,方便部署和移植。在本攻略中,Docker用来打包和运行Vue前端项目。

nginx简介

nginx是一种流行的高性能Web服务器和反向代理服务器,可以实现负载均衡、缓存、日志等功能。在本攻略中,nginx用来反向代理Vue前端项目的请求。

nodejs简介

nodejs是一种基于Chrome V8引擎的JavaScript运行环境,可以方便地开发和部署Web应用程序。在本攻略中,nodejs用来安装和运行Vue前端项目的依赖和启动应用程序。

安装Jenkins

  1. 在Ubuntu上安装Jenkins:

$ sudo apt update
$ sudo apt install openjdk-8-jdk
$ wget -q -O - https://pkg.jenkins.io/debian-stable/jenkins.io.key | sudo apt-key add -
$ sudo sh -c 'echo deb https://pkg.jenkins.io/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list'
$ sudo apt update
$ sudo apt install jenkins

  1. 启动Jenkins服务:

$ sudo systemctl start jenkins

  1. 打开Jenkins Web管理界面,设置管理员密码,安装推荐插件,创建管理员用户。

安装Docker

  1. 在Ubuntu上安装Docker:

$ sudo apt update
$ sudo apt install docker.io

  1. 将当前用户加入docker用户组:

$ sudo usermod -aG docker $USER

配置nginx

  1. 安装nginx:

$ sudo apt update
$ sudo apt install nginx

  1. 配置nginx反向代理:

server {
listen 80;
server_name example.com;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
add_header Cache-Control "no-store";
add_header Pragma "no-cache";
expires -1;
gzip_static on;
gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript image/svg+xml;
gzip_vary on;
}
}

安装nodejs

  1. 在Ubuntu上安装nodejs:

$ sudo apt update
$ curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash -
$ sudo apt install nodejs

示例一:基于简单的Vue前端项目的持续集成和部署

以下为一个简单的Vue前端项目的目录结构:

my-vue-app/
├── public/
│   ├── index.html
│   └── ...
├── src/
│   ├── main.js
│   ├── router.js
│   └── ...
├── package.json
└── ...
  1. 将该项目上传至GitHub,设置Jenkins的Webhook。

  2. 在Jenkins中的项目配置页面中配置参数化构建:

npm install
npm run build
docker build -t my-vue-app .
docker run -d -p 8080:80 my-vue-app

  1. 配置Jenkins的持续集成流水线:

node {
stage('Build') {
def image = docker.build("my-vue-app")
}
stage('Deploy') {
docker.withRegistry('https://registry.hub.docker.com', 'docker-hub') {
image.push('latest')
}
sh 'docker rm -f my-vue-app || true'
sh 'docker run -d -p 8080:80 --name my-vue-app my-vue-app'
}
}

  1. 编写Dockerfile:

FROM nginx:alpine
COPY dist/ /usr/share/nginx/html

  1. 编写Jenkinsfile:

pipeline {
agent any
stages {
stage('Checkout') {
steps {
checkout([$class: 'GitSCM',
branches: [[name: '*/master']],
doGenerateSubmoduleConfigurations: false,
extensions: [[$class: 'CleanCheckout']],
submoduleCfg: [],
userRemoteConfigs: [[url: 'https://github.com/username/my-vue-app.git']]])
}
}
stage('Test') {
steps {
sh 'npm install'
sh 'npm run test'
}
}
stage('Build') {
steps {
sh 'npm run build'
sh 'docker build -t my-vue-app .'
}
}
stage('Deploy') {
environment {
registry = 'docker-hub'
registryCredential = 'docker-hub-credential'
dockerImage = ''
}
steps {
script {
docker.withRegistry( '', registryCredential ) {
dockerImage = docker.build( "my-vue-app" )
dockerImage.push()
}
sh "docker stop my-vue-app || true && docker rm my-vue-app || true"
sh "docker run -d --name my-vue-app -p 80:80 ${dockerImage.imageName}"
}
}
}
}
post {
always {
cleanWs()
sh "docker rmi -f $(docker images -qf dangling=true) || true"
}
}
}

示例二:基于复杂的Vue前端项目的持续集成和部署

在示例一的基础上,考虑更复杂的Vue前端项目,增加了一个使用Node.js和Express构建的后端API服务器。该项目的目录结构如下:

my-vue-app/
├── public/
│   ├── index.html
│   └── ...
├── src/
│   ├── main.js
│   ├── router.js
│   └── ...
├── api/
│   ├── server.js
│   ├── package.json
│   └── ...
├── package.json
└── ...
  1. 将该项目上传至GitHub,设置Jenkins的Webhook。

  2. 在Jenkins中的项目配置页面中配置参数化构建:

npm install
npm run build
docker build -t my-vue-app .
docker build -t my-api-server ./api
docker network create my-network
docker run -d --name my-api-server --network my-network my-api-server
docker run -d --name my-vue-app --network my-network -p 8080:80 my-vue-app

  1. 配置Jenkins的持续集成流水线:

pipeline {
agent any
stages {
stage('Checkout') {
steps {
checkout([$class: 'GitSCM',
branches: [[name: '*/master']],
doGenerateSubmoduleConfigurations: false,
extensions: [[$class: 'CleanCheckout']],
submoduleCfg: [],
userRemoteConfigs: [[url: 'https://github.com/username/my-vue-app.git']]])
}
}
stage('Test') {
steps {
sh 'npm install'
sh 'npm run test'
}
}
stage('Build') {
steps {
sh 'npm run build'
sh 'docker build -t my-vue-app .'
sh 'docker build -t my-api-server ./api'
}
}
stage('Deploy') {
steps {
sh 'docker network rm my-network || true'
sh 'docker network create my-network'
sh 'docker rm -f my-api-server || true'
sh 'docker run -d --name my-api-server --network my-network my-api-server'
sh 'docker rm -f my-vue-app || true'
sh 'docker run -d --name my-vue-app --network my-network -p 8080:80 my-vue-app'
}
}
}
post {
always {
cleanWs()
sh "docker rmi -f $(docker images -qf dangling=true) || true"
}
}
}

  1. 编写Dockerfile:

```
# Vue Frontend
FROM nginx:1.13-alpine as frontend
COPY dist/ /usr/share/nginx/html

# API Server
FROM node:12-alpine as api
WORKDIR /app
COPY api/package.json .
RUN npm install
COPY api .
EXPOSE 3000
CMD ["node", "server.js"]
```

  1. 编写Jenkinsfile,同示例一。

总结

以上就是如何使用Jenkins、Docker、nginx和nodejs实现持续集成和部署Vue前端项目的完整攻略,包括相关概念、安装和使用介绍以及两个示例的说明。通过这些步骤,您可以为您的Vue前端项目设置自动化构建、测试和部署流水线,提高开发和部署效率。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:jenkins+docker+nginx+nodejs持续集成部署vue前端项目 - Python技术站

(0)
上一篇 2023年5月29日
下一篇 2023年5月29日

相关文章

  • 详解关于element级联选择器数据回显问题

    关于Element级联选择器数据回显问题的攻略主要包含以下几个步骤: 在Vue组件中引入级联选择器<el-cascader>组件并设置必要的属性。 将级联选择器绑定到Vue组件中的data属性。 在级联选择器绑定的数组数据中搜索符合当前选项路径的数据并返回给级联选择器组件。 对于级联选择器组件中的onChange事件,更新选中的选项路径,将其保存…

    Vue 2023年5月29日
    00
  • vue 实现模糊检索并根据其他字符的首字母顺序排列

    实现模糊检索并根据其他字符的首字母顺序排列是前端开发中比较常见的需求之一,在 Vue 中也有很好的实现方式。 1.实现模糊检索功能 实现模糊检索的核心点是在数据源上进行筛选。假设我们有一个表格数据源: [ { name: ‘张三’, age: 21 }, { name: ‘李四’, age: 22 }, { name: ‘王五’, age: 23 }, { …

    Vue 2023年5月27日
    00
  • 手把手带你搭建一个node cli的方法示例

    下面是手把手带你搭建一个node cli的方法示例的完整攻略: 前置知识 在开始搭建之前,我们需要掌握一些基础知识: Node.js的基本使用 npm包管理器的使用 shell命令行的基本使用 如果你还不会这些基础知识,建议先学习一下。 步骤 1. 初始化项目 首先,我们需要创建一个新的目录,进入目录后使用以下命令进行项目初始化: npm init -y 这…

    Vue 2023年5月29日
    00
  • vue fetch中的.then()的正确使用方法

    首先,对于Vue fetch中的.then()方法,我们需要了解一下Promise的基本概念。Promise是JavaScript异步编程的一种解决方案,在Vue fetch中使用.then()方法,就是在Promise中实现了异步操作。 .then()方法可以接受两个回调函数参数,当异步操作成功后会调用第一个回调函数,如果异步操作失败则会调用第二个回调函数…

    Vue 2023年5月27日
    00
  • java编程中实现调用js方法分析

    要在Java编程中实现调用JavaScript方法,可以通过Java与JavaScript的互操作性(JSR-223)进行实现。以下是具体步骤: 导入相应的依赖项 首先在Java项目中,需要导入JSR-223的相关依赖项,一般来说需要的有javax.script.ScriptEngineManager和javax.script.ScriptEngine两个依…

    Vue 2023年5月28日
    00
  • vue中forEach循环的使用讲解

    当我们使用Vue.js来开发我们的web应用时,经常需要处理数据的遍历或是循环。在Vue.js中,我们可以通过forEach()方法来对一个数组进行循环,本文将从以下几个方面来讲解vue中forEach循环的使用方法: forEach()的基础使用方法 在Vue.js中使用forEach()进行数组循环 遍历对象时使用forEach()的注意事项 1. fo…

    Vue 2023年5月27日
    00
  • 微信jssdk用法汇总

    下面我将详细讲解“微信jssdk用法汇总”的完整攻略。 什么是微信jssdk? 微信JSSDK(JavaScript SDK)是一款基于微信公众号开发的JavaScript插件,为开发者提供了直接在公众号内调用微信原生功能的能力,如获取用户信息、调起微信支付、分享功能、扫码等。使用JSSDK可以让开发者更方便的集成微信的功能,提升网站与微信公众号的交互性。 …

    Vue 2023年5月28日
    00
  • 关于vue组件的更新机制 resize() callResize()

    Vue.js组件更新机制是主要的知识点之一,正确理解组件的更新机制,有助于我们更好地组织和管理Vue组件,提高Vue.js开发的效率。其中,resize()和callResize()是Vue.js组件更新机制的两个关键点,它们具体所代表的含义和作用在下面进行详细解释。 Vue组件的更新机制概述 Vue.js采用了渐进式的开发方式,组件是Vue.js中最基本的…

    Vue 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部