搜尋

搜尋結果

春季華麗秋田清酒鄉村會席
澳城餐飲
文創遊樂場 // 米米 Esther Lim・2019-03-25

稻庭烏冬半海膽醬上圖 山里團隊和刈穗清酒廠(秋田株式會社)將在4月5日到5月5日期間推出ldquo;山里、秋田清酒鄉村會席rdquo;。刈穗清酒廠成立於1850年,位於盛產大米的秋田市。清酒的名字是刈穗,和歌表現出對農民努力耕種稻田的尊重,這對於清酒生產者來說非常有意義。 山里、秋田清酒鄉村會席 午餐的特別菜式是ldquo;秋田縣式燒帶子rdquo;,當地人稱之為 ldquo;貝殼燒rdquo;Kayaki。 晚餐的亮點是紙火鍋材料為紅米餅x黑豚肉秋田蔥。這道傳統菜餚是由新鮮大米製成的,在東北地區很受歡迎。棒米餅本身很好吃,但加入到火鍋裡面後更加美味,再搭配山里自製的雷魚湯醬油 ldquo;盬魚汁rdquo;。 炸魷魚天婦羅秋田縣秋季蔬菜 山里為您精心選擇的清酒來搭配午餐和晚餐:刈穗銀千樹純米大吟釀, 銀千樹純米大吟釀是在低溫下陳釀的,口感非常細膩,圓潤,伴有豐富的果味。刈穗大吟釀 刈穗大吟釀是由山田錦和美山錦的大米製成的一流清酒,它的味道宜人溫和,餘味持久。刈穗六洲純米吟釀 ndash; 從米飯和古物到漿果和薄荷味的獨特香氣,這四個熱門詞可以形容它:清脆,乾爽,均勻且易入口。刈穗順慶辛口純米,它是由ldquo;秋田小町米rdquo;精製的清酒,此米以其純淨,柔軟和醇厚的米飯鮮味而聞名。 從4月5日到5月5日,各位可以享受: 秋田會席午市套餐每位澳門幣580元配清酒每位澳門幣730 元 秋田會席晚市套餐每位澳門幣1,580元配清酒每位澳門幣1,830 元 所有價目須另加收 10% 服務費 供應時間:午餐 12001500晚餐 17302200 逢星期一休息 預約及查詢 853 8883 5127 澳門大倉酒店 28樓「山里」

唔怕冇石油氣沖涼同煮飯啦!Smart GasWatch登場!
創意生活
Benjamin・2015-07-08

可連動APP去管理 讀數檢視 泡動式 Smart GasWatch 固定式 Smart GasWatch 澳門的住宅現時仍有大部分人是用石油氣作為燃料煮食及沖涼,相信必定會因無法得知罐內剩餘多少燃料而頭痛,因為小編以前常在冬天沖涼突然沒有石油氣的慘況,相信不少人都身同感受,因此,最近就有廠商就推出一個叫 Smart GasWatch 的裝置,以便大家清楚知道石油氣的剩餘量。 Smart GasWatch 的運作原理十分簡單,其實它是透過量度石油氣罐的重量,從而判斷當中剩下多少燃料。因此在首次使用 Smart GasWatch 時,就必須先將一個空的石油氣罐放在底板上,之後再放上滿氣的石油氣罐,那就可開始使用。而且更可配備智能手機一齊用,用手機去觀察剩餘多少存量,以便大家及早安排好幾時叫定石油氣,用來沖涼還是煮食呢! Smart GasWatch 上設有一個數字顯示器,可以根據石油氣罐的重量即時計算出所剩的燃料,亦將其轉換成可煮食的剩餘時間。此外,該款裝置更同時提供方便的警報功能,當石油氣只剩餘 20%、15% 及 10% 時,便會發出響聲提示,以便用家可以在燃料耗盡前趕快訂購一罐新的石油氣。據了解 Smart GasWatch 現時已於 Amazon 及 GasWatch.com 等網站上發售,而該產品會有兩個不同版本。 來源:Amazon.com 及 GasWatch.com

星穹鐵道:中後期無課心得
手機‧電玩
MacauYeah・2024-02-08

分享前先講講為何會回鍋。因為筆者平常支持的RPG品牌Square Enix 實在不濟,每次更新完手機,它家的買斷型遊戲都攔淺。實在玩不下去,還是要回到米哈遊,星穹有中文、持續更新、自動存檔,從內容到技術上都比買斷型遊戲更適合手機遊玩。所以筆者就繼續來養成看看吧。 角色取得策略 之前筆者在其他文章內有提及過,免費課金制最大的痛點就是可取得的資源有上限,所以到了中後期,資源投資在什麼角色上是一個很重要的考量。但由於本文的主題是無課心得,所以筆者亦限定自己只使用免費卷或免費石抽4星角色。筆者的抽角色策略也很保守,各位應該可以很輕易地重複到。最簡單地講,只有弱點擊破效率不足時、打不過的主線時,才會考慮抽角色。 青雀 量子屬性 智識命途 主線第二章,豐饒玄鹿,弱點屬性為火、冰、量子。主線預設只有一火主角一冰三月七的組合,筆者實在打不過豐饒玄鹿。此時有兩個選擇,要麼就多抽一個量子角色,豐富一下隊中角色;要麼去打支線模擬宇宙,取得另一隻冰免費角色黑塔。 為長遠發展,筆者先抽角色,不過運氣不怎樣,只抽到青雀。智識命途主打群體傷害,但她沒有持續傷害加成,而且戰技有運氣成份,所以強度不高。但對於主線玄鹿至少可以一戰,有抽到朋友可以隨便升一升等級就可以。 希露瓦 雷屬性 智識命途 在中期開始,除了經普通遇敵獲取【行跡素材】之外,攻略支線【模擬宇宙】也是取得【行跡素材】的重要方法。此時希露瓦配搭虛無命途的【懷疑】debuff效果可以在【模擬宇宙】達到多重疊加傷害。有條件疊加傷害的另一個四星角色應該是素裳。筆者有抽到,但因為物理屬性重疊,所以沒有練。 另外,在正常情況下,在攻略完第一章後,預設會有一火主角一冰三月七一奶娜塔莎,再加上希露瓦,【均衡試練伍】可以穩過。通過後,可以特破角色等級上限至80,是1.6版本的封頂等級。2.0版本才剛更新,但應該沒有調整封頂等級

賀歲鉅片《賭城風雲II》在澳門舉行首映
娛樂殿堂
LifeMag Editor・2015-02-11

由「澳門銀河」綜合渡假城全力支持之羊年賀歲電影《賭城風雲II》,將於2月18日年三十晚港澳上映。電影於2015年2月10日晚假澳門銀河東翼廣場舉行首映禮。導演王晶、監製劉偉強率領男女主角劉嘉玲、張家輝以及一眾演員包括、Julio、文凱玲、何浩文、張慧雯、朱晨麗、蔡潔、唐紫睿、盧惠光等一同出席。 去年《賭城風雲》香港票房大收3500萬,今次續集監製及導演都充滿信心。除邀請劉嘉玲、張家輝及余文樂加入演出外,製作更是不惜工本,拉隊到泰國及澳門取景拍攝上天下海的大型場面。 劉嘉玲及周潤發自《江湖情》及《我愛扭紋柴》以後近廿年來首度同場合作,飾演一對舊情人,有不少煙韌拍拖戲份,二人的化學作用在電影中表露無遺,散發跟初戀一樣的年輕活力。「傳奇影帝」周潤發及「七料影帝」張家輝首次合作,兩人惜英雄重英雄,演出上擦出不少精彩火花。 一眾《賭城風雲II》演員、導演及監製、以及太陽城集團主席周焯華先生、太陽娛樂文化行政總裁唐才智先生、太陽娛樂文化董事總經理黃柏高先生,與「澳門銀河」國際尊尚市場發展葉燕民先生董事、「澳門銀河」首席市場推廣總監祁禮敦先生及「澳門銀河」業務發展高級董事暨澳門百老滙及城市娛樂會營運董事歐中安先生一同以啤牌進行別開生面的亮燈儀式,預祝電影票房大賣爆燈,亦祝願觀眾在羊年身體健康、事事順境、財源滾滾! 《賭城風雲II》講述澳門賭俠石一堅(周潤發飾演)協助國際刑警大破洗錢集團DOA後便退隱江湖,可是DOA首席會計師小馬(張家輝飾演)從網上盜取DOA一百伍十億美元,與女兒初一(王詩齡飾演)潛逃泰國。堅之大弟子阿樂余文樂飾演加入國際刑警,並邀請堅協助捉拿DOA真正幕後主腦蒼井女士,兩人前赴泰國尋找小馬成為控方證人,追查過程中堅重遇了一生最愛的莫愁(劉嘉玲飾演)hellip;

[春之呼喚] 櫻之旅 日, 韓, 台灣 趴趴走 ready go !
走遍世界
. 小城閒人 .・2018-03-23

3月下旬春暖花開 相信很多朋友們最近都密鑼緊鼓預準整裝待發. 特別今年復活節及清明假期連檔 愛賞櫻的朋友們應該都會由下星期起陸續出發 到日, 韓各地追櫻. 當然 也有些朋友在2月年假時已經搶閘先到伊豆欣賞河津櫻 網路上櫻花花期預想亦已出爐. 網路上稍為細看一下 2018日本櫻花花期較早 最早開花應該已經在3月20前在福岡縣,熊本等 先由九洲開始了. 而熱門關西,東京等地亦由3月20左右陸續開花滿開. 而韓國櫻花預計則會比往年晚數天 大概3月底由南部慶洲鎮海開始 4月初至中部首爾等. 一邊整理著資料 一邊心癢癢的. 其實 筆者過去幾年都跟很多朋友一樣試著追櫻 抬頭滿天, 走在行人道, 櫻花樹下美 一見迷上了. 好吧 就趁著這個機會與各位朋試著分享 也是給自己重溫一下之前幾次的 櫻之美 ready go 櫻之初見 非日韓 原來是台北 2009 322 淡水 天元宮 本來只是去台北找朋友吃吃玩玩 無心一句未看過櫻花 感恩朋友們很用心 適逢其會便立即起行 乘捷運到淡水然後轉公車到天元宮去. 第二次 遇見櫻 南怡島渡口偶遇八重櫻 2014 4月下旬一般已是櫻季要結束的時侯. 在沒有希冀的情況下 當天是要到小王子村南怡島行 非常幸運的竟然在去南怡島渡輛的碼頭遇上紅紅的櫻花樹 近見櫻之美 2015 韓國慶洲鎮海櫻花節 終於要正式見面 到鎮海後第一站是慶和車站 其實鎮海櫻花節真是十分熱鬧 一出車站滿街是來賞櫻的人 慶和車站更是人滿之患 要拍照真是一件極艱難的事 要配合天時地利人和 當天嘛 是怎拍也會拍到人而且到步時已經開始下起毛毛雨 心想 網路上的漂亮照片必定是出自高手 而且是幸運之神眷顧兼不馳勞苦的高手 然而 抬頭看到滿滿一片櫻花海 那份發自內心的喜悅勝過一切 特別當管理員吹起哨子 著名的櫻鐵道來了 拍拍拍 管它很多人 真實爆多人場面 真心覺得有點掃興 與想像中的美美照也差太多 而且開始要下雨了 哭 管不了天氣 既然來了 接下來下一站 韓國十大賞櫻點 余佐川櫻花隊道 第一次來朝聖的 一定不會錯過日與夜的余佐川櫻花. 下午先慢慢逛 超過 1.5公里長的櫻花隊道 兩旁街道都有吃的,街頭小吃和餐廳 不過 真是超多人來賞櫻 拍照更是考驗手快攝位技術 逛完累了 找家小小咖啡店坐一下 渴了杯櫻花咖啡等天黑 因晚上雨下得比白天更大 所以照拍得不大好 也作留個紀念吧 隔天早上出發到斧山 南川洞是住宅區 櫻花盛開滿滿在街道兩旁 走到街道盡頭是海邊 住在這兒的韓國人真幸福 天天能走在櫻花下 之後也 也到了甘川文化村走走看 在山上往對面藍屋頂後山上看 櫻花也開了 2016 日本京都, 嵐山 日系之初見 請多多指教 追櫻嘛 理所當然要到訪日本櫻之國 有別於平時東京大阪買買吃之旅 賞櫻實在是考驗耐性, 耐力, 體力. 自己旅行常常是隨意隨心一族 在沒有太早開始預備行程準備的情況下 這種花季出發京都 實在有點不識時務 出發前個多月才去訂酒店 結果是6天5夜行程 晚晚搬酒店. 追櫻 不易啊 首站 地鐵河原町站旁高瀨川 初見美 第二, 三天 哲學之道, 八坂神社後面的円山公園著名「祇園枝垂櫻」 岡崎,平安神宮,「琵琶湖疏水」的櫻花迴廊 可乘坐期間限定的遊覽船(十石舟) 然後到 嵐山, 清水寺 櫻花 好美啊 漫天櫻花美 只怕不夠體力一直追著櫻之美 櫻花樹下哲學之道遘遇上貓兒 懶洋洋meow 2017 你好 再見 東京之櫻 心中有櫻 到步東京 第一站急不及待 TOKYO MIDTOWN 夜櫻初見 千鳥淵 護城河旁綠道内還有小船,染井吉野櫻盛開可以愜意地賞櫻 黑目川之日與夜櫻 沿著綿延約4公里的並排櫻花樹走 幸福小確幸 抬頭看櫻是件賞心樂事 但其實櫻花季走在黑目川的人堆中 也蠻累人的 汗quot; 要就近在東京都看櫻就是這樣人滿之患 大家都被櫻美迷住趴趴走 在天朗氣清藍天白雲櫻花下 來 Cheers 自我感覺良好是必須的 哈哈 再來 民眾東京賞櫻熱點 靖國神社新宿御園 新宿御園人頭湧湧 光排隊進去也花了20分鍾 上圖是園內種植 不同品種的櫻花 賞櫻六天 時間也實在太短暫 真希望有機會來一次超過一個月的櫻季全日追櫻之旅 笑 日本各地美櫻名所實在太多數之不盡 每年一次櫻之旅實在不會多. 再者 近年多留意外國也有著名的賞櫻地如德國波恩櫻花大道, 美國華盛頓, 加拿大溫哥華 以及中國多個地方. 世界很大各處風景各有獨特美 太值得多走多看多旅行 追櫻花是其一 朋友們一起 go go go 小語 有朋友問閒人 櫻花 還不是長那個樣子 同一個樣子的為什麼你拍完又拍 前看後看擔天又看 去年拍很多今年又拍 京都大阪東京首爾鎮海斧山還不是櫻花 看不夠嗎 嘻嘻 就是看不夠看不膩 站在櫻花樹下的幸福 只有自己最清楚. 當然 還有跟閒人一樣的愛櫻之人 就是看到這裡的你喔 希望你有喜歡這篇整合的櫻之分享 謝謝 笑 最新出發之溫馨提示 剛發現復活節,清明連假期間至4月8日止 CTM推出貼心漫遊數據$38日任用 覆蓋遍亞洲,歐洲,美國等十分多目的地 大家可以參考連結按此 飛慳更多CTM yeah

感謝賢者模型工作室 - 修復那些年還沒建好就斷樁的模型
手機‧電玩
MacauYeah・2024-09-13

不知道80、90後的朋友們,今年年初有沒有留意Gundam電影 一向熱愛Gundam的朋友們,一定知道這套大熱作品Gundam Seed Freedom的出現。那是原本的Seed Destiny的後逐全身劇情,正因如此,玩具商也馬不停蹄地推出新模型。在電影加持的情況下,其實很多老模型,都推出重賣再販。筆者也不例外,在看過電影後的,不斷翻老模的格價。 不過,最佔上心頭的,並不是購買欲,而是筆者過去,有一台模型組裝到一半就斷臂的MG脈衝高達Impluse Gundam。 上網找模型群友求助,不外乎都是找補件或當殺肉即係給他人當補件或改件用。但這次勾起回憶,不如就來個修復吧,死馬當活馬醫,實在救不了,就當殺肉吧。 筆者的情況,是因為模型手臂連結點斷裂,用膠水是無法修復的。經一位網友的指點,這必需靠打樁修復。 打樁,基本上有三要素:手鑽連鑽頭、銅棒、萬能膠。萬能膠很易可以解決,在本澳各大超市及文具店均有售。手鑽連鑽頭、銅棒,就麻煩一點,五金店的都很大,不適合模型玩具用。當然,有何事,去萬能的淘寶就有售。 在淘寶購物車當下,筆者還是很猶豫。萬一買錯了怎辦?淘寶單價不貴,但運費可很要命。是不是找個懂修復的大師,幫忙看看情況,再由大師下單比較適合。 就是這樣,筆者就不斷在網路上找,到底澳門有沒有模型工作室。一找,還真有一家【賢者模型工作室】,主打噴塗裝備的工作室。當時筆者還厚顏地私信問店家,如果不噴塗只素組的話,有免費位置嗎?店家還很慷慨的回答,是的,素組不收費。收費部份,就是耗材購買、噴塗裝備租用。坐位上,只是租客優先。 所以筆者就在本年的八月份,去【賢者模型工作室】朝聖一下,順便帶著斷臂的脈衝,看看有沒有路過的大師幫忙指點一下。【賢者】就如當初對話中了解的一樣,主打噴塗。筆者雖然對噴塗了解不多,但見在場裝備,一定是專業級。賢者不單是提供上色工具,還解決了很多抽風問題,在家想要一個這樣安全的制作環境,一定價值不菲。因為家庭環境問題,放棄噴塗的朋友們,真的可以去【賢者】現場看一看,應該會有所得著。 說回筆者原本的脈衝高達,剛好當晚店長【賢者】在場,拿起筆者的模型細看了一翻,然後就講了一句:quot;簡單,我幫你修吧quot;。筆者原本還以為只是來取經,然後再逐一買工具,想不到熱心的店長,突然出手幫忙,實在喜出望外。 手鑽開孔 上銅樁,最後插入主體中 回家再組裝外肩甲,浴火重生 在整個修復過程中,慷慨的店長用的都是他自己的工具,只是他手中沒有已開封的銅樁,筆者就現場買一份吧,其餘一分錢都沒有收取筆者的。店長不但為筆者修復了模型,還省下了工具錢,還傳授了補樁的要點,筆者實在收穫巨大。想不到,澳門玩具業中,還有這麼良心的店存在,實在值得支持。 若然讀者們跟筆者一樣,因為任何原因,有一些未完成的作品模型、GK,不妨一齊帶上去【賢者】,看看模友們能不能為你帶來新的方向。店長不一定在店,有需要可以加入他們的交流群,打聽一下店長的駐店時間。交流群也不會有店家的推銷產品,不過群友們會推坑團購,大家要管好自己的心。 【賢者模型工作室】 官方專頁 httpswww.facebook.cominsmws

Spring Data 關聯型態 02
科技新知
MacauYeah・2024-08-09

Presist and Casecade 前次的文章,講了一些Spring Data最基本的關聯概念,但當要正式儲存或刪除,就有些考慮完整性問題。平常我們在處理資料庫的關聯表格時,也需要面Foreign Key的正確性問題。同樣地,Spring Data也有這方面的考量,但它有提份一個很方便的CascadeType選項,可以簡化一些流程。 假設你只能存取Parent Repo,那你需要在Parent中,加入CascadeType.All。當repo.saveparent時,它就會順多把所有child的也一併進行Save,你也不需要有Child Repo的存在。 @OneToManymappedBy=quot;parentquot;, cascade = CascadeType.All List children = new ArrayList; 但在複雜的狀況下,例如你不想在更新parent的情況下,不小心弄到child,特別是經過public web下的API操作,你對web client的資料正確性有存疑,就不要使用CascadeType了。這也是筆者認為在大多數情況下,我們都會把Parent和Child的CRUD分開操作,然後根據需要使用各自的repo save。 如果你一定要用CascadeType.ALL CascadeType.REMOVE,就要再留意刪除的問題。為什麼?因為刪除 parent,其實指的是某個parent不再存在,但不代表child也要一起刪除,child的parent連結可以變為null,也有重新連結其他parent的可能。 如果大家確定需要共同刪除,就可以用CascadeType.ALL 或 CascadeType.REMOVE。 還有一個新的選擇,orphanRemoval = true,也有類似效果。 @OneToManymappedBy=quot;parentquot;, cascade = CascadeType.REMOVE List children = new ArrayList; or @OneToManymappedBy=quot;parentquot;, orphanRemoval = true List children = new ArrayList; or @OneToManymappedBy=quot;parentquot;, cascade = CascadeType.REMOVE, orphanRemoval = true List children = new ArrayList; 筆者測試過,混著用也是可以的。若大家看過其他教程,可能會覺得orphanRemoval = true 和 CascadeType 總是一起出現,但它們其實是分別操作的。單獨使用orphanRemoval = true,有時候則是為了不會出現無主的child,但這不代表parent和child的想要同步更新。 JPA Entity 的生命週期 Spring Data跟傳統的資料庫Selete,Create,Update,Delete SQL 語句有所不同。也就是這個不同,它的CascadeType比資料庫的Cascade Update和Cascade Delete更強大。 Spring Data 預設其實是使用 jakarta.persistence.EntityManager,每個Entity主要分為四個狀態 Transient New 不在EntityManager的掌控中 Managed 在EntityManager的掌控中,將會在下次flush時,變成sql create或update statement Detached 脫離EntityManager的掌控,不受flush影響 Removed 在EntityManager的掌控中,將會在下次flush時,變成sql delete statement 在Spring Data Jpa 以前,我們若要直接操作Hibernate,經常見到persist, remove的寫法 entityManager.persistentity; entityManager.removeentity; entityManager.detachentity; entityManager.mergeentity; 其實persist就是把處於Transient、Removed的entity,改為Managed。而remove就是把Managed改為Removed。detach,merge也類似,就是Managed,Detached之間互換。 EntityManager最強大的是,它可以讓程序員不需要再為Managed狀態下的entity操心,它會自動判別下次flush,應該create還是update,如果完全沒有改動的,連update也不會執行。 註,flush和commit也有不同,flush就是從java寫到資料庫中,在資料庫commit前,還可以使用rollback放棄。 而Spring Data,則是進一步簡化,它把persist改為save,remove改為delete,然後自動選擇flush的時機。 CascadeType 在解釋完Entity 的生命週期後,終於可以回到CascadeType了。這裏的CascadeType不是資料庫的Cascade操作,其實它是指EntityManager的狀態操作是否有傳遞關係。亦即是,persistparent時,要不要連同child也一起操作 我們查看 CasecadeType 的原始碼,就可以發現可以被傳遞的操作共有以下這些 PERSIST MERGE REMOVE REFRESH DETACH ALL 以上全部 這裏的 CasecadeType.PERSIST ,跟資料庫的 Cascade Update 是不一樣的。資料庫裏的 Cascade Update,是指當 Parent 的 Primary Key 有變,對應child的 Foreign Key也一起變。但因為 JPA Entity 的機制, Parent 的 Primary Key 不可以改變,理論上不會發生類似資料庫的 Cascade Update,頂多有 Cascade Delete。 CasecadeType.PERSIST 就像之前述的生命週期解說一樣, 把 parent和 child 一起拉到受管理的狀態。 註 CascadeType.REMOVE有點尷尬,似乎有更特別的使用規範。筆者測試過,在某些情況下,CascadeType.REMOVE無法處理ForeignKey問題,又或者是,刪除的順序不對。詳見 spring boot data deletion Reference entitylifecyclemodel spring boot data deletion

發佈Docker Swarm App的選擇 - CI/CD系統的參與
科技新知
MacauYeah・2023-08-25

一段時間前,筆者就討論了一些Docker打包的程式的文章,也討論了一些Docker Cluster環境下的選擇。現在也是時候,可以分享一些對於發佈環境的可選空間。 CICD系統 CICD 全稱是continuous integration CI 和 continuous delivery CD,字面上代表的持續地集成和發佈,實體上就是某台伺服器自動發佈APP。因為使用到Docker Cluster,不論前述什麼選擇 前文連結 請點這裏,都會有多個node節點的出現。要發佈App,總不能一個個node逐個登入設定。所以我們需要一些CICD工具,把這個過程都自動化。 在筆者的認知上,CICD系統,由兩個部份組成,一個是取得Source Code程式原始碼的過程,一個是編譯或發佈Source Code的過程。Gitlab,Github,BitBucket等大型的代碼庫供應商,它們天生為了保存Source Code而提供服務的。不少CICD系統都可以跟它們整合,它們提供了存取Source Code的部份,剩下你只要能提供編譯或發佈的伺服器就好。 如果作為小型開發團隊,很少會有意願去自己花錢養一個編譯或發佈的伺服器。極端地,如果我就是一人團隊,我用自己電腦編譯和發佈就好,伺服器能做的,我自己也能做。好消息的是,Github提供了一個叫Github Action的CICD系統,即使你沒有自己的編譯專用的伺服器,Github Action也可以用Docker Image,提供一個臨時的編譯程序,用完就刪掉。詳細功能還請各位先查看官方教學,筆者也暫時只能零星使用經驗,無法給出有意思的架構。 如果對智慧財產權有高度重視,Source Code不能存放在公開的伺服器,那麼Gitlab Enterprise Edtion則是一個好選擇。運用Gitlab ee,你可以用自己的機器,造一個純本地的庫存伺服器。更強的是,它內建也有CICD系統,只要你有間置的伺服器,就可以作為編譯使用。筆者也是從這個方向著手,架設了自己的Gitlab RunnerGitlab CICD系統。在這裏,就分享一下與Docker Swarm整理的概念。 對於前述兩種選擇,GitLab Runner都可以做得到 底層程式打包成Image並運行在Swarm mode上,每次發佈的是App Binary執行檔或核心檔案。 把App直接打包成Image,並運行在Swarm mode上,每次發佈的是App Image。 CICD 打包底層程式成為Image 在這個選擇下,其實就跟傳統自動化發佈的做法類似,只是發佈時,要多個node報行更新指令。如果你使用的底層程式原本就有支援多版本並行,這樣更新時就不用太操心rollback回滾等操作。若系統不支援多版本並行,為求簡化,若遇到要rollback的情況,重跑過去舊的CICD操作也是一個做法。當然,我們也可以經過一些備份的操作,來保存被代替的程式,若在發佈過程中出問題,也可以手動重來,不過整件事就越來越複雜。 筆者發佈的基本思路是 使用docker image,編譯和打包App Binary。 使docker image做編譯的好處是,你可以比較放心地假設每次編譯時,你的編譯環境都是乾淨的。 傳送上述的結果至生產環境可以取用的地方。 跳入生產環境執行更新指令 這裏有些隱藏的管理成本,如果你生產環境中有多個node,最後那幾行指令就要多抄幾次。 CICD 打包App成為Image 在這個選擇下,對比傳統自動化發佈的做法,現在要多做一步,就是要包裝自己的Image。不過好處是docker swarm有提供監測工具,在發佈過程每個分身會逐個更新,前一個分身更新成功後才會到下一個分身更新。而且 rollback等的操作,你可以靠docker做到。即是要手動rollback,也可以透過更正docker tags來達到,所以整體上來說沒有比傳統的麻煩。 筆者發佈的基本思路是 編譯App Binary。 打包成docker image。 經docker上傳image。 跳入生產環境執行更新指令。 對比傳統自動化發佈的做法,最後的更新指令,只要執行一次就可以。當然,原本在Docker Swarm中要管理的事還是要好好管理。 CICD 備註事項 雖然CICD可以幫忙簡化更新的過程,但實際操作會比上述的例子複雜一些。因為通常對非技術型的外界用戶來說,一個Web App會包含很多不同的功能。上述的例仔,在實際情況下可能需要拆解成很多微服務來進行。所以對管理上還是有相當的挑戰。