切換語言為:簡體
Nginx + Docker + Jenkins 實現前端自動化部署

Nginx + Docker + Jenkins 實現前端自動化部署

  • 爱糖宝
  • 2024-06-08
  • 2094
  • 0
  • 0

在現代前端開發中,自動化部署變得越來越重要。透過使用 Docker、Jenkins 和 Nginx,我們可以實現高效的前端自動化部署。本文將詳細介紹如何使用這三種工具完成一個前端應用的自動化部署過程。

前提條件

  • 已安裝 Docker 和 Docker Compose

  • 已安裝 Jenkins

  • 擁有一個前端專案的程式碼庫(例如 GitHub)

準備工作

伺服器一臺(本系統CentOS 7.3 64位)

安裝docker

1.解除安裝docker的舊版本

[root@VM-4-16-centos ~]# sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine


2. yum安裝gcc相關

[root@VM-4-16-centos ~]# yum -y install gcc
 
[root@VM-4-16-centos ~]# yum -y install gcc c++


3. 安裝軟體包和國內的映象倉庫

分別執行下面的兩條命令

[root@VM-4-16-centos ~]# sudo yum install -y yum-utils
 
[root@VM-4-16-centos ~]# sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo


4. 下載阿里雲倉庫

執行這個步驟是爲了處理後續安裝docker-ce時有些包下不了的問題

[root@VM-4-16-centos ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo


5. 安裝docker引擎

[root@VM-4-16-centos ~]# sudo yum install docker-ce docker-ce-cli containerd.io


6. 啟動docker

[root@VM-4-16-centos ~]# sudo systemctl start docker


7. 檢視docker版本

[root@VM-4-16-centos ~]# docker version


得到的版本資訊如下:

[root@VM-20-11-centos ~]# docker version
Client: Docker Engine - Community
 Version:           26.1.4
 API version:       1.45
 Go version:        go1.21.11
 Git commit:        5650f9b
 Built:             Wed Jun  5 11:32:04 2024
 OS/Arch:           linux/amd64
 Context:           default

Server: Docker Engine - Community
 Engine:
  Version:          26.1.4
  API version:      1.45 (minimum version 1.24)
  Go version:       go1.21.11
  Git commit:       de5c9cf
  Built:            Wed Jun  5 11:31:02 2024
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.6.33
  GitCommit:        d2d58213f83a351ca8f528a95fbd145f5654e957
 runc:
  Version:          1.1.12
  GitCommit:        v1.1.12-0-g51d5e94
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0


8. 騰訊雲配置映象加速源

配置映象加速源分三步

8.1 編輯daemon.json檔案
[root@VM-4-16-centos ~]# vim /etc/docker/daemon.json


8.2 往daemon.json中新增配置
{
   "registry-mirrors": [
       "https://mirror.ccs.tencentyun.com"
  ]
}


8.3 重啟docker
[root@VM-4-16-centos ~]# sudo systemctl restart docker


執行hello-world檢查docker是否啟動成功

[root@VM-4-16-centos ~]# sudo docker run hello-world


執行資訊如下:

Hello from Docker!  # 打出這句話就說明docker已經安裝成功
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/


安裝Git

sudo apt-get update //更新包索引

sudo apt-get install git //安裝git

git --version //驗證


安裝jdk

一、檢查系統是否自帶jdk
java --version


Nginx + Docker + Jenkins 實現前端自動化部署

如果有的話,找到對應的檔案刪除 第一步:先檢視Linux自帶的JDK有幾個,用命令:

Nginx + Docker + Jenkins 實現前端自動化部署

第二步:刪除JDK,執行命令

rpm -qa | grep -i java | xargs -n1 rpm -e --nodeps
#rpm -qa:查詢所安裝的所有rpm包
#grep -i:忽略大小寫
#xargs -n1:表示每次只傳遞一個引數
#rpm -e --nodeps:強制解除安裝軟體


第三步:檢查是否刪除成功

#檢視是否還在即可
rpm -qa | grep -i java
#或者檢視java版本
java -version


二、透過wget下載jdk1.8並解壓

1、進入home資料夾並建立jdk資料夾

cd /home   //進入home資料夾
mkdir jdk  //建立jdk資料夾
cd jdk     //進入jdk資料夾


Nginx + Docker + Jenkins 實現前端自動化部署

2、進入jdk檔案透過wget下載jdk1.8

wget \
--no-check-certificate \
--no-cookies \
--header \
"Cookie: oraclelicense=accept-securebackup-cookie" \
http://download.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u131-linux-x64.tar.gz


3、解壓安裝包

tar xvf jdk-8u131-linux-x64.tar.gz


Nginx + Docker + Jenkins 實現前端自動化部署

三、配置環境變數
vim /etc/profile


Nginx + Docker + Jenkins 實現前端自動化部署

鍵盤輸入i在檔案最後插入以下內容:

export JAVA_HOME=/home/jdk/jdk1.8.0_131
export CLASSPATH=$:CLASSPATH:$JAVA_HOME/lib/
export PATH=$PATH:$JAVA_HOME/bin
//語法解釋
//export JAVA_HOME=你自己解壓的jdk資料夾路徑


Nginx + Docker + Jenkins 實現前端自動化部署

最後輸入source /etc/profile使其生效

三、檢查是否安裝成功

java -version


Nginx + Docker + Jenkins 實現前端自動化部署

安裝Jenkins

1.下載Jenkins

使用下面命令,讓docker拉取映象,

docker pull jenkins/jenkins:2.426.2-lts


注:需要指定版本號,不然拉取的映象版本是比較老的版本

2、建立掛載目錄

建立一個掛載目錄,用於存放jenkins的資料

//建立目錄
mkdir -p /usr/docker/jenkins_data

//授權許可權
chmod 777 jenkins_home


3、啟動Jenkins容器

啟動命令如下:

docker run -d -p 8082:8080 -p 50000:50000 -v /usr/docker/jenkins_data:/var/jenkins_home  -v /etc/localtime:/etc/localtime -v /usr/bin/docker:/usr/bin/docker     -v /var/run/docker.sock:/var/run/docker.sock   --restart=on-failure  -u 0 --name myjenkins jenkins/jenkins:2.426.2-lts


指令解析:

-d :後臺執行容器

-p:埠對映, 左邊是本地埠,右邊是docker容器埠 ,8080是Jenkins Web 介面的工作埠,50000是JNLP(Java Network Launch Protocol)工作埠。這個埠用於 Jenkins 節點和主控節點之間的通訊。

-v :目錄掛載,將主機上的 /usr/docker/jenkins_data 目錄掛載到容器內的 /var/jenkins_home 目錄,用於持久化 Jenkins 的資料。/etc/localtime:/etc/localtime:將本地主機上的時區資訊檔案掛載到容器內的 /etc/localtime 檔案中,確保容器內的時間與主機上的時間一致

-v /usr/bin/docker:/usr/bin/docker: 將主機上的 /usr/bin/docker 檔案掛載到容器中的 /usr/bin/docker,這樣容器內的 Jenkins 可以直接使用宿主機上的 Docker 命令。在使用 GitLab/Jenkins 等 CI 軟體的時候需要使用 Docker 命令來構建映象,需要在容器中使用 Docker 命令;透過將宿主機的 Docker 共享給容器

-v /var/run/docker.sock:/var/run/docker.sock: 將主機上的 Docker socket 檔案掛載到容器中的相同位置,這樣容器內的 Jenkins 可以與宿主機上的 Docker 引擎進行通訊。

–restart=on-failure:設定容器的重啟策略為在容器以非零狀態退出(異常退出)時重啟。

-u 0:將容器內程序的使用者身份設定為 root 使用者,等同於-u root。

–name myjenkins:給容器指定一個名稱為 myjenkins。

4、驗證Jenkins容器是否啟動成功

使用下面命令,檢視jenkins是否已經在執行

docker ps

如果已經執行,會輸出jenkins容器的相關資訊

CONTAINER ID   IMAGE                         COMMAND                   CREATED      STATUS        PORTS                                                                                      NAMES
2949e82cbfe8   jenkins/jenkins:2.426.2-lts   "/usr/bin/tini -- /u…"   6 days ago   Up 24 hours   0.0.0.0:50000->50000/tcp, :::50000->50000/tcp, 0.0.0.0:8082->8080/tcp, :::8082->8080/tcp   myjenkins
5、獲取管理員密碼

我們在進入Jenkins的管理頁面的時候,是需要管理員密碼,所以我們需要獲取管理員密碼

獲取管理員密碼有兩種方式

1、檢視日誌

使用下面命令檢視jenkins的輸出日誌,myjenkins是我們在啟動jenkins時給jenkins指定的容器名

docker logs myjenkins

找到下面這行程式碼,Please use the following password to proceed to installation下面的就是密碼

Please use the following password to proceed to installation:

a90c1533c8824b17bb49ff932229d22d

2、檢視檔案

不看日誌,我們也可以直接檢視/var/jenkins_home/secrets/initialAdminPassword檔案,這個目錄在我們進入jenkins 管理頁面時會看到

6、修改外掛源

Jenkins在安裝外掛時,下載相關外掛包特別慢,我們可以將Jenkins預設的外掛資料來源變更為國內資料來源,然後重啟Jenkins

#進入更新配置目錄

cd {你的Jenkins工作目錄}/updates


使用下面命令替換default.json檔案中指定的源

sed -i 's/http://updates.jenkins-ci.org/download/https://mirrors.tuna.tsinghua.edu.cn/jenkins/g' default.json && sed -i 's/http://www.google.com/https://www.baidu.com/g' default.json

修改下載地址

cd {你的Jenkins工作目錄}/ 找到下面這個檔案 hudson.model.UpdateCenter.xml檔案

 <?xml version='1.1’encoding='UTF-8'?>
    <sites>
        <site>
            <id>default</id>
            <url>https://updates.jenkins.io/update-center.json</url>
        </site>
    </sites>


將url替換為mirror.esuni.jp/jenkins/upd…

<?xml version='1.1encoding='UTF-8'?>
<sites>
    <site>
        <id>default</id>
        <urI>http://mirror.esuni.jp/jenkins/updates/update-center.json</url》
    </site>
</sites>
7、登入web頁面

使用ip:8082,8082就是我們主機對映到容器8080的埠,如果你使用的是其他埠,那麼需要換成其他埠

Nginx + Docker + Jenkins 實現前端自動化部署

輸入密碼之後,就可以安裝外掛,直接選擇安裝推薦的外掛即可

Nginx + Docker + Jenkins 實現前端自動化部署

下載完成,就可以進入jenkins進行操作了

8、外掛推薦

除了推薦外掛之外,下面是一些常用外掛,大家按需安裝

Locale(中文外掛)

Gitlab Plugin (拉取 gitlab 中的原始碼)

Maven Integration(maven構建工具)

Publish Over SSH(遠端推送工具)

Role-based Authorization Strategy(許可權管理)

Deploy to container(自動化部署工程所需要外掛,部署到容器外掛)

git parameter(使用者引數化構建過程裡新增git型別引數)

下載外掛在系統管理—外掛管理的Available plugins Nginx + Docker + Jenkins 實現前端自動化部署

安裝NodeJS

因為我們的Vue專案是基於 NodeJS 來打包構建的,所以需要在 Jenkins 中安裝外掛:

Nginx + Docker + Jenkins 實現前端自動化部署

我這裏已經安裝你們在Available plugins裡面安裝一下

配置nodejs

我們進入Dashboard > 系統管理 > 全域性工具配置

Nginx + Docker + Jenkins 實現前端自動化部署

配置github

我們進入系統配置裡面配置github

Nginx + Docker + Jenkins 實現前端自動化部署

點選新增

Nginx + Docker + Jenkins 實現前端自動化部署

我們去github獲取秘鑰填寫進secret裡面

Nginx + Docker + Jenkins 實現前端自動化部署

點選連線測試出現這個表示配置成功

Nginx + Docker + Jenkins 實現前端自動化部署

點選高階

Nginx + Docker + Jenkins 實現前端自動化部署

將這個url複製到github倉庫裡面進行配置

Nginx + Docker + Jenkins 實現前端自動化部署

點選設定

Nginx + Docker + Jenkins 實現前端自動化部署

點選Webhooks,在這裏貼上我們剛剛複製的url地址

Nginx + Docker + Jenkins 實現前端自動化部署

專案Docker 環境配置

首先,為前端專案建立一個 Dockerfile,用於打包前端專案:

FROM nginx
COPY dist/ /usr/share/nginx/html/
COPY nginx/default.conf /etc/nginx/conf.d/default.conf

建立一個 nginx/default.conf 檔案,用於 Nginx 配置:

server {
    listen       80;
    server_name  localhost;

    #charset koi8-r;
    access_log  /var/log/nginx/host.access.log  main;
    error_log  /var/log/nginx/error.log  error;

    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;
    }
}

建立任務

Nginx + Docker + Jenkins 實現前端自動化部署

輸入自己的github地址

Nginx + Docker + Jenkins 實現前端自動化部署

原始碼管理,輸入git地址,並新增github賬號密碼

Nginx + Docker + Jenkins 實現前端自動化部署

這裏的分支要跟你git專案的分支一樣

Nginx + Docker + Jenkins 實現前端自動化部署

觸發器選擇GitHub hook trigger for GITScm polling

Nginx + Docker + Jenkins 實現前端自動化部署

構建環境選擇node

Nginx + Docker + Jenkins 實現前端自動化部署

新增構建步驟

Nginx + Docker + Jenkins 實現前端自動化部署

輸入命令

npm install
npm run build
rm -rf /home/nginx/html/*
docker stop vueApp
docker rm vueApp
docker build -t vuenginxcontainer .
docker image ls | grep vuenginxcontainer
docker run \
-p 3000:80 \
-d --name vueApp \
vuenginxcontainer


Nginx + Docker + Jenkins 實現前端自動化部署

Nginx + Docker + Jenkins 實現前端自動化部署

選擇報錯我們就配置好了,當我們在git push 就會自動構建

Nginx + Docker + Jenkins 實現前端自動化部署

這裏就開始構建

Nginx + Docker + Jenkins 實現前端自動化部署

訪問我們配置的容器地址,就可以看到已經好了

Nginx + Docker + Jenkins 實現前端自動化部署

部署流程

  1. 提交程式碼:開發者將程式碼提交到 GitHub。

  2. 觸發 Jenkins 構建:Jenkins 透過 Webhook 或定時觸發構建。

  3. 拉取程式碼並構建映象:Jenkins 拉取最新的程式碼,使用 Dockerfile 構建 Docker 映象。

  4. 推送映象:將構建的 Docker 映象推送到 Docker Hub。

  5. 部署映象:在伺服器上執行最新的 Docker 映象,透過 Nginx 反向代理訪問前端應用。

總結

透過以上步驟,我們實現了一個完整的前端自動化部署流程。從程式碼提交到最終部署,全部由 Jenkins 自動完成,大大提高了部署效率和程式碼釋出的可靠性。希望這篇文章能幫助你搭建自己的前端自動化部署流程。

0則評論

您的電子郵件等資訊不會被公開,以下所有項目均必填

OK! You can skip this field.