Bo2SS

Bo2SS

#2 | 居家隔離的新發現(高效做飯、實現多倉庫分支管理自動化……)

寶子們,這裡是 Bo2SS 的新系列,主要分享平時的一些思考,有生活中的,也有技術上的。相比之前的技術長文,這個系列整體的風格是比較輕快的。(友情提示:文末有多倉庫分支管理腳本的示例,滑到最後,看看你是否需要?)

“該回家的回家,不要出來了。該回家的回家,不要出來了……”

周二早上 7:30,我被不停播放的喇叭聲吵醒,我的第一反應是看眼小區群。

沒錯,喜提 “隔離大禮包” 了。

image

近日伙食#

本來啊,都沒想過自己工作日會有時間做飯,一般也就周末下下廚,犒勞一下自己。

image

image

image

image

image

image

image

但是隔離第一天,晚上視頻家人的一句 “外賣多不衛生”,再加上當天點的外賣確實難吃,於是我決定從第二天起,親自下廚。

先說說我體會到的自己下廚的好處,多了去了:

  • 好吃(管夠),有儀式感(幸福感的來源之一),讓家人覺得我過得很好(事實如此)……

  • 更重要的是,我還意外發現,在這個過程中,我可以在更高的維度上思考問題,不陷入細節

本來做點家常便飯並不需要花費太多的腦力,所以大腦還留有一些思考的餘地。

而且相比坐在電腦前,做飯時的大腦又少了各種無用信息的干擾,反而可以更加集中精力地思考問題的關鍵。

話說回來,其實我們在洗澡、上廁所時,也很容易獲得靈感,這其中的道理是類似的。

image

正可謂 “有得必有失”,既然得到了這麼多好處,我們肯定也要失去點什麼?對,我們要多花些時間和精力

但其實做上面的美食花不了多少時間。

這裡我先對比一下自己做飯和點外賣的時間消耗數據:

自己做飯點外賣獲勝方(時間更短者)
1. 選購在美團買菜上選購兩荤兩素在美團外賣上點餐基本持平
2. 下樓取一次就可以取完一天的兩餐要取兩次自己做飯
3. 製作煮飯 + 炒菜無需製作點外賣
4. 收場洗碗幾乎不需要點外賣

看起來點外賣更勝一籌,但其實煮飯 + 炒菜的時間可以做到 “忽略不計”:

  • 煮飯:借助Stretchly休息提醒工具,自己平時工作的節奏是,每半小時休息 20 秒,每 1 個半小時休息 4 分鐘,所以在 4 分鐘休息的時候就可以去提前煮飯

  • 炒菜:選擇美團買菜裡的象大廚或者農耕記快手菜,製作過程可以控制到 10~20 分鐘。

    • 快手菜裡面給你準備好了洗乾淨的、切好的食材(如果不放心,可以自己再洗一遍),還有油和調料(如果不放心,可以用自己的油和調料,調料一般用生抽、鹽代替就夠了),另外還給你準備好了炒菜步驟指南,你只需要像拼樂高積木一樣按部就班地動動鏟子就可以了。

    • 注意選擇保質期是幾天而不是幾個月的,這樣菜一般都是新鮮的。

再看看洗碗這個新增項目:

  • 我可以選擇在飯後或者 4 分鐘休息時間來做,利用好碎片化時間。

  • 有時候嫌油多,可以先給碗過過水,泡一泡,再洗。

  • 另外,我還發現,洗碗時,手一前一後擦碗的動作,和健身中(練胸)和(練背)的動作效果一致,所以洗碗還可以彌補一點我平日本該有的運動量(的確,据觀察,自己的胸肌和背闊肌沒有明顯減弱的跡象🐶)。

image

除了時間消耗,剛剛還提到了要多花些精力,這是無法避免的,尤其是剛開始學炒菜。

但是正可謂 “有失必有得”,消耗了時間和精力,也總能換來另外的價值。

近日娛樂#

吃著自己做的菜,再看看紅軍的歷史,巴適得很。

image

最近在看的是高希希導演的這部《毛澤東》,我特別喜歡青年毛澤東演員侯京健的那股神氣。

image

說說我很喜歡的幾幕~

1)外出求學

一天,表兄文運昌到毛澤東家裡來,告訴他可以去湘鄉縣立高等小學堂去讀書,那裡可以學到很多新知識。

毛澤東當時在父親給找的糧行裡當學徒,但是自己對做生意並不感興趣,所以徵求父親的同意。

他的父親其實只想毛澤東趕緊掙點錢養家,家裡還有兩個弟弟和一個妹妹,可沒想過還要花錢供他去讀書。

不過在毛澤東的極力勸說下,他的父親最後還是勉強答應了。

於是毛澤東,走出故鄉,並寫下一首七絕詩 “孩兒立志出鄉關,學不成名誓不還。埋骨何須桑梓地,人生無處不青山” 送給父親。

17 歲的毛澤東雖然上的是小學一年級,但是他不懂就學,不懂就問,學得非常快。

2)開書店

當時毛澤東一行人為了傳播新思想,開了一個書店(文化書社)。

但是書店的啟動資金比較有限,財務提議除了賣一些文化相關的書,還可以賣一些暢銷書、俗書,增加收入。

這個建議被毛澤東否決了,他認為開書店的目的是為了集結志同道合之人,把認同他們思想的人聚攏。而如果賣暢銷書、俗書,那就不好分辨進來的讀者了。

這一點對我寫公眾號也很有啟發,我不希望去寫一些博人眼球的內容,更希望在這裡能慢慢地和大家分享自己的思考,結交一些趣味相投的人。

另外,毛澤東放在今天也一定是 “流量大咖”,當時這個書社開張他還請到了湖南省省長來剪彩。

3)毛澤東被排擠

毛澤東的 “農村包圍城市” 戰略和游擊作戰十六字方針(“敵進我退,敵駐我擾,敵疲我打,敵退我追”)屢試不爽,幫助紅軍打了好多勝仗。

但遠在上海的中央黨委急於立功,認為紅軍有進攻大城市的實力,所以多次下達進攻大城市的命令。

中央的命令難違,但毛澤東知道紅軍目前的實力還不夠,所以很多時候是做做樣子。

不過毛澤東也因此背上了 “逃跑主義” 右傾分子的名號,不斷被中央排擠。

直到第五次反圍剿,中央派博古(比較年輕,沒有什麼實戰經驗)擔任總書記,李德擔任軍事顧問(德國人,為了保密,起了個中文名),他們的 “碉堡對碉堡” 硬碰硬戰略導致紅軍損失慘重。

在這之後,毛澤東又慢慢回歸正位。

4)飛奪瀘定橋

image

我在畢業後的川西之旅中,經過過瀘定橋,底下的大渡河,聽水流聲都能讓我背脊發涼。

而當時敵人為了防止紅軍過河,提前把板子都掀掉了,只剩下鐵索。

紅軍為了渡河,是頂著對岸的機槍,一隊人衝鋒,踩著繩索吸引火力,一隊人鋪橋板子,一隊人遞板子,後面人再渡河。

據說當時在南京的蔣介石問手下,他們為什麼不直接炸橋呢?手下回答他們根本沒想到紅軍還會邊鋪板子、邊前進。

蔣介石嘆了口氣,說道,“和毛澤東打仗,就不能以常規思路預判他們的行動”。不過後來他還是沒料到紅軍會翻越雪山,從而讓紅軍會師了。

看毛澤東打仗,總會讓我想起諸葛亮(之前寫過一篇聊三國的:歷史 | 如果《三國演義》人物來應聘互聯網,你會選誰呢?),看似差距懸殊的較量,他們總能順勢應變、絕處逢生,十分精彩。


另外,關於這部劇的視頻資源,我更喜歡在西瓜視頻上看,因為這裡的彈幕超級多,看起來很有氛圍。

  • 時不時有人給你介紹一下出場的這個人的事跡。比如我看到國民党的薛岳,那當然是把他當作我們的敵人,但彈幕一說他是抗日名將,頓時又會心生敬畏🫡。

  • 也有人會發表對某件事的不同看法,或者可能被忽略的背景……

bilibili則相對清靜,可能是上架較晚的緣故。


好啦,前面說的是生活中的一些體會,下面來聊點技術上的思考。

近日思考:多倉庫分支管理自動化 V1.0#

姑且叫它 V1.0 吧,因為除了現在做的自動創建分支能力,一定還可以延伸出很多能力,等需要時再迭代。

最終結果:自動給多個倉庫創建分支🌲。

  1. 自動化前:分別去每個倉庫,填寫相關參數,點擊按鈕。

  2. 自動化後:~~ 分別去每個倉庫,~~ 填寫相關參數,點擊按鈕。


不知道你們有沒有遇到這樣的情況,每次產品到了新的階段,需要給代碼創建新的分支,比如用於測試。

如果是給一個倉庫創建一個分支也還好,但我們組相關的倉庫多達五六個,所以我們需要給每一個倉庫做這樣一個簡單又枯燥的重複操作(創建分支),作為程序員,我不允許有這樣的情況發生。


於是,我借助持續集成工具 Jenkins(方便他人使用)和 Shell 腳本語言,實現了上述過程的自動化。

現在我只需要 2 步就可以輕鬆完成上面的過程:

1)進入 Jenkins 項目,填寫 2 個構建參數:當前版本、上一版本

image

⚠️:

  1. 我們的分支名是基於版本名的;

  2. 我們會基於上個版本的 release 分支創建當前版本的 test 分支。

2)點擊 Build 按鈕,等待結果

這裡我用自己的兩個 Github 倉庫做了試驗,相關日誌如下:

image

✌️:日誌清晰展示了操作的過程和結果。

⚠️:我們要操作的倉庫是在 Configure > Source Code Management > Git > Repositories 裡配置的。如果需要新增倉庫,只需在配置裡添加,無需修改腳本。


V1.0 的 Shell 腳本如下(裡面有具體的說明):

# 主流程
main() {
  #1
    set +ex  # e:異常不退出;x:不顯示執行的命令
    declare -a success_list  # 記錄成功的倉庫
    declare -a failure_list  # 記錄失敗的倉庫
    echo "========================⚙️已完成準備工作⚙️========================\n"
    
    #2
    echo "========================🆒正式開始🆒========================"
    remote_hosts=`git remote`
    echo "🌿要操作的倉庫有:\n${remote_hosts}\n"
    
    # ️遍歷管理的遠端倉庫們,倉庫在Source Code Management > Git > Repositories裡添加
    # ⚠️可以通過Advanced > Name配置倉庫別名,方便檢查日誌
    for remote_host in ${remote_hosts}; do
        CreateAndPushTestBranch ${remote_host}
    done
    
    #3
    echo "========================🌲輸出結果🌲========================"
    echo "✅成功的有:${success_list[*]}"
    echo "❌失敗的有:${failure_list[*]}"
    echo "\n\n"
}

# 創建並推送test分支
# 入參1:遠端倉庫別名
CreateAndPushTestBranch() {
    echo "========================💼開始操作倉庫:$1💼========================"
    target_host=$1  # 記錄倉庫別名
    
    echo "1. 創建分支 git checkout -b"
    # current_version、last_version是構建參數,在General中定義
    git checkout -b test/${current_version} ${target_host}/release/${last_version}
  
    echo "2. 推送分支 git push"
    git push ${target_host} HEAD
    if [ $? -eq 0 ]; then
        success_list+="${target_host} "
        result="成功✅"
    else
        failure_list+="${target_host} "
        result="失敗❌"
    fi

    echo "3. 清理分支 git branch -D"
    git -c advice.detachedHead=false checkout ${target_host}/release/${last_version} # -c advice.detachedHead=false,臨時屏蔽detachedHead警告
    git branch -D test/${current_version}
    
    echo "\n👉${target_host}倉庫創建並推送test/${current_version}分支:${result}\n"
}

main; exit

尾聲#

保持思考,大膽實踐,希望這篇文章對你有所幫助~

這裡是 Bo2SS,對這個系列有什麼建議,歡迎寶子們留言,咱們下次見~

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。