【FAQ】如何查找最近幾分鐘內特定倉特定分支的 gerrit change 並下載編譯?

對於多模塊互相關聯項目,有時需要同時修改多個 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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章