侧边栏壁纸
  • 累计撰写 208 篇文章
  • 累计创建 16 个标签
  • 累计收到 5 条评论

目 录CONTENT

文章目录

使用shell脚本查询gialb管道信息,然后取消过期管道

Wake
2022-08-31 / 0 评论 / 0 点赞 / 370 阅读 / 834 字

前言:

通过前一个项目触发后面一个项目的CI/CD的方式,在下游的时候并不会触发设置好的取消多余冗余管道的参数,因此在下游就会因为前面一个或者多个项目的项目触发,生成许多条多余的过期管道,很容易在构建部署的时候造成干扰,最后影响下游项目的部署。因此可以调用gitlab的管道API进行对多余的管道进行取消。

gitlab 管道的API调用:

列出项目触发器
curl --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects/1/pipelines""

取消项目触发器

curl --request POST --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects/1/pipelines/46/cancel"

注意: PRIVATE-TOKEN是个人的访问token,需要妥善保管,不能轻易存放。

脚本思路:

先将查询到的所有管道信息放到一个文件当中然后进行数据清洗,得到想要的数据信息再存放到另外一个文件当中,再使用另外一个脚本对清洗后的数据文件进行管道id的提取,执行调用api取消管道的命令。

查询管道信息并进行数据清洗的脚本

#!/bin/bash
row=1
piplinestate='status'
piplineneed1='running'
piplineneed2='"pending"'
FILE=result.txt
key='xxxxxxxxxxx'
get_file=get_piplines.txt
clean_file=status_piplines.txt
gitlab_url=gitlab.example.com


##调用api管道,获取galaxy项目的所有管道信息
curl --header "PRIVATE-TOKEN: $key" "https://$gitlab_url/api/v4/projects/1/pipelines" > $get_file
#项目号可以在CI/CD的设置trigger里面看到
#进行数据清洗,将得到的数据的文件输出到另外一个新文件中
sed "s/},/}\n/g" $get_file > $clean_file


#判断当前目录最后的输出文件是否存在,如果存在就进行删除
if [ -e $FILE ]
then
            rm -f $FILE
fi
#逐行读取日志,检查是否"status":"pending" or "running"?
#如果有,输出到结果文件中
##通过api调用的所有管道信息,通过数据清洗,获取想要的信息进行筛选
cat $clean_file | while read line
do
    if  echo $line|grep $piplinestate
    then
        if echo $line|grep $piplineneed1
        then
            echo $line >> $FILE
        elif echo $line|grep $piplineneed2
        then
            echo $line >> $FILE
        else
            echo $row" : "$line
        fi
    fi
    row=`expr $row + 1`
done

#将最新的管道id删除掉,不然会把自身的管道取消掉
sed -i '1d' $FILE
#/bin/bash ./run.sh
#如果有问题可以把下面的脚本再拆分出来,放到run.sh执行。

#逐行读取信息,将管道id提取出来执行调用api取消管道
#cat result.txt | awk -F "id" '{print $2}' | awk -F"," '{print $1}' | awk -F ":" '{print $2}'
for id in $(cat $FILE | awk -F "id" '{print $2}' | awk -F"," '{print $1}' | awk -F ":" '{print $2}')
do 
   curl --header "PRIVATE-TOKEN: $key" "https://$gitlab_url/api/v4/projects/1/pipelines/$id/cancel"
   echo  "id:$id  has been cancelled successfully"
   #echo $id
done

对清洗完的数据进行管道id提取(已经整合到上面的脚本了)

0

评论区