介紹
本系列主要介紹如何自動化部署我們的前端和后端項目
本篇主要介紹如何自動化部署vue項目
下篇講如何自動化部署nodejs項目
我這里是mac os,如果你用linux就不會碰到很多下面碰到的問題了。
相關應用
整個流程
首先我們把我們的電腦想象成一台服務器,當然如果你有服務器,也可以直接在服務器上,執行以下操作
我這里方便起見,就直接把我的電腦(mac)當做一台服務器,事實證明這里面很多坑!!!
注意區分以下本地和服務器的區別,其實我們這里都是我們的電腦
-
我們在服務器(這里是我們的mac)上安裝docker
-
我們在服務器(這里是我們的mac)上用docker安裝了jenkins
-
我們本地新建一個vue項目,並推到github
-
我們本地訪問服務器上的jenkins,即打開網址http://localhost:8081 (如果是服務器這里localhost換成你服務器的ip)
-
我們用jenkins拉了github的項目到jenkins的安裝目錄里的
workspace/
目錄 -
jenkins使用
執行shell
跑了命令
npm install
npm run build
這里我們需要給jenkins安裝nodejs插件
- 我們用jenkins ssh連接到我們的服務器
這里我們需要安裝Publish Over SSH插件,並配置好服務器
- 在服務器(這里是我們的mac)上執行以下操作
把我們的vue項目打包成鏡像vuenginxapp
用這個鏡像創建一個容器vuenginxapp
安裝docker
請參考 https://www.runoob.com/docker/macos-docker-install.html
我這里是mac, 安裝成功之后,在狀態欄有docker圖標
這時命令行輸入docker -v
則說明安裝成功
docker安裝jenkins
題外話:你也可以不通過docker安裝,可以參考我的另一篇文章Mac安裝jenkins
搜索jenkins鏡像
https://hub.docker.com/ 是docker存放image(鏡像)的地方,界面如下:
我們搜索一下要安裝的jenkins鏡像
注意: 雖然第一個是docker官方維護的版本,但它很長時間沒有更新了,是一個過時的版本。所以這里我們要安裝第二個,這個是jenkins維護的
ps:我們也可以通過命令行搜索,命令是docker search jenkins
docker安裝jenkins
新建一個目錄jenkins_home,如我這里是
執行命令
docker run --name jenkins_node -d -v /Users/isaacho/Documents/application/docker/jenkins_home:/var/jenkins_home -p 8081:8080 -p 50000:50000 jenkins/jenkins:lts
注意: 這里不要直接復制上面的命令,需要把/Users/isaacho/Documents/application/docker/jenkins_home替換成你新建的目錄。同樣下面如果出現/Users/isaacho/Documents/application/docker/jenkins_home都需要換成你的目錄
等待安裝過程。。。,如果能打開http://localhost:8081
則說明安裝成功
同時我們可以看到/Users/isaacho/Documents/application/docker/jenkins_home目錄下生成了很多文件
命令解釋:
--name jenkins_node 表示你的容器名字叫jenkins_node
-d 表示在后台運行
-v /Users/isaacho/Documents/application/docker/jenkins_home:/var/jenkins_home 表示把我們新建的jenkins_home目錄映射到容器的/var/jenkins_home目錄
-p 就是端口映射
配置jenkins
瀏覽器打開http://localhost:8081
,界面如下:
我們通過以下命令獲取管理員密碼
cat /Users/isaacho/Documents/application/docker/jenkins_home/secrets/initialAdminPassword
點擊繼續
選擇推薦的插件,安裝插件,然后等待。。。
創建管理員用戶
點擊保存並完成
點擊開始使用jenkins
安裝ssh插件
點擊系統管理
搜索
Publish Over SSH
,並安裝
配置ssh
系統管理=》configure system =》拉到最下面
點擊 Test Configuration,顯示success則說明配置成功,點擊保存
如果不成功,說明我們的電腦沒有開啟遠程登錄
解決方案:
選擇系統偏好設置->選擇共享->點擊遠程登錄
上面的hostname即你這里的IP地址
安裝node插件
node插件在跑node項目時需要使用,這里先安裝好
點擊系統管理
等待安裝好
選擇安裝nodejs版本
准備一個vue項目
項目已經上傳到github
vue cli創建vue項目
我們用vue-cli3直接創建一個vue項目
注意: 這里需要你的node版本大於8.9 或更高版本
vue create vueclidemoapp
改寫
修改HelloWorld.vue組件,改寫頁面,並加入axios發送一個請求
import axios from 'axios';
axios.get('/api', {
params: {},
}).then((res) => {
console.log(res);
});
...
界面如下
創建nginx配置文件
關於nginx配置請看前端想要了解的Nginx
在項目根目錄下新建nginx.conf
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
gzip on;
gzip_types text/plain application/javascript text/css;
# 虛擬主機server塊
server {
# 端口
listen 80;
# 匹配請求中的host值
server_name localhost;
# 監聽請求路徑
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
include /etc/nginx/conf.d/*.conf;
}
創建Dockerfile
在項目根目錄下新建Dockerfile
FROM nginx
EXPOSE 80
此時你的目錄結構是這樣
把這個項目上傳到github
這里我就不演示了,我的這個項目的github地址是https://github.com/repototest/vueclidemoapp
jenkins部署vue項目
新建任務
第一個shell命令是build我們的vue項目,會在項目根目錄下生成dist目錄
echo $PATH
node -v
npm -v
npm install
npm run build
第二個shell命令是用來構建docker鏡像和跑docker服務的
docker stop vuenginxapp || true \
&& docker rm vuenginxapp || true \
&& cd /Users/isaacho/Documents/application/docker/jenkins_home/workspace/vueclidemoapp \
&& docker build -t vuenginxapp . \
&& docker run -d -p 8083:80 --name vuenginxapp -v /Users/isaacho/Documents/application/docker/jenkins_home/workspace/vueclidemoapp/dist:/usr/share/nginx/html -v /Users/isaacho/Documents/application/docker/jenkins_home/workspace/vueclidemoapp/nginx.conf:/etc/nginx/nginx.conf vuenginxapp
docker stop vuenginxapp
用於停止vuenginxapp容器
sudo docker rm vuenginxapp
用於刪除vuenginxapp容器
cd /Users/isaacho/Documents/application/docker/jenkins_home/workspace/vueclidemoapp
進入我們的項目目錄,這里需要改成你們自己的目錄,即(yourpath)/jenkins_home/workspace/vueclidemoapp
, yourpath就是上面我們新建jenkins_home目錄時的目錄
docker build -t vuenginxapp .
表示build鏡像,名稱為vuenginxapp
docker run -d -p 8083:80 --name vuenginxapp -v /Users/isaacho/Documents/application/docker/jenkins_home/workspace/vueclidemoapp/dist:/usr/share/nginx/html -v /Users/isaacho/Documents/application/docker/jenkins_home/workspace/vueclidemoapp/nginx.conf:/etc/nginx/nginx.conf vuenginxapp
表示已我們上面的vuenginxapp為鏡像生成容器vuenginxapp
詳細解釋 -d
在后台運行
-p 8083:80
把容器的80端口映射程我們訪問的8083端口,注意80端口是nginx默認的端口號
--name vuenginxapp
容器名稱為vuenginxapp
-v /Users/isaacho/Documents/application/docker/jenkins_home/workspace/vueclidemoapp/dist:/usr/share/nginx/html
把我們生成的dist目錄掛載到容器的/usr/share/nginx/html,/usr/share/nginx/html是nginx默認的http目錄
-v /Users/isaacho/Documents/application/docker/jenkins_home/workspace/vueclidemoapp/nginx.conf:/etc/nginx/nginx.conf
把我們的nginx.conf掛載到容器的/etc/nginx/nginx.conf,/etc/nginx/nginx.conf是nginx默認的配置文件
vuenginxapp
是我們的鏡像名稱
可能遇到的問題
- docker不是一個命令 出現這個問題的原因是,我們用ssh連接mac時,命令行只能使用/usr/bin里的命令,但我們的docker命令是放在/usr/local/bin里的,所以找不到,解決方案是用/usr/local/bin/docker 代替上面的docker
即
/usr/local/bin/docker stop vuenginxapp || true \
&& /usr/local/bin/docker rm vuenginxapp || true \
&& cd /Users/isaacho/Documents/application/docker/jenkins_home/workspace/vueclidemoapp \
&& /usr/local/bin/docker build -t vuenginxapp . \
&& /usr/local/bin/docker run -d -p 8083:80 --name vuenginxapp -v /Users/isaacho/Documents/application/docker/jenkins_home/workspace/vueclidemoapp/dist:/usr/share/nginx/html -v /Users/isaacho/Documents/application/docker/jenkins_home/workspace/vueclidemoapp/nginx.conf:/etc/nginx/nginx.conf vuenginxapp
構建項目
點擊立即構建
等待部署。。。
點擊這個小圓可以看控制台輸出
可以看到我們的項目被拉到(yourpath)/jenkins_home/workspace
下了
訪問http://localhost:8083/
至此我們成功部署了我們的vue項目
可能遇到的問題
- Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
本篇文章由一文多發平台ArtiPub自動發布