成人性生交大片免费看视频r_亚洲综合极品香蕉久久网_在线视频免费观看一区_亚洲精品亚洲人成人网在线播放_国产精品毛片av_久久久久国产精品www_亚洲国产一区二区三区在线播_日韩一区二区三区四区区区_亚洲精品国产无套在线观_国产免费www

主頁 > 知識庫 > 使用腳本一鍵打包并上傳docker鏡像的實現(xiàn)代碼

使用腳本一鍵打包并上傳docker鏡像的實現(xiàn)代碼

熱門標(biāo)簽:南充電銷外呼系統(tǒng) 株洲電銷 宿州外呼系統(tǒng)公司 海外工廠地圖標(biāo)注 地圖標(biāo)注小程序 陜西辦理400電話 南昌外呼系統(tǒng)定制 貴陽網(wǎng)絡(luò)外呼系統(tǒng)軟件 信陽電銷外呼系統(tǒng)怎么樣

筆者搞了一年多微前端項目,一個團(tuán)隊管理十個微應(yīng)用,換成docker鏡像部署后,發(fā)布操作一下從原來的腳本直連服務(wù)器的1分鐘變成了幾十分鐘,尤其上傳每個應(yīng)用到各自的阿里云倉庫。這里就再寫個腳本一鍵打包docker鏡像并上傳阿里云。

本文只講怎么制作一個腳本幫助去減輕開發(fā)人員負(fù)擔(dān),關(guān)于docker-compose的配置見: 使用各種姿勢舒服的部署微前端項目(上:打包與上傳)

效果圖

直接上代碼

/**
 * @name docker鏡像打包上傳腳本
 * @author weilan
 * @time 2021.02.22
 */
const fs = require('fs');
const path = require('path');
const util = require('util');
const { log } = require('../utils/log');
const exec = util.promisify(require('child_process').exec);
const sub_app_ath = path.resolve();
let sub_apps = fs.readdirSync(sub_app_ath).filter(i => /^subapp|master/.test(i));
const inquirer = require('inquirer'); // 用于命令行交互

/**
 * @name 命令行交互配置項
 */
const question = [
 {
  type: 'confirm',
  name: 'dist',
  message: '是否需要打包前端靜態(tài)資源?',
 },
 {
  type: 'confirm',
  name: 'env',
  message: '請選擇是否需要打包成不聯(lián)網(wǎng)的內(nèi)網(wǎng)部署',
  when: function (answers) { // 當(dāng)answer為true的時候才會提問當(dāng)前問題
   return answers.dist
  }
 },
 {
  type: 'checkbox',
  name: 'apps',
  message: '請選擇要發(fā)布的模塊',
  choices: sub_apps,
  validate: function (val) {
   if (val.length) { // 校驗
    return true;
   }
   return "選擇不能為空";
  }
 },
]

/**
 * @name 根據(jù)命令交互配置結(jié)果做邏輯處理
 */
inquirer.prompt(question).then(async (answer) => {
 let subApps = answer.apps;
 let buildScript = answer.env ? 'yarn build --Intranet' : 'yarn build';
 let needDist = answer.dist;
 let now = +new Date();
 // 登錄阿里云
 const { error: loginError } = await exec('docker login --username=哈哈哈 --password=嘿嘿 registry.cn-zhangjiakou.aliyuncs.com');
 if (loginError) {
  log.red(loginError, '登錄鏡像中心失敗')
  return;
 }
 console.log(`開始依次處理 ${JSON.stringify(subApps)} ......`);
 subApps.reduce((chain, item) => {
  return chain.then(() => publishIamge(item, now, needDist, buildScript))
 }, Promise.resolve())
});

/**
 * @name 打包鏡像并推送阿里云
 * @param {String} moduleName 模塊名
 * @param {String} now 當(dāng)前版本時間戳
 * @param {Boolean} needDist 是否需要打包前端靜態(tài)資源
 * @param {String} buildScript 前端靜態(tài)資源打包命令
 */
async function publishIamge(moduleName, now, needDist, buildScript) {
 // 打包前端靜態(tài)資源
 if (needDist) {
  console.log('開始打包前端靜態(tài)資源' + moduleName);
  const { error } = await exec(buildScript, { cwd: path.resolve(moduleName) });
  if (error) {
   log.red(moduleName, '前端代碼打包錯誤:', error)
   return;
  }
  log.green(moduleName + '前端代碼打包成功')
 }
 // 打包鏡像
 console.log(`開始打包鏡像 ${moduleName} ......`);
 const { stdout: buildStdout, error: buildError } = await exec('docker-compose build ' + moduleName);
 if (buildError) {
  log.red(buildError, '鏡像打包錯誤')
  return;
 }
 log.cyan(buildStdout)
 log.green('鏡像打包完成,開始制作鏡像標(biāo)簽')
 // 更新鏡像標(biāo)簽
 const imageName = 'ibp2fe_' + moduleName;
 const { error: tagError } = await exec(`docker tag ${imageName} registry.cn-zhangjiakou.aliyuncs.com/futureweb/${imageName}:${now}`);
 if (tagError) {
  log.red(tagError, '鏡像標(biāo)簽異常')
  return;
 }
 log.green('鏡像版本標(biāo)簽更新完畢,開始更新last標(biāo)簽')
 // 更新鏡像標(biāo)簽last版本
 const { error: tagLastError } = await exec(`docker tag ${imageName} registry.cn-zhangjiakou.aliyuncs.com/futureweb/${imageName}`);
 if (tagLastError) {
  log.red(tagError, '鏡像last標(biāo)簽異常')
  return;
 }
 log.green('鏡像last標(biāo)簽更新完畢,開始上傳')
 const { stdout: pushStdout, error: pushError } = await exec('docker push registry.cn-zhangjiakou.aliyuncs.com/futureweb/' + imageName);
 if (pushError) {
  log.red(pushError, '鏡像上傳失敗')
  return;
 }
 log.cyan(pushStdout)
 log.green('鏡像上傳成功')
}

process.on('unhandledRejection', (reason, p) => {
 console.log('Unhandled Rejection at: Promise', p, 'reason:', reason);
 // application specific logging, throwing an error, or other logic here
});

實現(xiàn)思路和注意事項

  • 首先考慮命令行交互的方式,將需要做的配置以選擇的方式讓開發(fā)人員確認(rèn),最后選擇要發(fā)布的模塊
  • 提前登錄阿里云賬號
  • 這里可以選擇并發(fā)執(zhí)行所選全部模塊,但是這樣日志輸出會無序,且電腦壓力極大會暫時死機(jī);因此這里我用依次處理的方式
  • 打包所選模塊的前端靜態(tài)資源
  • 執(zhí)行docker-compose build xxx 打包所選模塊鏡像

這里有個需要注意的點,因為是工具函數(shù)處理,每個模塊的路徑由node讀取,因此你的模塊名和docker-compose.yml里的服務(wù)名、容器名最好都一致;另外注意你的鏡像打包后是你docker-compose.yml外的根目錄下劃線連接你的docker-compose服務(wù)名,因此你的阿里云鏡像倉庫命名最好和這個組合后鏡像名一致;以上都是為了方便工具函數(shù)能夠通用處理各個模塊鏡像。

  1. 制作鏡像標(biāo)簽。這里我會制作一個本次發(fā)布時間戳的版本和一個lastet版本,前面方便回退,后面方便運(yùn)維部署時無需關(guān)心標(biāo)簽版本。也可以拉取git tag來做鏡像的tag。
  2. 制作鏡像后上傳至阿里云鏡像中心

標(biāo)簽:汕頭 晉城 玉林 拉薩 開封 鄭州 三明 石嘴山

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《使用腳本一鍵打包并上傳docker鏡像的實現(xiàn)代碼》,本文關(guān)鍵詞  使用,腳本,一鍵,打包,并,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《使用腳本一鍵打包并上傳docker鏡像的實現(xiàn)代碼》相關(guān)的同類信息!
  • 本頁收集關(guān)于使用腳本一鍵打包并上傳docker鏡像的實現(xiàn)代碼的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    色乱码一区二区三区88| 国产精品露出视频| 日本视频一区二区三区| 中国黄色片一级| 国产精品-区区久久久狼| 91中文在线观看| 成人免费va视频| 日韩毛片免费看| 中文字幕在线观| 99在线视频观看| 免费看a在线观看| 日本熟妇人妻xxxx| 蜜臀av国内免费精品久久久夜夜| 欧美日韩亚洲在线观看| 欧美成熟毛茸茸复古| av成人激情| 很污的网站在线观看| 51蜜桃传媒精品一区二区| 99视频一区二区三区| 日韩精品无码一区二区三区久久久| 97人妻精品一区二区免费| 韩国三级大全久久网站| 欧美精品在线视频观看| 91蝌蚪视频九色| 九九精品在线视频| 小小女视频网站色琼网站| 91视频免费观看网站| 日本乱人伦一区| 欧美日精品一区视频| www免费在线观看视频| 欧美亚洲尤物久久| 欧美一二三在线| 色噜噜狠狠色综合中国| 欧美三级午夜理伦三级老人| 999久久久国产| 秋霞成人午夜鲁丝一区二区三区| 奇米4444一区二区三区| 水蜜桃亚洲精品| 日本成人手机在线| 在线不卡日本| 久久综合伊人77777麻豆| 国产精品三级视频| 亚洲午夜久久久久久久| 一区二区三区区四区播放视频在线观看| 色狠狠综合天天综合综合| 9999精品视频| 一区二区亚洲欧洲国产日韩| 亚洲人吸女人奶水| 缅甸午夜性猛交xxxx| 日韩久久久久久久久久久| 亚洲欧美视频一区二区| 久久久亚洲精选| 99热这里只有精品4| 色琪琪免费视频网站| 成人黄色生活片| 日韩欧美国产成人一区二区| dy888午夜| 中文字幕在线播放网址| 秋霞无码一区二区| 免费成人性网站| 欧美不卡在线一区二区三区| 亚洲欧美日韩国产成人综合一二三区| 久久久久国产精品无码免费看| 欧美中文字幕视频在线观看| 五月天中文字幕| wwwwww99| 欧美视频一区在线观看| 9191在线| 中文一区一区三区免费在线观看| 超级碰碰不卡在线视频| 国产原创在线观看| 亚洲中午字幕| 国内精品免费一区二区三区| 久久99精品国产91久久来源| 日韩电影一区二区三区四区| 亚洲中文一区二区| 久久国产精品黑丝| 天天久久综合| 四季av一区二区| 亚洲少妇xxx| 成人网在线免费观看| 91一区二区三区在线播放| 欧美69wwwcom| 一区二区三区在线免费看| 成人美女视频在线看| 性色av一区二区怡红| 男女激情网站| 免费成人在线网站| 国产精品热久久| 国产欧美一区二区三区久久| 亚洲人体av| 亚洲色图27p| 中文字幕自拍偷拍| 1区2区3区欧美| 日本视频免费在线| 国产无码精品视频| 黄色网址在线视频| 久久久久xxxx| 国产又黄又大又粗的视频| 91日韩精品一区| 免费看成年人视频在线观看| 亚洲精品视频免费观看| 一区二区三区四区在线免费观看| 亚洲精品水蜜桃| www.久久久久久久| 欧美视频亚洲图片| 91超碰在线免费观看| 国内精品久久久久久影视8| 国产毛片av| 亚洲永久免费视频| 免费看成年人视频在线观看| 中文字幕人成人乱码亚洲电影| 天天干夜夜夜操| 日本黄色特级片| 中文字幕一区二区三区色视频| 91精品国产91久久久久久久久| 久久99国产精品久久99大师| 丰满人妻老熟妇伦人精品| 欧美男男大粗吊1069| 欧美日韩另类图片| 一区二区三区自拍视频| 国产精品99精品无码视亚| 九色porny在线| 国产欧美日韩成人| 伊人成人在线| 国产一区二区播放| 成人黄色在线免费| 国产一区二中文字幕在线看| 久久免费视频在线观看| 老鸭窝av在线| 久久亚洲捆绑美女| 樱花草涩涩www在线播放| 亚洲精品久久久久久久久| 日本美女一级片| 91超碰在线播放| 蜜臀久久99精品久久久画质超高清| 秋霞午夜鲁丝一区二区| 亚洲视频网站在线| 在线观看免费视频你懂的| 青娱乐av在线| 久草免费在线观看视频| 在线国产一区| 国产色a在线| 91在线一区二区三区| 无码人妻一区二区三区精品视频| 欧美多人野外伦交| 永久免费看片在线观看| 一呦二呦三呦国产精品| 欧美黄色激情| 国产美女诱惑一区二区| 一区二区三区日韩在线观看| 日韩激情av在线免费观看| 噜噜噜久久亚洲精品国产品小说| 911精品美国片911久久久| 亚洲精品白浆高清| 免费高清成人在线| 九色在线观看| 亚洲国产精品久久人人爱蜜臀| 国产精品美女久久久久人| 日本在线人成| 久久精品国产久精国产思思| 一个人看的www免费观看视频| 鲁大师影院一区二区三区| 成人精品视频网站| 九九热只有这里有精品| 欧美日韩国产高清一区| 国产成人精品最新| 国产又黄又猛又粗又爽| 欧美vide| 日韩欧美网站| 91视频久久久| 久久综合综合久久综合| 精品视频久久久| 欧美中文字幕一区二区三区| 久久青草国产手机看片福利盒子| 性欧美丰满熟妇xxxx性久久久| 精品资源在线| 在线播放免费av| 欧美久久久久久久久久| 久久精品影视伊人网| 天堂av中文在线| 欧美另类在线观看| 每日更新av在线播放| 精品国产三级a在线观看| 国产精品亚洲午夜一区二区三区| www.久久撸.com| 国产精品丝袜久久久久久消防器材| 福利一区二区三区视频在线观看| 午夜视频国产| 夜夜夜夜夜夜操| 美女视频黄免费| 青青青青草视频| 九九**精品视频免费播放| 老熟妇一区二区三区啪啪| 国产又粗又猛又爽| 在线一区电影| 亚洲少妇xxx| 国产精品99久久久| 成人无号精品一区二区三区| 亚洲视频在线观看网站| 91在线视频| 国产精品日韩在线观看| 98视频在线噜噜噜国产| 亚洲高清不卡一区| 日本在线成人一区二区| 国产一区视频网站| 国产午夜久久av| 国产不卡av在线免费观看| 久久av一区二区三区亚洲| 丝袜美腿av在线| 九九在线观看免费视频| 免费的成人av| 国产黄色一级大片| 秋霞午夜鲁丝一区二区| 久久久久久免费看| 高清日韩中文字幕| 日韩欧美高清一区二区三区| 奇米精品一区二区三区在线观看| 国产1区2区3区4区| 色呦呦视频在线| 国产精品99视频| 免费久久精品视频| 香港三级经典全部种子下载| 国产免费亚洲高清| 1313精品午夜理伦电影| 国产尤物一区二区在线| 女人高潮特级毛片| 97精品中文字幕| 亚洲超碰97人人做人人爱| 日本在线视频播放| 在线观看精品国产| 黄色国产网站在线观看| 欧美精品免费观看二区| 欧美日韩国产另类不卡| 亚洲国产欧美日韩另类综合| 天天躁日日躁狠狠躁欧美巨大小说| 国产男女在线观看| 五月天亚洲婷婷| 成人短视频在线| 精品国产乱码久久久久久88av| 国产激情视频一区| 国产精品嫩草久久久久| 亚洲精品久久久久国产| 久久久久久久久久伊人| 亚洲免费黄色录像| 日韩av电影中文字幕| 亚洲六月丁香色婷婷综合久久| 91精品视频在线看| 婷婷福利视频导航| 国产一区二区三区四区在线观看| 日本一区二区三区四区视频| 国产三级在线观看完整版| 日韩电视剧免费观看网站| 日本久久久网站| 欧美 日韩 国产 成人 在线| 国产精品入口麻豆免费看| 日韩av中文字幕一区二区| 中文人妻av久久人妻18| 欧美三级午夜理伦三级中文幕| 懂色av成人一区二区三区| 亚洲人成毛片在线播放女女| 免费国产一区| 日本成人伦理电影| 亚洲福利在线看| 国产高清中文字幕| 91国产精品视频在线| 黄色动漫免费网站| 不卡影院免费观看| 国产69精品久久久久9| 国产盗摄精品一区二区酒店| av免费在线一区二区三区| 亚洲欧洲美洲一区二区三区| 精品国产乱码久久久久久蜜臀网站| 摸摸摸bbb毛毛毛片| av一区二区久久| 国产suv一区二区| 96精品久久久久中文字幕| 美女洗澡无遮挡| 久久影院午夜精品| 老司机久久99久久精品播放免费| 亚洲午夜久久久久久久久红桃| 96sao精品视频在线观看| 成人看的羞羞网站| 制服丝袜综合网| 国产精品久久久久久户外露出| 国产亚洲欧美日韩精品| 国产精品久久久久久久龚玥菲| 色综合久久88色综合天天看泰| 亚洲手机在线观看| 性高爱久久久久久久久| 日韩欧美一区二区视频| 99三级在线| 美女任你摸久久| 亚洲一区二区乱码| 日韩欧美福利视频| 亚洲视频欧美在线| 情趣视频在线观看| 91亚洲国产成人久久精品麻豆| 91日本视频在线| 欧美特黄视频| 超碰成人在线免费观看| 欧美亚洲尤物久久| 国产男女在线观看| 国产一级久久久| 一级做a爰片久久毛片美女图片| 中文字幕国产免费| 波多野结衣片子| 69sex久久精品国产麻豆| www.黄色网址.com| 羞羞电影在线观看www| 91在线中文| 国产精品嫩草影院久久久| 久久精品中文字幕| 国产一区二区三区免费在线| 桥本有菜亚洲精品av在线| 久久久精品国产一区二区三区| 久久久久国产精品免费| 国产乱码精品一区二区三区忘忧草| 99国产精品一区二区| 亚洲精品福利视频| 99久久精品无免国产免费| 久久精品国产色蜜蜜麻豆| 尤物视频网站在线观看| 欧美一级视频在线播放| 性高潮视频在线观看| 韩国美女主播一区| 91av在线播放视频| 毛片毛片女人毛片毛片|