手机网站表单验证,电商广告网络推广,Wordpress管理媒体库,广州天成网络技术有限公司目录
一、实验
1.环境
2.GitLab 查看项目
3.Jira 远程触发 Jenkins 实现合并 GitLab 分支
4.K8S master节点操作
5.Jira 发布流水线 一、实验
1.环境
#xff08;1#xff09;主机
表1 主机
主机架构版本IP备注master1K8S master节点1.20.6192.168.204.180 jenkins…目录
一、实验
1.环境
2.GitLab 查看项目
3.Jira 远程触发 Jenkins 实现合并 GitLab 分支
4.K8S master节点操作
5.Jira 发布流水线 一、实验
1.环境
1主机
表1 主机
主机架构版本IP备注master1K8S master节点1.20.6192.168.204.180 jenkins slave 从节点 jira9.12.1192.168.204.180:8801node1K8S node节点1.20.6192.168.204.181node2K8S node节点1.20.6192.168.204.182jenkins jenkins主节点 2.414.2192.168.204.15:8080 gitlab runner 从节点 harbor私有仓库1.2.2192.168.204.15gitlabgitlab 主节点 12.10.14192.168.204.8:82 jenkins slave 从节点 sonarqube9.6192.168.204.8:9000
2查看K8S集群状态
# kubectl get node 2.GitLab 查看项目
1GitLab查看前端项目项目编号为20 3.Jira 远程触发 Jenkins 实现合并 GitLab 分支
1点击系统 2管理员入口 需要输入密码 3修改网络钩子选择Issue操作事件、Release操作事件来触发 问题里添加“已更新”
4完成修改 5修复项目版本 指定1.1.6版本 6Jenkins触发流水线JSON格式转换 7拿到关键数据
1用于创建gitlab 项目名称
issue.fields.components 2 用于gitlab 分支名称
issue.key3用于gitlab 项目组名称
issue.fields.project.name4用于gitlab 特性分支
issue.fields.fixVersions 8Jira官网查询issues API接口 一个Jira项目中的issues对应一个GitLab的特性分支
Jira REST API examples (atlassian.com)
curl \-D- \-u charlie:charlie \-X GET \-H Content-Type: application/json \http://localhost:8080/rest/api/2/search?jqlassigneecharlie 9Postman GET 方式测试取到Jira 的修复版本信息fixVersion
http://192.168.204.180:8801/rest/api/2/search?jqlproject DEVOPS3 AND fixVersion 1.1.6 (10)GitLab官网查询合并请求 API
Merge requests API | GitLab
POST /projects/:id/merge_requests (11) Postman (POST 方式)测试创建合并请求
http://192.168.204.8:82/api/v4/projects/20/merge_requests 12GitLab查看新增的合并请求 13合并请求详细信息 14这里先关闭合并请求 15Jenkins修改Jira流水线代码
webhookData readJSON text: ${webhookData}//jira 事件
jiraEvent webhookData.webhookEvent
jiraProjectName webhookData.issue.fields.project.name// 获取gitlab参数
gitlabProjects []
gitlabBranchName webhookData.issue.key
gitlabGroupName jiraProjectNamefor (i in webhookData.issue.fields.components){gitlabProjects.add(i[name])
}//描述信息
currentBuild.description Trigger by ${jiraEvent} \n project: ${gitlabProjects} \n branch: ${gitlabBranchName}pipeline {agent { label build }stages {stage(Process) {steps {script {println(gitlabProjects)println(gitlabBranchName)projectIds GetProjectsId(gitlabGroupName,gitlabProjects)switch(jiraEvent) {case jira:issue_created:println(projectIds)for (id in projectIds){CreateBranch(id,gitlabBranchName,master)}breakcase jira:issue_updated:if (webhookData.issue.fields.fixVersions.size() 1){jiraFixVersion webhookData.issue.fields.fixVersions[0][name]//获取fixversion关联的所有issuesissues GetIssuesByFixVersion(jiraProjectName, jiraFixVersion)// 在issue关联的所有项目创建版本分支for (id in projectIds){CreateBranch(id, RELEASE-${jiraFixVersion}, master) //RELEASE-1.1.6// 创建合并请求 特性分支 版本分支for(issue in issues) {CreateMergeRequest(id, issue, RELEASE-${jiraFixVersion} )}}break}default:println(error)break}}}}}
}// 创建合并请求def CreateMergeRequest(projectId,sourceBranch,targetBranch) {try {apiUrl projects/${projectId}/merge_requestsreqBody {source_branch: ${sourceBranch},target_branch:${targetBranch},title: ${sourceBranch}${targetBranch}byJenkins}response HttpReq(POST, apiUrl, reqBody)}catch (Exception e) {println(e)}
}// 查询JiraReleaseissuedef GetIssuesByFixVersion(projectName, fixVersion){jql project%20%20${projectName}%20AND%20fixVersion%20%20${fixVersion}response sh returnStdout: true,script: curl \-u admin:admin \-H Content-Type: application/json \--request GET http://192.168.204.180:8801/rest/api/2/search?jql${jql} -sresponse readJSON text: ${response - \n} issues []for (i in response[issues]){issues.add(i[key])}return issues
}// 创建分支
def CreateBranch(projectId,newBranchName,sourceBranchName){try {apiUrl projects/${projectId}/repository/branches?branch${newBranchName}ref${sourceBranchName}response HttpReq(POST, apiUrl, )}catch(Exception e){println(e)}
}// 获取所有项目id
def GetProjectsId(gitlabGroupName,gitlabProjects){gitlabProjectIds []for (project in gitlabProjects){id GetProjectId(gitlabGroupName,project)if (id ! 0){gitlabProjectIds.add(id)}}return gitlabProjectIds
}// 根据项目名称获取项目iddef GetProjectId(groupName,projectName){apiUrl projects?search${projectName}response HttpReq(GET, apiUrl, )response readJSON text: response.content - \nif (response.size() 1){for (i in response){if (i[path_with_namespace] ${groupName}/${projectName}){return i[id]}}}else {return response[0][id]}}// 封装HTTP
def HttpReq(reqType, reqUrl,reqBody ){def gitServer http://192.168.204.8:82/api/v4withCredentials([string(credentialsId: 02dce3ff-4e46-4de2-b079-5dd6093d4f64, variable: GITLABTOKEN)]) {response httpRequest acceptType: APPLICATION_JSON_UTF8,consoleLogResponseBody: true,contentType: APPLICATION_JSON_UTF8,customHeaders: [[maskValue: false, name: PRIVATE-TOKEN, value: ${GITLABTOKEN}]],httpMode: ${reqType},url: ${gitServer}/${reqUrl},wrapAsMultipart: false,requestBody: ${reqBody}}return response
}
保存 4.K8S master节点操作
1K8S master节点另开一个终端用watch命令观察pod变化
# watch -n 1 kubectl get pod -n devops03 2外部测试访问
# curl http://devops03-devops-ui.devops.com:31291 3删除命名空间devops03
# kubectl delete ns devops03 4观察pod变化 5.Jira 发布流水线
1Jira新建问题 2Jira创建事件触发Jenkins流水线 (3) GitLab更新特性分支DEVOPS-11 4修改GitLab修改特性分支Dockerfile并提交特性分支DEVOPS3-11 5Jira 新建版本 6查看版本 7修改版本为1.1.11 8Jenkins更新事件触发Jenkins流水线 9GitLab提示特性分支合并到版本分支的请求 10合并请求 11完成合并 12查看合并
13Jenkins构建基于HELM的K8S CI流水线 14成功 15查看Blue Ocean (16) 查看阶段视图 17Harbor查看镜像
192.168.204.15/devops03/devops03-devops-ui:RELEASE-1.1.11 18K8S node节点连接Harbor拉取镜像
# docker login -u admin -p Harbor12345 192.168.204.15# docker pull 192.168.204.15/devops03/devops03-devops-ui:RELEASE-1.1.11# docker logout 192.168.204.15
node1节点 node2节点 19K8S master节点创建命名空间devops03目前无资源
# kubectl create ns devops03# kubectl get all -n devops0320GitLab 查看HELM模板文件values.yaml 已更新镜像标签为RELEASE-1.1.11 21Jenkins构建基于HELM的K8S CD流水线 22观察pod变化 23外部测试访问当前版本为1.1.11
# curl http://devops03-devops-ui.devops.com:31291 24最后版本分支 RELEASE-1.1.11 合并到master分支