對於多模塊互相關聯項目,有時需要同時修改多個 git 倉庫的代碼並上庫,CI 也需要同時取到這些提交方可編譯。
那麼問題來了,如何取到這些 gerrit change?
jenkins 的 gerrit trigger 插件,一次只能下載一個gerrit change 並編譯,設想可以使用 pipe line 的方式實現(待驗證)。
如下是簡單的命令行查找法:
1,使用 gerrit query,查找對應條件的 gerrit change:
ssh -p 29418 xx.xx.xx.xx gerrit query --current-patch-set -- status:open project:^App/xx/.* branch:master -age:1m
注1:gerrit query 和後邊兒的篩選條件之間,用了一個分隔符:“--”。“--” 的目的是爲了表明,前邊兒的表達式的選項已經結束了,因爲我們用了 “-age” 參數,- 會被認爲是一個無效選項,導致查詢失敗;
注2:age 參數的含義是,自 gerrit change updated time 之後,過了的時間;反之,-age,就是在到指定的時間之內。
2,過濾無用信息,整理輸出格式,方便二次處理
3,循環下載
整體腳本如下:
ssh -p 29418 [email protected] gerrit query --current-patch-set \
-- status:open project:^App/xx/.* branch:master -age:1m \
OR status:open project:xx branch:xx -age:1m \
| grep 'project:\|number:' | awk -F ' ' '{print $2}' | sed -n 'N;N;s/\n/,/g'p \
> CHANGES_NUMBERS
for line in `cat CHANGES_NUMBERS`;
do
project=`echo $line | cut -d "," -f1`
change_num=`echo $line | cut -d "," -f2`
patchset_num=`echo $line | cut -d "," -f3`
repo download $project $change_num/$patchset_num
done