jenkins pipeline如何实现事件等待(waitUntil)

需求:我需要等待docker镜像上传到镜像仓库之后再进行一些操作,所以我需要做一个监听等待的方法

这里先准备一个函数,用来请求镜像地址,获取返回状态

@NonCPS
def get_responseCode(){
    def url = "https://<docker registry url>"    
    def urlObject = new URL(url)
    def connection = urlObject.openConnection()
    def responseCode = connection.responseCode
    return connection.responseCode
}

解决方案:两种方式

方式一: 用递归的方式实现,这里先去请求镜像链接,如果返回200,做下一步,如果没有的话就等待1分钟之后再次判断,直到能请求到镜像

note: 在调用处最好加上超时设置 timeout(time: 2, unit: 'MINUTES') , 以免job无限循环执行
 
def do_after_image_built(){
    def responseCode = get_responseCode()
    if (responseCode == 200) {
        echo "do something"
    } else {
        echo "Waiting for image ready"
        sleep time: 1, unit: 'MINUTES'
        do_after_image_built()
    }
}
 
方式二: jenkins pipeline waitUntil 关键字,这个原理类似递归,返回true时结束,返回false时会自动重试
 
def do_after_image_built(){
    waitUntil {
        def responseCode = get_responseCode()

        if (responseCode == 200) {
            echo "do something"
            return true
        } else {
            echo "Waiting for image ready"
            sleep time: 1, unit: 'MINUTES'
            return false
        }
    }
}
 
 
posted @ 2023-12-22 16:47  JakeLi1012  阅读(402)  评论(0)    收藏  举报