jenkins+docker+nginx+nodejs持續集成部署vue前端項目

最近比較閑,嘗試瞭一下docker部署業務測試環境的前端vue項目,作此記錄

這裡我的環境是Jenkins+docker+harbor+nginx
部署,但是由於此項目以節點形式加入jenkins,構建和部署都在一臺,所以沒有用到harbor,但是生產環境可能部署和構建不在一臺,會需要先推送到harbor,也有詳細步驟。

前提:

1安裝好瞭jenkins, 2項目服務器以node形式加入Jenkins, 3項目節點安裝docker 4代碼裡有包含Dockerfile
以及 nginx的相關配置文件

思路:

通過Jenkins拉去git倉庫代碼,利用nodejs打包編譯vue資源,利用Dockerfile
構建業務鏡像,提前準備好nginx的配置文件和自定義文件,上過上傳harbor供其他節點下載使用。

步驟:

創建自由風格的jobs(用流水線也可以),這裡步驟比較簡單就不寫流水線瞭

在這裡插入圖片描述

general處選擇參數化構建 ,文本參數來定義每次構建的版本號

在這裡插入圖片描述

構建環境這裡需要選擇全局工具裡配置的nodejs,用於編譯打包vue

在這裡插入圖片描述

配置nodejs工具

(如下圖),自動安裝需要的版本即可。

在這裡插入圖片描述

​​構建處選擇執行shell

在這裡插入圖片描述

#!/bin/bash
pwd
npm install
npm run build -- prerelease #編譯項目
echo "npm finish "
echo $version
docker build -t nginx-agent:$version .
#部署和構建是一臺
docker images 
docker stop nginx-agent
docker rm nginx-test
docker run --name nginx-agent -p 8001:80 -d nginx-agent:$version
#部署和構建不在一臺,或者多臺構建,harbor
# docker tag nginx-agent:$version 192.168.80.133:8000/test/nginx-agent:$version
# docker push 192.168.80.133:8000/test/nginx-agent:$version
# ssh 192.168.80.** "docker pull 192.168.80.133:8000/test/nginx-agent:$version"
# ssh 192.168.80.** "docker stop nginx-agent;docker rm nginx-agent;docker start "
# ssh 192.168.80.** "docker run --name nginx-test -p 8001:80 -d 192.168.80.133:8000/test/nginx:$version"

我的環境是構建和部署都是在一臺服務器,所以這裡我沒有用harbor,註釋部分的代碼段就是一個簡單的部署在另外服務器,

保存job,準備開始構建!

git代碼文件目錄如下

這裡查看三個文件的內容
Dockerfile : 用於構建docker鏡像的文件
nginx.conf :用於替換鏡像內默認的主配置文件
default.conf :用於替換鏡像內默認的用戶配置文件

在這裡插入圖片描述

Dockerfile的文件內容

root@jenkins test-agent]# cat Dockerfile 
FROM nginx
COPY ./dist/index.html /app/
COPY ./dist/static/js /app/static/js
COPY ./dist/static/css /app/static/css
COPY ./dist/static/fonts /app/static/fonts
COPY ./dist/static/img /app/static/img
COPY ./nginx.conf /etc/nginx/conf/nginx.conf
COPY ./default.conf /etc/nginx/conf.d/default.conf
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]

註意

這裡如果你的前端文件也是區分目錄的話,需要一個個單獨步驟去復制,不然的話,docker的copy命令隻會復制文件不會連同目錄一起復制,會導致你鏡像內的目錄結構不一樣,
nginx鏡像默認是有兩個文件,一個主配置文件nginx.conf 一個自定義配置文件default.conf
所以一般我們可以提前準備兩個對應的配置文件,主配置文件一般多數項目可以公用,自定義文件可以根據具體的前端項目需求來編寫,可能會涉及到server_name 和後端的轉發,

nginx.conf主配置文件的內容

[root@jenkins docker]# cat nginx.conf 
user  nginx;
worker_processes  auto;
error_log  /var/log/nginx/error.log notice;
pid        /var/run/nginx.pid;
events {
    worker_connections  65535;
}
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;
    include /etc/nginx/conf.d/*.conf;
}

default.conf自定義配置文件如下

[root@jenkins docker]# cat default.conf 
server {
        listen  80;
        server_name localhost; #如果有需要監聽的域名,這裡也需要修改
        location / {
                root  /app;
                try_files $uri $uri/ /index.html;
                index  index.html index.htm;
                }
        location /api {
			if ($request_method = 'OPTIONS') {
                        return 204;
                }
                rewrite  ^/api/(.*)$ /$1 break;
                #後端接口域名,這裡需要根據你自己的具體後端來填寫
                proxy_pass https://*****.com/;
        }}

一切準備就緒,開始構建查看效果

在這裡插入圖片描述

構建輸出如下:

在這裡插入圖片描述

看輸出已經成功,登錄服務器查看是否有對應的鏡像和容器

[root@jenkins docker]# docker images
REPOSITORY                       TAG          IMAGE ID       CREATED         SI
nginx-agent                      V4           af8b50d515f5   2 minutes ago   150MB
192.168.80.133:8000/test/nginx   V3           19186858893b   22 hours ago    141MB
[root@jenkins docker]# docker ps 
CONTAINER ID   IMAGE                                COMMAND                  CREATED         STATUS                  PORTS                                                  NAMES
8b3e8ae77b88   nginx-agent:V4                       "/docker-entrypoint.…"   9 seconds ago   Up 8 seconds            0.0.0.0:8001->80/tcp, :::8001->80/tcp                  nginx-agent

容器已經成功啟動,輸入地址訪問看是否正常

在這裡插入圖片描述

訪問正常,搞定!

到此這篇關於jenkins+docker+nginx+nodejs持續集成部署vue前端項目的文章就介紹到這瞭,更多相關jenkins docker nginx node部署vue內容請搜索LevelAH以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持LevelAH!

推薦閱讀: