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日

相关文章

  • 详解VUE调用本地json的使用方法

    下面是详细讲解“详解VUE调用本地json的使用方法”的完整攻略。 一、创建本地JSON文件 首先,我们需要在项目中创建本地的JSON文件,可以在项目的静态文件夹中创建一个新的文件夹,比如称之为json,然后在该文件夹中创建一个名为data.json的JSON文件。 下面是一个data.json文件的示例内容: { "users": [ …

    Vue 2023年5月28日
    00
  • vue中filters 传入两个参数 / 使用两个filters的实现方法

    在 Vue 中,可以使用 filter 过滤器来处理模板中的数据。filter 在显示数据之前对其进行处理,比如对字符串格式化、将时间格式化等等。 在 Vue 中,我们可以定义一个 filter 来处理一些数据,此时这个 filter 就是一个全局的 filter。可以被任何组件进行调用。 现在我们来详细讲解“vue中filters 传入两个参数 / 使用两…

    Vue 2023年5月27日
    00
  • 8个非常实用的Vue自定义指令

    下面我将详细讲解“8个非常实用的Vue自定义指令”的攻略,主要分为以下几个部分: 什么是Vue自定义指令 Vue自定义指令是指开发者可以自己定义指令,然后在Vue模板中通过相应的名称来进行使用。自定义指令能够让我们在Vue的开发过程中,更加方便地控制DOM元素的行为,同时也能够提高代码的可复用性。 Vue自定义指令的使用方法 要使用Vue自定义指令,我们需要…

    Vue 2023年5月28日
    00
  • 浅析vue深复制

    浅析vue深复制 什么是深复制 在编程中,复制一个对象并不是简单地复制原先的地址,而是将原对象的所有数据都复制到一个新的内存地址中,我们称之为复制对象。当我们在拷贝一个对象的时候,有可能会遇到”浅复制”和”深复制”。 浅复制:复制对象时,指向某个指针的指针只能复制指针的值,而不能复制所指向的对象。因此,当我们改变所指向对象的内容时,指针也会发生相应的变化。 …

    Vue 2023年5月28日
    00
  • vue 文件切片上传的项目实现

    下面我将详细讲解“Vue 文件切片上传的项目实现”的完整攻略。该过程主要分为以下五个步骤: 安装依赖库 开发项目之前需要先安装以下库: axios:用于发起后端请求; element-ui:基于 Vue 的组件库,提供了上传文件的组件; js-sha256:计算文件的哈希值。 可以使用以下命令进行安装: npm install axios element-u…

    Vue 2023年5月28日
    00
  • Springboot+ElementUi实现评论、回复、点赞功能

    下面是“Springboot+ElementUi实现评论、回复、点赞功能”的完整攻略: 简介 本文将介绍如何使用Spring Boot和ElementUi实现评论、回复、点赞功能。在本文中,我们将使用Spring Boot作为后端框架,使用ElementUi作为前端框架。 技术栈 前端技术:Vue.js、ElementUi、Axios 后端技术:Spring…

    Vue 2023年5月28日
    00
  • Vue前端书写规范大全(非常详细!)

    首先我们来谈谈Vue前端书写规范大全的重要性,这是因为在Vue开发中,写好规范的代码能够提高代码的可读性和可维护性,同时也能够避免很多不必要的错误和 bug,因此Vue前端书写规范大全是非常重要的。 Vue前端书写规范大全主要包括以下几个方面: 1. 文件命名规范 1.1 Vue 单文件组件命名规范 Vue 单文件组件(.vue 文件)应按照以下格式进行命名…

    Vue 2023年5月27日
    00
  • vue3自定义指令看完这篇就入门了

    下面是关于“vue3自定义指令看完这篇就入门了”的详细讲解攻略,包含了自定义指令的概念、用法和示例说明。 什么是自定义指令? 在Vue中,指令是用于在模板中添加特殊处理逻辑的特殊属性。指令有很多内置的,例如:v-if、v-for、v-bind等等。除了内置指令外,也可以通过Vue提供的Vue.directive()方法来自定义指令。 自定义指令能够帮助我们更…

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