[手把手系列之] Jenkins+Docker自動化部署vue項目


介紹

本系列主要介紹如何自動化部署我們的前端和后端項目

本篇主要介紹如何自動化部署vue項目

下篇講如何自動化部署nodejs項目

我這里是mac os,如果你用linux就不會碰到很多下面碰到的問題了。

相關應用

整個流程

首先我們把我們的電腦想象成一台服務器,當然如果你有服務器,也可以直接在服務器上,執行以下操作

我這里方便起見,就直接把我的電腦(mac)當做一台服務器,事實證明這里面很多坑!!!

注意區分以下本地和服務器的區別,其實我們這里都是我們的電腦

  1. 我們在服務器(這里是我們的mac)上安裝docker

  2. 我們在服務器(這里是我們的mac)上用docker安裝了jenkins

  3. 我們本地新建一個vue項目,並推到github

  4. 我們本地訪問服務器上的jenkins,即打開網址http://localhost:8081 (如果是服務器這里localhost換成你服務器的ip)

  5. 我們用jenkins拉了github的項目到jenkins的安裝目錄里的workspace/目錄

  6. jenkins使用執行shell跑了命令

npm install
npm run build

這里我們需要給jenkins安裝nodejs插件

  1. 我們用jenkins ssh連接到我們的服務器

這里我們需要安裝Publish Over SSH插件,並配置好服務器

  1. 在服務器(這里是我們的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自動發布


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM