使用GraphQL调用GitHub api完成code freeze(二)

代码实现 (groovy)

通过 GraphQL(一)的内容我们大概了解了什么是graphql以及如何使用,下面我们目的就是结合jenkins对github进行操作

  1. 整理好GraphQL
  2. 选择目标仓库
  3. 使用groovy进行代码实现

GraphQL定义

 def payload_repositoryID = "{\"query\":\"{repository(owner:\\\"${org}\\\", name:\\\"${repo}\\\"){id}}\"}"
 def payload_branchProtectionRule = "{\"query\":\"{repository(owner:\\\"${org}\\\", name:\\\"${repo}\\\"){branchProtectionRules(last:20){nodes{id,pattern,requiredStatusCheckContexts}}}}\"}"
repoId = readJSON(text: callGraphQL(payload_repositoryID)).data.repository.id //获得仓库的id
masterProtectionRules = readJSON(text: callGraphQL(payload_branchProtectionRule))//获得所有的用户
masterRule = getMasterRule(masterProtectionRules)//拿到主用户

code freeze 实现

masterProtectionRuleID = masterRule.id //拿到master id
masterRequiredContexts = masterRule.requiredStatusCheckContexts // 拿到当前repo状态
masterRequiredContexts.add("code-freeze-by-yanci")//添加code freeze信息
formatContexts = formatRequiredStatusCheckContexts(masterRequiredContexts)
def playload_updateProtectionRule = "{\"query\":\"mutation{updateBranchProtectionRule(input:{pattern: \\\"${branch}\\\",branchProtectionRuleId  :\\\"${masterProtectionRuleID}\\\",requiredStatusCheckContexts: ${formatContexts}}){clientMutationId}}\"}"
callGraphQL(playload_updateProtectionRule) //执行codefreeze

若此时想要code freeze 的master不存在 ,则需要用修改操作进行创建

def playload_creatProtectionRule = "{\"query\":\"mutation{createBranchProtectionRule(input:{pattern: \\\"${branch}\\\",repositoryId:\\\"${repoId}\\\",requiredStatusCheckContexts: \\\"code-freeze-by-yanci\\\",requiresStatusChecks: true,requiresStrictStatusChecks: false}){branchProtectionRule{id}}}\"}"
callGraphQL(playload_creatProtectionRule)

GraphQL 结合Jenkins实现

这里使用了jenkins 封装的httprequest方法

def callGraphQL(payload){
        def httpRequest_map = [:]
        httpRequest_map.url = ENTRY_POINT
        httpRequest_map.acceptType = HTTP_HEADER_Accept
        httpRequest_map.authentication = HTTP_HEADER_Authorization
        httpRequest_map.contentType = HTTP_HEADER_Content_Type
        httpRequest_map.httpMode = 'POST'
        httpRequest_map.requestBody = payload
        httpRequest_map.wrapAsMultipart = false
        return httpRequest(httpRequest_map).content
    }
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者



你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值