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运维开发技术实践分享,主要以新Linux运维技术、DevOps技术课程为主。丰富的一线实战经验,课程追求实用性获得多数学员认可。课程内容均来源于企业应用,在这里既学习技术又能获取热门技能,欢迎您的到来!
辛苦 帮转发,点个再看吧,前进的动力...