摘要:這兩類密鑰文件需要配置在中,在里進行的操作。在找到想要重新部署的版本,點擊,在新頁面中選擇為。其他若是想要進入交互,可以通過以下命令
背景
公司的前端項目部署方式比較簡單,整個過程基本上是手動的;
目標通過工具實現以下幾個任務:
編譯、部署自動化;
選擇指定版本進行回滾;
區分不同的分支(環境);
技術方案選用 jenkins 作為部署工具;也便于后續 CI 的接入;
使用 docker 進行編譯,確保每次編譯的環境的穩定;
步驟 步驟一:搭建 Jenkins搭建 Jenkins 有很多方案,這里選擇使用 docker 搭建。
docker-compose.yml 的內容如下:
version: "3" services: fejenkins: user: root image: jenkinsci/blueocean ports: - "8080:8080" - "50000:50000" volumes: - /data/jenkins_home:/var/jenkins_home - /data/nm_cache:/var/nm_cache - /var/run/docker.sock:/var/run/docker.sock
通過 docker-compose up 命令啟動;啟動后通過初始密碼進行第一個用戶的創建和 Jenkins 初始化的一些列操作,初始密碼會打印在 jenkins docker 啟動命令行的輸出中,注意查看。
當然也可以不使用 docker-compose:
docker run --rm -u root -v /data/jenkins_home:/var/jenkins_home -v /data/nm_cache:/var/nm_cache -v /var/run/docker.sock:/var/run/docker.sock -p 8080:8080 -p 50000:50000 jenkinsci/blueocean
稍做解釋:
/data/jenkins_home:/var/jenkins_home /var/jenkins_home 是 jenkinsci image 的默認數據存放路徑,這里將路徑映射到宿主機的指定文件夾;
/data/nm_cache:/var/nm_cache nm_cache 涵義是 node_modules cache,顧名思義,這里是想對編譯所需的 node_modules 做緩存,將緩存文件夾也映射到宿主機;
/var/run/docker.sock:/var/run/docker.sock 這里是將宿主機運行 docker 后產生的 sock 文件映射到了 jenkins container 中。這樣,jenkins 中使用 docker 進行編譯時,其實是使用宿主機的 docker 來運行的,而不是在 docker container 中又啟動了 docker。這里稍微有點繞,若是暫時看不明白,需要找一些深入介紹 docker 的文章閱讀;
步驟二:配置 Jenkins通過 Jenkins 進行 git 操作需要對應 git repo 的權限,這里需要用到有 git repo 權限的密鑰文件。同樣,通過 Jenkins 將編譯產物 scp 到服務器上的時候,也需要服務器的密鑰文件。
這兩類密鑰文件需要配置在 Jenkins 中,在:Jenkins > Credentials > System > Global credentials (unrestricted) 里進行 Add Credentials 的操作。
Jenkins > New Item,然后選擇 Pipeline,在下面的 Pipeline 配置區域的 Definition 中選擇 Pipeline script,Script 如下:
pipeline { environment { SERVER_IP_1 = "11.22.33.44" SERVER_CREDENTIALSID = "abcd1234-abcd-abcd-abcd-abcd1234abcd" SERVER_DEPLOY_DIR = "/your/www/path/" CACHE_DIR = "/var/nm_cache/your_project_name/" GIT_URL = "git@github.com:example/example.git" GIT_BRANCH = "master" GIT_CREDENTIALSID = "abcd1234-abcd-abcd-abcd-abcd1234abcd" } agent none stages { stage("Checkout code") { agent any steps { git ( branch: "${GIT_BRANCH}", credentialsId: "${GIT_CREDENTIALSID}", url: "${GIT_URL}", changelog: true ) sh """ ls -al cache_dir="${CACHE_DIR}" cache_nm="${CACHE_DIR}node_modules" cache_lock="${CACHE_DIR}yarn.lock" if [ ! -d "$cache_dir" ]; then mkdir ${cache_dir}; fi if [ ! -d "$cache_nm" ]; then mkdir ${cache_nm}; fi if [ -d "$cache_nm" ]; then ln -sf ${cache_nm} ./; fi if [ -f "$cache_lock" ]; then mv -n ${cache_lock} .; fi ls -al """ } } stage("Build") { agent { docker { image "node:8-alpine" args "" } } steps { sh """ npm config set registry https://registry.npm.taobao.org yarn install yarn build tar -cvf build.tar build ls -al mv ./yarn.lock ${CACHE_DIR} rm -rf ./node_modules ls -al """ archiveArtifacts artifacts: "build.tar", fingerprint: true } } stage("Deploy") { agent any steps { unarchive mapping: ["build.tar": "build.tar"] echo "--- Deploy ---" sshagent(["${SERVER_CREDENTIALSID}"]) { sh "scp -o StrictHostKeyChecking=no build.tar root@${SERVER_IP_1}:${SERVER_DEPLOY_DIR}" sh "ssh -o StrictHostKeyChecking=no root@${SERVER_IP_1} "rm -rf ${SERVER_DEPLOY_DIR}build; tar -xvf ${SERVER_DEPLOY_DIR}build.tar -C ${SERVER_DEPLOY_DIR}"" } } } } }
稍做解釋:
這個部署腳本分為三個步驟:
Checkout code(在指定 git 倉庫通過指定證書文件獲取代碼)
Build(通過指定命令進行編譯,將編譯后的產物存檔)
Deploy(通過指定命令部署)
在 Build 階段前后,我們各做了一些工作,以求每次部署可以復用 node_modules,因為下載 node_modules 的時間可能很長,而并不是每次都會修改 package.json,所以其實 node_modules 大概率可以復用;
編譯前:
看指定 node_modules 緩存文件夾是否存在,不存在則新建該文件夾;
看緩存文件夾中是否有 node_modules 文件夾,如果沒有則新建該文件夾;并且將該文件夾軟連接到當前目錄;
看緩存文件夾中是否有 yarn.lock 文件,如果有則移動到當前文件夾;
編譯后:
移除 node_modules 文件夾的軟連接;
將 yarn.lock 文件移動到緩存文件夾中;
這里使用了 yarn install 的某些特性:
沒有 node_modules 或者 yarn.lock 時會安裝全量依賴;
有 node_modules 和 yarn.lock 但是 yarn.lock 和 package.json 不匹配時,會安裝所需依賴;
有 node_modules 和 yarn.lock,且 yarn.lock 和 packge.json 配置時,跳過安裝依賴;
使用編譯和部署直接點擊 Build Now 即可;
回滾的本質其實是:重新部署某個歷史版本。在 Build History 找到想要重新部署的版本,點擊 Restart from Stage,在新頁面中選擇 Stage Name 為 Deploy。
其他若是想要進入 docker container 交互,可以通過以下命令
docker exec -i -t [dockername] /bin/bash
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/27718.html
摘要:原博客地址實現前端項目自動化集成打包部署掘金地址前言以前寫前端項目打包部署,都是手動運行命令,打包完,然后壓縮,再上傳到服務器解壓。驗證提交代碼,成功自動打包部署提交代碼,觀察界面,出現構建任務,構建完成之后收到郵件通知。 原博客地址:https://yezihaohao.github.io/2017/09/09/Jenkins實現前端項目自動化集成打包部署/掘金地址:https://...
摘要:為了看起來清晰,我寫了一個文件,將這個文件和之前的放在同一個目錄中,可以用以下命令快速啟動,啟動之后新構建的鏡像和容器都名為。 showImg(https://segmentfault.com/img/remote/1460000014924499?w=883&h=515); 在軟件開發過程中,如果我們每一次提交的代碼都能夠進行一次完整的編譯、測試、打包、發布,就能及早發現問題、及早修...
摘要:是什么阿里云是一款提供持續集成持續交付能力,并完全兼容的能力和使用習慣的化產品。后續遇到的坑如果發生構建失敗,記得要刪除當前構建,否則觸發器不會工作 1、codepipeline是什么 阿里云CodePipeline是一款提供持續集成/持續交付能力,并完全兼容Jenkins的能力和使用習慣的SAAS化產品。通過使用阿里云CodePipeline,您可以方便的在云端實現從代碼到應用的持續...
摘要:從到再到搭建編寫構建一個前端項目選擇現成的項目模板還是自己搭建項目骨架搭建一個前端項目的方式有兩種選擇現成的項目模板自己搭建項目骨架。使用版本控制系統管理源代碼項目搭建好后,需要一個版本控制系統來管理源代碼。 從 0 到 1 再到 100, 搭建、編寫、構建一個前端項目 1. 選擇現成的項目模板還是自己搭建項目骨架 搭建一個前端項目的方式有兩種:選擇現成的項目模板、自己搭建項目骨架。 ...
摘要:從到再到搭建編寫構建一個前端項目選擇現成的項目模板還是自己搭建項目骨架搭建一個前端項目的方式有兩種選擇現成的項目模板自己搭建項目骨架。使用版本控制系統管理源代碼項目搭建好后,需要一個版本控制系統來管理源代碼。 從 0 到 1 再到 100, 搭建、編寫、構建一個前端項目 1. 選擇現成的項目模板還是自己搭建項目骨架 搭建一個前端項目的方式有兩種:選擇現成的項目模板、自己搭建項目骨架。 ...
閱讀 2234·2021-11-16 11:44
閱讀 641·2019-08-30 15:55
閱讀 3271·2019-08-30 15:52
閱讀 3595·2019-08-30 15:43
閱讀 2196·2019-08-30 11:21
閱讀 435·2019-08-29 12:18
閱讀 1945·2019-08-26 18:15
閱讀 468·2019-08-26 10:32