<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          大廠是如何自動(dòng)化部署Web應(yīng)用的?(收藏?。?/h1>

          共 6859字,需瀏覽 14分鐘

           ·

          2020-11-01 17:20

          DevUI是一支兼具設(shè)計(jì)視角和工程視角的團(tuán)隊(duì),服務(wù)于華為云DevCloud平臺(tái)和華為內(nèi)部數(shù)個(gè)中后臺(tái)系統(tǒng),服務(wù)于設(shè)計(jì)師和前端工程師。

          官方網(wǎng)站:devui.design

          Ng組件庫:ng-devui(歡迎Star)

          官方交流:添加DevUI小助手(devui-official)

          DevUIHelper插件:DevUIHelper-LSP(歡迎Star)

          原文:https://segmentfault.com/a/1190000037612735

          前言

          本文以DevUI組件庫網(wǎng)站為例,介紹如何自動(dòng)化部署一個(gè)前端應(yīng)用。

          本文可以認(rèn)為是《手把手教你搭建自己的Angular組件庫》的續(xù)集。

          1 搭建服務(wù)器環(huán)境

          本機(jī)開發(fā)完代碼,并push到遠(yuǎn)程代碼倉庫,還需要部署到服務(wù)器上,用戶才能訪問到。

          因此為了部署你的應(yīng)用,第一步你需要購買一臺(tái)服務(wù)器,為了節(jié)省成本,一般都會(huì)購買按需使用的云服務(wù)器,如何申請?jiān)品?wù)器就不介紹了,下面介紹如何在Linux服務(wù)器搭建Nginx服務(wù)。

          1.1 安裝Nginx

          Web應(yīng)用通常都會(huì)使用Nginx作為反向代理。

          為了讓用戶可以訪問我們的應(yīng)用,需要在服務(wù)器安裝Nginx應(yīng)用。

          我們使用源碼編譯方式安裝最新版本的Nginx,主要分成以下步驟:

          • 下載
          • 解壓
          • 配置
          • 編譯
          • 安裝

          1.1.1 下載Nginx源碼

          先在Nginx官網(wǎng)下載頁找到Linux版本的Nginx源碼包地址,然后使用wget命令下載Nginx源碼安裝包。

          wget http://nginx.org/download/nginx-1.18.0.tar.gz

          1.1.2 解壓

          使用tar命令進(jìn)行解壓。

          tar -zxvf nginx-1.18.0.tar.gz

          1.1.3 配置

          先進(jìn)入nginx源碼的根目錄,然后執(zhí)行configure配置腳本,這里只配置了nginx的安裝目錄。

          cd nginx-1.18.0
          ./configure --prefix=/usr/local/nginx

          執(zhí)行完發(fā)現(xiàn)報(bào)錯(cuò)了,原來是缺少依賴庫。

          [root@ecs-kagol nginx-1.18.0]# ./configure --prefix=/usr/local/nginx
          checking for OS
          + Linux 3.10.0-862.14.1.5.h428.eulerosv2r7.x86_64 x86_64
          checking for C compiler ... found
          + using GNU C compiler
          + gcc version: 4.8.5 20150623 (EulerOS 4.8.5-28) (GCC)
          checking for gcc -pipe switch ... found
          ...
          checking for PCRE library in /usr/local/ ... not found
          checking for PCRE library in /usr/include/pcre/ ... not found
          checking for PCRE library in /usr/pkg/ ... not found
          checking for PCRE library in /opt/local/ ... not found

          ./configure: error: the HTTP rewrite module requires the PCRE library.
          You can either disable the module by using --without-http_rewrite_module
          option, or install the PCRE library into the system, or build the PCRE library
          statically from the source with nginx by using --with-pcre= option.

          主要需要安裝pcre/zlib/openssl三個(gè)依賴庫,我們使用yum包管理工具(類似Node的npm包管理工具)來安裝。

          yum -y install pcre-devel zlib-devel openssl-devel

          安裝完依賴庫之后再次執(zhí)行configure腳本,Nginx配置成功,配置結(jié)果如下:

          ...
          checking for getaddrinfo() ... found
          checking for PCRE library ... found
          checking for PCRE JIT support ... found
          checking for zlib library ... found
          creating objs/Makefile

          Configuration summary
          + using system PCRE library
          + OpenSSL library is not used
          + using system zlib library

          nginx path prefix: "/usr/local/nginx"
          nginx binary file: "/usr/local/nginx/sbin/nginx"
          nginx modules path: "/usr/local/nginx/modules"
          nginx configuration prefix: "/usr/local/nginx/conf"
          nginx configuration file: "/usr/local/nginx/conf/nginx.conf"
          nginx pid file: "/usr/local/nginx/logs/nginx.pid"
          nginx error log file: "/usr/local/nginx/logs/error.log"
          nginx http access log file: "/usr/local/nginx/logs/access.log"
          nginx http client request body temporary files: "client_body_temp"
          nginx http proxy temporary files: "proxy_temp"
          nginx http fastcgi temporary files: "fastcgi_temp"
          nginx http uwsgi temporary files: "uwsgi_temp"
          nginx http scgi temporary files: "scgi_temp"

          我們注意到執(zhí)行完configure配置腳本之后,生成了一個(gè)Makefile文件,該文件就是用來編譯Nginx源碼的。

          1.1.4 編譯

          相比配置,編譯的步驟就簡單多了,只需要執(zhí)行make命令即可。

          make

          1.1.5 安裝

          編譯完之后就是安裝了,這一步才會(huì)真正在/usr/local/nginx目錄下生成相應(yīng)的文件。

          make install

          安裝完之后,在/usr/local/nginx目錄下已經(jīng)生成了運(yùn)行Nginx應(yīng)用需要的所有文件。

          1.1.6 運(yùn)行啟動(dòng)Nginx

          執(zhí)行nginx目錄下的sbin/nginx就可以直接啟動(dòng)Nginx啦。

          /usr/local/nginx/sbin/nginx

          1.1.7 驗(yàn)證是否啟動(dòng)成功

          在本機(jī)瀏覽器中輸入服務(wù)器的公網(wǎng)IP地址,即可訪問Nginx應(yīng)用。

          這里顯示了Nginx的歡迎頁面,等我們部署好自己的Web應(yīng)用之后,這個(gè)網(wǎng)頁將顯示我們自己的網(wǎng)站首頁。

          2 手工部署流程

          我們在本機(jī)開發(fā)完DevUI網(wǎng)站的代碼之后,執(zhí)行npn run build,這時(shí)將在dist目錄得到DevUI網(wǎng)站的所有靜態(tài)資源文件,可以先在本地用anywhere看下效果。

          為了將其部署到服務(wù)器,并通過Nginx服務(wù)器訪問,我們需要將這些文件上傳到服務(wù)器的nginx目錄,一個(gè)一個(gè)文件傳肯定不現(xiàn)實(shí),需要將其壓縮打包,然后上傳到服務(wù)器,最后解壓到nginx的html目錄就算部署完成。

          Step 1: 壓縮打包 tar

          Step 2: 解壓部署 deploy

          2.1 壓縮打包

          npm run build構(gòu)建出來的靜態(tài)資源都存放在dist目錄下,只需要執(zhí)行以下命令即可生成tar壓縮包:

          tar czvf devui.tar.gz ./dist

          2.2 解壓部署

          登錄服務(wù)器,使用rz命令將上一步生成的tar包上傳到Linux服務(wù)器,然后使用tar命令解壓到nginx的html目錄即可完成部署。

          tar zxvf devui.tar.gz

          如果每次開發(fā)完都需要手動(dòng)執(zhí)行以上步驟,將會(huì)非常麻煩,并且很容易出錯(cuò)。

          為什么不將其自動(dòng)化呢?

          3 使用DevCloud流水線實(shí)現(xiàn)自動(dòng)部署

          DevCloud是集華為研發(fā)實(shí)踐、前沿研發(fā)理念、先進(jìn)研發(fā)工具為一體的軟件開發(fā)平臺(tái),為了實(shí)現(xiàn)Web應(yīng)用的自動(dòng)化部署,我們主要需要使用DevCloud的流水線/編譯構(gòu)建/發(fā)布/部署4個(gè)服務(wù)。

          主要分成以下4個(gè)步驟:

          1. 創(chuàng)建DevCloud項(xiàng)目
          2. 創(chuàng)建流水線
          3. 創(chuàng)建構(gòu)建任務(wù)
          4. 創(chuàng)建部署任務(wù)

          3.1 創(chuàng)建DevCloud項(xiàng)目

          由于DevCloud所有服務(wù)都是通過項(xiàng)目承載的,因此需要先創(chuàng)建下項(xiàng)目,這里創(chuàng)建一個(gè)看板項(xiàng)目。

          先進(jìn)入DevCloud首頁,按以下步驟即可創(chuàng)建一個(gè)看板項(xiàng)目:

          1. 點(diǎn)擊右上角的創(chuàng)建項(xiàng)目
          2. 選擇看板項(xiàng)目
          3. 輸入項(xiàng)目名稱
          4. 確定

          項(xiàng)目創(chuàng)建成功之后直接進(jìn)入該項(xiàng)目首頁,點(diǎn)擊頭部菜單構(gòu)建&發(fā)布下的流水線按鈕即可進(jìn)行流水線首頁。

          3.2 創(chuàng)建流水線

          在流水線首頁的右上角有一個(gè)創(chuàng)建流水線的按鈕,點(diǎn)擊即可進(jìn)入流水線的創(chuàng)建流程。

          創(chuàng)建一條流水線主要分成以下步驟:

          • 輸入流水線名稱
          • 選擇模板,這里我們選擇空模板
          • 選擇代碼源,直接只用Github代碼倉庫即可
          • 自定義工作流

          選擇代碼源

          為了選擇Github代碼倉庫的源,我們需要新增一個(gè)服務(wù)擴(kuò)展點(diǎn),獲得Github的授權(quán),這樣DevCloud流水線這邊才可以拉取Github的代碼,進(jìn)行構(gòu)建、部署等步驟。

          新增擴(kuò)展點(diǎn)的步驟也很簡單:

          • 輸入擴(kuò)展點(diǎn)名稱
          • 進(jìn)行OAuth授權(quán)

          有了擴(kuò)展點(diǎn),就可以選擇你的Github倉庫作為代碼源啦。

          選完代碼源就可以創(chuàng)建你的流水線啦。

          可以新創(chuàng)建的流水線包含3個(gè)階段,第一個(gè)階段關(guān)聯(lián)了一個(gè)Github的代碼倉,第二個(gè)階段是一個(gè)空的構(gòu)建階段,里面什么任務(wù)也沒有,第三個(gè)階段是一個(gè)不可編輯的發(fā)布倉庫階段。

          這個(gè)流水線目前什么都做不了,我們需要往里面添加任務(wù)才能完成網(wǎng)站的自動(dòng)化部署。

          3.3 創(chuàng)建構(gòu)建任務(wù)

          回顧下之前的手工部署步驟:

          1. 構(gòu)建源代碼
          2. 壓縮源代碼
          3. 上傳軟件包到服務(wù)器
          4. 解壓軟件包到Nginx目錄

          因此我們首先需要在流水線中添加一個(gè)構(gòu)建任務(wù):

          1. 在構(gòu)建階段添加一個(gè)構(gòu)建類型的任務(wù)
          2. 創(chuàng)建一個(gè)構(gòu)建任務(wù)
          3. 在流水線選擇上一步創(chuàng)建好的流水線

          3.3.1 在構(gòu)建階段添加一個(gè)構(gòu)建類型的任務(wù)

          在構(gòu)建階段添加一個(gè)任務(wù),然后在側(cè)滑中選擇構(gòu)建類型,這是該類型下是沒有構(gòu)建任務(wù)的,因此沒法選擇,需要先創(chuàng)建構(gòu)建任務(wù)。

          3.3.2 創(chuàng)建一個(gè)構(gòu)建任務(wù)

          在選擇需要調(diào)度的任務(wù)中點(diǎn)擊創(chuàng)建按鈕,進(jìn)入新建構(gòu)建任務(wù)的頁面,按照指引創(chuàng)建一個(gè)構(gòu)建任務(wù):

          1. 輸入構(gòu)建任務(wù)名稱
          2. 選擇我們之前創(chuàng)建的Entpoint實(shí)例,以及該示例下的Github倉庫
          3. 不使用模板,直接創(chuàng)建
          4. 添加Npm構(gòu)建和上傳軟件包道發(fā)布庫這兩個(gè)構(gòu)建步驟(關(guān)鍵)
          5. 配置構(gòu)建參數(shù)
          Npm構(gòu)建

          該步驟直接使用默認(rèn)的構(gòu)建腳本命令,只需要增加打tar包的命令即可:

          ...

          npm install # 安裝依賴庫

          npm run build # 普通的NG CLI生產(chǎn)包構(gòu)建命令

          npm run tar # 新增

          tar命令:

          "tar": "node scripts/tar.js",

          tar.js

          const fs = require('fs');
          const tar = require('tar');

          fs.stat('./result', (error, stats) => {
          if (error) {
          fs.mkdirSync('./result'); // 不存在result目錄則創(chuàng)建一個(gè)空的
          }

          tar.c({ gzip: true }, ['dist']) // 將dist目錄下的文件全部打包
          .pipe(fs.createWriteStream('./result/devui.tar.gz')); // 將生成的tar包(devui.tar.gz)放到result目錄下
          });

          上傳軟件包到發(fā)布庫

          上一個(gè)Npm構(gòu)建步驟已經(jīng)將壓縮包創(chuàng)建好了,這個(gè)任務(wù)的目的是將這個(gè)tar包上傳到發(fā)布庫,也就是之前流水線中的第3個(gè)階段,方便部署時(shí)下載tar包到目標(biāo)服務(wù)器。

          該步驟主要需要填寫構(gòu)建包路徑:

          ./result/devui.tar.gz

          發(fā)布版本號(hào)和包名不要寫死,從部署參數(shù)里拿,格式如下:

          ${releaseVersion}

          其中releaseVersion就是下一步需要配置的構(gòu)建參數(shù)。

          配置構(gòu)建參數(shù)

          codeBranch是默認(rèn)的參數(shù),我們需要增加releaseVersion和serviceName兩個(gè)構(gòu)建參數(shù),一個(gè)用于每次構(gòu)建時(shí)的版本號(hào),另一個(gè)就是服務(wù)名。

          3.3.3 在流水線選擇上一步創(chuàng)建好的流水線

          回到流水線,就可以選擇上一步創(chuàng)建好的流水線,保存即可。

          至此構(gòu)建的步驟已經(jīng)搞定了,我們可以跑一下試試。

          跑完流水線我們就能在發(fā)布倉庫看到我們的tar構(gòu)建包:

          有了構(gòu)建包我們就可以拿它去服務(wù)器部署啦,當(dāng)然我們肯定不會(huì)選擇手工的方式部署,而是在流水線中創(chuàng)建一個(gè)部署任務(wù),讓所有過程自動(dòng)化進(jìn)行。

          3.4 創(chuàng)建部署任務(wù)

          在流水線中添加部署任務(wù)和添加構(gòu)建任務(wù)差不多,只需要以下3步即可:

          1. 添加一個(gè)新的階段
          2. 在該階段中添加一個(gè)部署類型的任務(wù)
          3. 創(chuàng)建一個(gè)部署任務(wù)(關(guān)鍵)
          4. 在步驟2中選擇步驟3中創(chuàng)建的部署任務(wù)

          創(chuàng)建一個(gè)部署任務(wù)

          和創(chuàng)建構(gòu)建任務(wù)類似:

          1. 輸入部署任務(wù)名稱
          2. 選擇空白模板,直接創(chuàng)建
          3. 添加選擇部署來源和執(zhí)行shell命令這兩個(gè)構(gòu)建步驟(關(guān)鍵)
          4. 配置部署參數(shù)
          選擇部署來源

          關(guān)鍵是需要選擇主機(jī)組,填寫軟件包部署目錄

          軟件包就是之前發(fā)布倉庫的軟件包,直接從/devui/${releaseVersion}取即可,其中${releaseVersion}是部署參數(shù),和之前的構(gòu)建參數(shù)類似。

          部署目錄是要將tar壓縮包上傳到目標(biāo)機(jī)器中的目錄,我們傳到/devui目錄中。

          主機(jī)組需要新建,選擇主機(jī)組旁邊的新建按鈕,進(jìn)入創(chuàng)建主機(jī)組頁面,只需要以下步驟即可創(chuàng)建一個(gè)主機(jī)組:

          1. 填寫主機(jī)組名稱
          2. 添加主機(jī)(之前申請的ECS彈性云主機(jī))

          添加主機(jī)需要填寫的信息:

          1. 主機(jī)名
          2. 主機(jī)IP地址
          3. 用戶名(root)
          4. 密碼
          5. 端口號(hào)(22)
          執(zhí)行shell命令

          執(zhí)行shell命令是當(dāng)你已經(jīng)把tar軟件包上傳到目標(biāo)服務(wù)器之后,希望執(zhí)行的shell命令,我們當(dāng)然是希望將tar包解壓出來嘍。

          執(zhí)行以下shell即可:

          rm -rf /usr/local/nginx/html/* # 刪除之前部署過的靜態(tài)資源
          tar zxvf /devui/${serviceName}.tar.gz -C /usr/local/nginx/html # 解壓tar包到nginx的html目錄
          mv /usr/local/nginx/html/dist/* /usr/local/nginx/html/
          配置部署參數(shù)

          這里的部署參數(shù)和構(gòu)建參數(shù)的配置方式是一樣的,不再贅述。

          3.5 定時(shí)任務(wù)

          搭建完流水線,我們可以配置一個(gè)定時(shí)任務(wù),每天或每周自動(dòng)用制定分支跑流水線,完全不用人工干預(yù)。為了保障版本質(zhì)量,我們也可以在配置灰度部署策略,添加撥測任務(wù),保障每一次部署現(xiàn)網(wǎng)都不出問題。限于篇幅就不一一介紹了,感興趣的小伙伴可以關(guān)注DevCloud官網(wǎng),里面詳細(xì)地介紹了從需求規(guī)劃到研發(fā)、測試、運(yùn)維整套DevOps流程的玩法。

          4 小結(jié)

          本文詳細(xì)地介紹如何將一個(gè)網(wǎng)站的Github倉庫源碼自動(dòng)化部署到服務(wù)器。先介紹申請服務(wù)器和搭建服務(wù)器環(huán)境,重點(diǎn)介紹在Linux服務(wù)器搭建Nginx服務(wù)的步驟;然后簡單介紹了手動(dòng)部署流程;最后詳細(xì)介紹了如何利用DevCloud流水線工具,實(shí)現(xiàn)自動(dòng)化部署。

          最后



          如果你覺得這篇內(nèi)容對你挺有啟發(fā),我想邀請你幫我三個(gè)小忙:

          1. 點(diǎn)個(gè)「在看」,讓更多的人也能看到這篇內(nèi)容(喜歡不點(diǎn)在看,都是耍流氓 -_-)

          2. 歡迎加我微信「qianyu443033099」拉你進(jìn)技術(shù)群,長期交流學(xué)習(xí)...

          3. 關(guān)注公眾號(hào)「前端下午茶」,持續(xù)為你推送精選好文,也可以加我為好友,隨時(shí)聊騷。


          點(diǎn)個(gè)在看支持我吧,轉(zhuǎn)發(fā)就更好了


          瀏覽 51
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)

          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  av无码喷水 | 亚洲中文幕在线观看 | 国产一区二区三区皇色网站 | 亚洲一区中文字幕在线观看 | 激情五月天丁香 |