云学堂直播第②期 | Jenkins系统集成与共享库实践 | 回放与笔记

Jenkins系统集成概述

通常使用Jenkins来集成命令行工具来进行任务。在集成的过程中都类似于执行shell命令或者脚本。也可以使用webhook将对端系统与Jenkins集成-- 调用接口

本次课程实践目标:创建一个Jenkins作业, 该作业可以根据用户的输入自动的创建Gitlab项目分支。

系统集成的常规步骤:

  • 获取对端系统的API接口文档;

  • 根据接口文档,获取要使用的接口;

  • 使用Postman或者cURL进行接口测试;

  • 将接口封装到Jenkins 流水线/共享库;


Postman调试GitLab接口

GitLab官方文档:https://docs.gitlab.com/
GitLabAPI文档:
https://docs.gitlab.com/ee/api/api_resources.html

在GitLab API文档中查找分支管理的接口使用方式

按照接口文档的说明, 更新替换CURL命令中的参数值。

curl --request POST \
--header "PRIVATE-TOKEN: t74bnVEaxHAhUfCKkomH"  \
"http://192.168.1.200/api/v4/projects/2/repository/branches?branch=mynewbranch&ref=master"

【PRIVATE-TOKEN的来源】


使用Postman进行调试


编写Jenkinsfile

我们先试着将curl命令,直接写到Jenkinsfile中运行。

pipeline {
  agent { label "master"}


  stages{


    stage("test"){
      steps{
        echo "Hello "
        script{


          // Create Branch
          sh """
            curl --location \
              --request POST \
              'http://192.168.1.200/api/v4/projects/2/repository/branches?branch=${env.branchName}&ref=${env.baseBranch}' \
              --header 'PRIVATE-TOKEN: t74bnVEaxHAhUfCKkomH'
          """


        }
      }
    }


  }
}

【优化】

  • 新分支名称、项目名称、基准分支名称,通过JenkinsUI页面获取;

  • 将明文的GitLab认证token存储到Jenkins,使用withCredentials引用;

  • 封装一个统一的httpReq请求;

pipeline {
    agent { label "master"}


    stages{


        stage("test"){
            steps{
                echo "Hello "
                script{     
                    projectId = GetProjectId("${env.projectName}")
                    CreateBranch(projectId, "${env.branchName}", "${env.baseBranch}" )
                }
            }
        }
    }
}




def HttpReq(apiURL, method){
    gitlabURL = "http://192.168.1.200/api/v4"
    withCredentials([string(credentialsId: 'b0e34f3a-4ecb-4298-8e5f-2cbfd2c1f571', variable: 'GITLAB_TOKEN')]) {
        response = sh returnStdout: true, script: """
            curl --location \
                --request ${method} \
                "${gitlabURL}/${apiURL}" \
                --header "PRIVATE-TOKEN: ${GITLAB_TOKEN}"
        """
    }
    return response
}


// 创建分支
def CreateBranch(projectId, branchName, baseBranch ){
    apiURL = "projects/${projectId}/repository/branches?branch=${branchName}&ref=${baseBranch}"
    HttpReq(apiURL, "POST")
}


// 获取项目id
def GetProjectId(projectName){
    apiURL = "projects?search=${projectName}"
    result = HttpReq(apiURL, "GET")
    result = readJSON text: result


    return result[0]["id"]
}

将函数方法写入共享库

Jenkinsfile

@Library("jenkinslib@main") _ 


// 导入gitlab.groovy
def gitlab = new org.devops.gitlab()


pipeline {
    agent { label "master"}


    stages{


        stage("test"){
            steps{
                echo "Hello "
                script{     
                    projectId = gitlab.GetProjectId("${env.projectName}")
                    gitlab.CreateBranch(projectId, "${env.branchName}", "${env.baseBranch}" )
                }
            }
        }
    }
}




gitlab.groovy

package org.devops


def HttpReq(apiURL, method){
    gitlabURL = "http://192.168.1.200/api/v4"
    withCredentials([string(credentialsId: 'b0e34f3a-4ecb-4298-8e5f-2cbfd2c1f571', variable: 'GITLAB_TOKEN')]) {
        response = sh returnStdout: true, script: """
            curl --location \
                --request ${method} \
                "${gitlabURL}/${apiURL}" \
                --header "PRIVATE-TOKEN: ${GITLAB_TOKEN}"
        """
    }
    return response
}


// 创建分支
def CreateBranch(projectId, branchName, baseBranch ){
    apiURL = "projects/${projectId}/repository/branches?branch=${branchName}&ref=${baseBranch}"
    HttpReq(apiURL, "POST")
}


// 获取项目id
def GetProjectId(projectName){
    apiURL = "projects?search=${projectName}"
    result = HttpReq(apiURL, "GET")
    result = readJSON text: result


    return result[0]["id"]
}




Jenkins系统设置


最终效果:

课程信息

课程回放:
https://www.idevops.site/detail/l_61128c62e4b0a27d0e3bd3c6/4
B站:
https://space.bilibili.com/475079413

DevOps端到端工具链实践训练营【下周开课】

关于我们

泽阳,DevOps领域实践者。专注于企业级DevOps运维开发技术实践分享,主要以新Linux运维技术、DevOps技术课程为主。丰富的一线实战经验,课程追求实用性获得多数学员认可。课程内容均来源于企业应用,在这里既学习技术又能获取热门技能,欢迎您的到来!

辛苦 帮转发,点个再看吧,前进的动力...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值