雲原生系列4 批量定時更新原生程式碼庫

李福春發表於2021-02-18

image.png

圖中是一個自動化的機械流水線。

作為一名程式設計師,每天一定有非常多工作是每天必須重複的,

如何消除重複性的工作?也讓自己日常重複工作自動化呢?

背景和需求

file

開發人員入職一家新公司,一般會使用git來進行程式碼的版本管理和協作,

負責的程式碼庫隨著時間的推移會慢慢增加,最後可能會有1-20個程式碼工程,

有些是新的工程,需要做新的功能特性開發,有的是老的工程做維護開發,

而每個工程可能是多人協作的。手工更新多個程式碼工程的程式碼,

有一些重複性的工作在裡面,隨著時間的推移,

這個時間的消耗會更多,浪費了大量的編碼和設計時間。

image.png

假如每天花2分鐘做拉取程式碼, 如果你維護20個工程,

一年按照正常工作日上班,需要耗費173個小時時間。

目標提煉

這個批量更新程式碼的時間完全可以自動化,即通過定時任務執行指令碼的方式,

每日定時的批量更新你的程式碼工程,節約這個每年86個小時的時間,

有更多的時間做設計和陪女朋友。

實現路徑

要點:

  1. 列舉出你維護的git程式碼工程,並簡單備註名稱,型別;

  2. 沒有則clone程式碼到本地,有則拉取程式碼到本地,並做一定擴充套件;

  3. 定時任務執行你的任務,在上班之前執行;

image.png

列舉維護的程式碼工程

檔名: codeProject.text

比如我錄入了我放在github上的三個工程程式碼;

git@github.com:carterbrother/springbootpractice.git|springbootpractice|springboot練習程式碼|backend
git@github.com:carterbrother/COLA.git|cola|cola骨架程式碼|backend
git@github.com:carterbrother/cat.git|cat|cat服務監控程式碼|backend

迴圈處理程式碼並可不斷擴充套件

一個shell迴圈處理即可,同時預留擴充套件;

比如如果是java後端工程,需要執行mvn clean install到本地;

如果是vue前端工程需要執行類似的操作;

總體的指令碼如下:

#!/usr/bin/env bash
#set -e

function doExtend() {
  serviceType=$1
  appPath=$2
  if [ ${serviceType} == 'backend' ]; then
    cd ${appPath}
    git checkout dev
    git pull
    mvn clean install -Dmaven.test.skip=true
  fi
}

echo '拉取工作維護程式碼到本地開發機器'

export shPath="${PWD}"
echo "當前路徑:${shPath}"

export codeBasePath=~/src/work
echo "你設定存放工作程式碼的目錄是:${codeBasePath}"

if [ ! -d ${codeBasePath} ]; then
  echo "你設定存放工作程式碼的目錄是:${codeBasePath} 它不存在,自動建立它!"
  mkdir -p ${codeBasePath}
fi

export codeProject="codeProject.txt"
echo '按照行來讀取您維護的程式碼工程檔案: ${codeProject}'



for line in $(cat "${shPath}/${codeProject}"); do
  echo "line conent: ${line}"
  arr=(${line//|/ })
  repoName=${arr[0]}
  serviceName=${arr[1]}
  serviceTitle=${arr[2]}
  serviceType=${arr[3]}
  echo "服務名稱: ${serviceTitle},服務型別:${serviceType} 倉庫git地址:${repoName} "

  appPath="${codeBasePath}/${serviceName}"

  if [ ! -d ${appPath} ]; then
    pwd
    echo "程式碼${serviceName}不存在,需要git clone到本地"
    cd ${codeBasePath}
    git clone "${repoName}"
  else
    cd ${appPath}
    pwd
    echo "程式碼${serviceName}存在,需要更新 git pull"
    git pull
  fi

  doExtend ${serviceType} ${appPath}
done

前提是你需要配置好你的git的ssh公鑰資訊到你的gitlab庫,

這裡不會配置的話可自行利用搜尋引擎。

定時任務執行指令碼

我使用的是mac電腦,可以使用crontab工具來定時的執行上面的指令碼。

命令格式:

crontab [-u user] file
crontab [-u user] [ -e | -l | -r ]

備份和恢復crontab

# 備份
crontab -l > $HOME/.mycron
# 恢復
crontab $HOME/.mycron

把檔案放到對應的位置,crontab -e編輯,寫入指令即可。

#每天6點定時拉取程式碼
* 6 *  *  * sh ~/tool/codetool/pullCode.sh

小結

一句話概括本篇:使用shell指定和定時任務crontab自動化的批量更新你的程式碼工程一年可節約86個小時時間。

批量更新工作程式碼庫.png

原創不易,關注誠可貴,轉發價更高!轉載請註明出處,讓我們互通有無,共同進步,歡迎溝通交流。

相關文章