DevOps:jenkens-cli增、刪、查等操作
阿新 • • 發佈:2021-02-04
devops整合的時候,我一次性要做300+應用的程式碼掃描,除非應用本身程式碼有問題導致build失敗,否則其它關於掃描的問題全是我一個人搞定,不能打擾到開發,有時候我為了少給他們找事,有些構建失敗的甚至幫他們改一下程式碼,好像不知不覺中,我基本上一般性的程式碼問題都能搞定。時間長了,現在他們在搭建環境的時候,構建失敗,明顯的程式碼錯誤,有些開發也會找我來查原因。我只能說,現在大部分一般問題網上都有答案,搜一下,做相應改正,都能OK。
今天,我只帖程式碼了,寫了一個普通的shell指令碼,用來批量操作jenkins.實際因為我們的業務規範做的不夠,很多批量操作,並不是不會寫程式碼,而是程式碼沒辦法產生應有的功效。
注意:執行指令碼機器上,得把公鑰新增進jenkins-admin-configure的許可權中,操作參考
#!/bin/bash
###
#create by liujuan
#create date 2021-01-08
#desc:查詢jenkins上已存在的所有sonar掃描的專案
###
JENKINS_IP=192.168.x.x
JENKINS_PORT=8009
BASE_PATH=$(cd `dirname $0`;pwd)
sonar_tag="sonar_"
DATETime=$(date "+%Y-%m-%d %H:%M:%S")
#檢視sonar流水線中是否包含某個專案
if [ ! -d $BASE_PATH/logs ];then
mkdir $BASE_PATH/logs
fi
error_tag="ERROR"
###獲取所有sonar程式碼檢查流水線
find_sonar_tags(){
if [ -f "$BASE_PATH/sonar_jobs" ];then
`>sonar_jobs`
fi
jobs_name_list=` ssh -l admin -p $JENKINS_PORT $JENKINS_IP list-jobs `
for job in $jobs_name_list
do
echo $job
result=$(echo $job | grep "${sonar_tag}")
if [[ "$result" != "" ]]
then
echo $job >> sonar_jobs
else
echo "name is not sonar"
fi
done
break
}
##批量增,重複也沒關係,名稱重複的會自動失敗
add_copy_job(){
add_job_list=$BASE_PATH/add_jobs
for add_job in `cat $add_job_list`
do
if test -z "$(ssh -l admin -p $JENKINS_PORT $JENKINS_IP get-job $sonar_tag$add_job |grep -r "xml")"
then
echo "$sonar_$add_job is exist"
else
`ssh -l admin -p $JENKINS_PORT $JENKINS_IP copy-job sonar_pc_best $sonar_tag$add_job`
echo "$sonar_tag$add_job added"
echo "start create sonar_$add_job ,create time is $DATETime" >> $BASE_PATH/logs/add_job.log
fi
done
break
}
##單刪和批量刪
delete_jobs(){
#del-job
#del_job_exec=` ssh -l admin -p $JENKINS_PORT $JENKINS_IP delete-job job-name`
echo "請選擇要刪除單個job還是多個job:"
echo "1.單個job輸入1,"
echo "2.多個job輸入2,"
echo "多個job讀取本地$BASE_PATH/del_jobs檔案,"
echo "請選擇你的操作:"
read CASE_DELETE_ID_NUM
case $CASE_DELETE_ID_NUM in
1)
echo "你想要刪除單個job,請輸入你的job名稱(全名):"
read JOB_NAME
`ssh -l admin -p $JENKINS_PORT $JENKINS_IP delete-job $JOB_NAME`
echo "delete $JOB_NAME sucess"
echo "$JOB_NAME is deleted,delete time is $DATETime" >>$BASE_PATH/logs/del_job.log
;;
2)
for job in `cat $BASE_PATH/del_jobs`
do
echo "start delete $job"
`ssh -l admin -p $JENKINS_PORT $JENKINS_IP delete-job $job`
echo "$job is deleted,delete time is $DATETime" >>$BASE_PATH/logs/del_job.log
echo "delete $job sucess"
done
;;
*)
echo "您選擇的不存在,請重新執行程式,$0"
esac
}
#查詢流水線是否存在
check_job_isexist(){
echo "請輸入你要查詢的job-name:"
read JOB_NAME
#檢視sonar流水線中是否包含某個專案
if test ! -z "$(ssh -l admin -p $JENKINS_PORT $JENKINS_IP get-job $JOB_NAME |grep -r "xml")"
then
echo "$JOB_NAME is exist"
else
echo "$JOB_NAME is no exist"
fi
break
}
execute(){
echo "1.獲取所有sonar-job,"
echo "2.查詢應用是否已新增掃描,"
echo "3.新增掃描job,"
echo "4.刪除掃描job,"
echo "請選擇要進行的操作:"
read CASE_ID_NUM
case $CASE_ID_NUM in
1)
find_sonar_tags
#exec ./jenkins_batch_cli.sh
echo "所有sonar-job存放目錄:$BASE_PATH/sonar_exist_jobs,請檢視!"
break
;;
2)
#exec ./jenkins_batch_isexist_job.sh
check_job_isexist
break
;;
3)
echo "新增job時,請把應用名存放至:$BASE_PATH/add-jobs "
#$exec ./jenkins_batch_copy_job.sh
add_copy_job
;;
4)
#exec ./jenkins_batch_delete_job.sh
delete_jobs
break
;;
*)
echo "您選擇的不存在,請重新執行程式,$0"
break
esac
}
while_execute(){
execute
echo "繼續請按a,想要退出程式請c"
read INPUT_KEY
if [ $INPUT_KEY == "a" ];then
execute
else
exit 1
fi
}
while_execute
結果: