当前位置: 首页 > news >正文

飞天使-学以致用-devops知识点4-SpringBoot项目CICD实现(实验失败,了解大概流程)

文章目录

        • 代码准备
          • 创建jenkins 任务
          • 测试推送
          • 使用项目里面的jenkinsfile 进行升级操作
      • 文字版本流程
        • 项目构建

代码准备

推送代码到gitlab
代码去叩叮狼教育找 k8sk8s

创建jenkins 任务

创建一个k8s-cicd-demo 流水线任务

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

将jenkins 里面构建时候的地址还有token, 给到gitlab里面的webhooks 粘贴好
http://108.1.1.1:31861/project/k8s-cicd-demo
3b2976e09fb121a1d949c15289a87727
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

测试推送

在这里插入图片描述
在这里插入图片描述

使用项目里面的jenkinsfile 进行升级操作

任务构建里面选择git 的http地址
在这里插入图片描述
在这里插入图片描述

创建harbor 凭据
在这里插入图片描述

配置kubeconfig
管理Jenkins-> Managed files->Add->Custom file ->Content字段内容是kubeconfig(默认路径在master节点/root/.kube/config–> cat /root/.kube/config)获取内容

在这里插入图片描述

文字版本流程

在这里插入图片描述

配置流水线节点标签
系统管理 > 节点管理 > 列表中 master 节点最右侧的齿轮按钮

修改标签的值与项目中 Jenkinsfile 中 agent > kubernetes > label 的值相匹配

在首页点击 Create a Job 创建一个流水线风格的项目

----------- Jenkins 流水线项目 Webhook 配置 -----------
在 Jenkins 项目配置下找到构建触发器栏目

勾选 Build when a change is pushed to GitLab. GitLab webhook URL: http://192.168.113.121:31216/project/k8s-cicd-demo

上方的 URL 就是用于配置到 gitlab 项目 webhook 的地址
生成的token也复制到gitlab 的webhook地址中去

启用 Gitlab 构建触发器:
Push Events:勾选,表示有任意推送到 git 仓库的操作都会触发构建
Opend Merge Request Events:勾选,表示有请求合并时触发构建

点击高级 > Secret Token > Generate 按钮,生成 token

保存以上配置

----------- GitLab 项目 Webhook 配置 -----------
进入 GitLab 项目设置界面 > Webhooks

将上方 Jenkins 中的 URL 配置到 URL 处

将上方生成的 Secret Token 配置到 Secret 令牌

按照需求勾选触发来源,这里我依然勾选 推送事件、合并请求事件

取消 SSL 验证

点击添加 webhook 按钮,添加后可以点击测试确认链接是否可以访问

流水线:选择定义为 Pipeline script from SCM 从远程仓库拉取 Jenkinsfile 配置
配置 SCM 为 Git
Repositories:
Repository URL:仓库地址
Credentials:仓库访问的账号密码
Branches to build:选择拉取哪个分支下的代码
脚本路径:Jenkinsfile 脚本文件名称以及所在路径

通过系统管理 > Manage Credentials > 凭据 > System > 全局凭证 > Add Credentials 添加 Username with password 类型凭证

填写好用户名密码后,需要注意凭证 id 要与 Jenkinsfile 中的 DOCKER_CREDENTIAL_ID 一致

通过系统管理 > Manage Credentials > 凭据 > System > 全局凭证 > Add Credentials 添加 Username with password 类型凭证

填写好用户名密码后,需要注意凭证 id 要与 Jenkinsfile 中的 GIT_CREDENTIAL_ID 一致

# 1. 事先安装 Config File Provider 插件
# 2. 进入系统管理 > Mapped files > Add a new Config 添加配置文件
# 2.1 Type 选择 Custom file 点击 next
# 2.2 在 k8s master 节点执行 cat ~/.kube/config 查看文件内容,并将所有内容复制
# 2.3 将复制的内容贴到 Config file 的 Content 中后点击 Submit 保存并提交
# 3. 复制保存后文件 id 到 Jenkinsfile 中的 KUBECONFIG_CREDENTIAL_ID 处# 1. 进入 SonarQube 系统,点击右上角用户头像 > 我的账号 进入设置页面
# 2. 点击 安全 > 填写令牌名称 > 点击生成按钮生成 token > 复制生成后的 token
# 3. 进入 jenkins 添加凭证管理页面,添加 Secret Text 类型的凭证,将 token 贴入其中
# 4. 保证凭证 id 与 Jenkinsfile 文件中的 SONAR_CREDENTIAL_ID 一致# 1. 进入 SonarQube 管理页面,点击顶部菜单栏的配置 > 配置(小三角) > 网络调用
# 2. 点击右侧创建按钮创建新的 Webhook,并填写名称与地址
# 名称:jenkins
# 地址:http://jenkins访问ip:端口/sonarqube-webhook/
项目构建

方式一:在 Jenkins 管理后台,进入项目中点击立即构建进行项目构建

方式二:在开发工具中修改代码,并将代码提交到远程仓库自动触发构建

在这里插入图片描述

jenkinsfile代码参考逻辑

pipeline {agent {node {label 'maven'}}stages {stage('clone code') {steps {container('maven') {git(url: 'http://108.1.1.1:28080/gitlab-instance-1a76a240/k8s-cicd-demo.git', credentialsId: 'git-user-pass', branch: '$BRANCH_NAME', changelog: true, poll: false)}}}stage('unit test') {steps {container('maven') {sh 'mvn clean test'}}}stage('sonarqube analysis') {agent nonesteps {withCredentials([string(credentialsId : 'sonarqube' ,variable : 'SONAR_TOKEN' ,)]) {withSonarQubeEnv('sonar') {container('maven') {sh '''mvn sonar:sonar -Dsonar.projectKey=$APP_NAME
echo "mvn sonar:sonar -Dsonar.projectKey=$APP_NAME"'''}}timeout(unit: 'MINUTES', activity: true, time: 5) {waitForQualityGate 'true'}}}}stage('build & push') {steps {container('maven') {sh 'mvn clean package -DskipTests'sh 'docker build -f Dockerfile -t $REGISTRY/$DOCKERHUB_NAMESPACE/$APP_NAME:SNAPSHOT-$BUILD_NUMBER .'withCredentials([usernamePassword(credentialsId : 'harbor-user-pass' ,passwordVariable : 'DOCKER_PASSWORD' ,usernameVariable : 'DOCKER_USERNAME' ,)]) {sh '''echo "$DOCKER_PASSWORD" | docker login $REGISTRY -u "$DOCKER_USERNAME" --password-stdin
docker push $REGISTRY/$DOCKERHUB_NAMESPACE/$APP_NAME:SNAPSHOT-$BUILD_NUMBER'''}}}}stage('push latest') {when {branch 'master'}steps {container('maven') {sh 'docker tag $REGISTRY/$DOCKERHUB_NAMESPACE/$APP_NAME:SNAPSHOT-$BUILD_NUMBER $REGISTRY/$DOCKERHUB_NAMESPACE/$APP_NAME:latest'sh 'docker push $REGISTRY/$DOCKERHUB_NAMESPACE/$APP_NAME:latest'}}}stage('deploy to dev') {steps {container('maven') {input(id: 'deploy-to-dev', message: 'deploy to dev?')withCredentials([kubeconfigContent(credentialsId : 'kubeconfig-id' ,variable : 'ADMIN_KUBECONFIG' ,)]) {sh 'mkdir -p ~/.kube/'sh 'echo "$ADMIN_KUBECONFIG" > ~/.kube/config'sh '''sed -i\'\' "s#REGISTRY#$REGISTRY#" deploy/cicd-demo-dev.yaml
sed -i\'\' "s#DOCKERHUB_NAMESPACE#$DOCKERHUB_NAMESPACE#" deploy/cicd-demo-dev.yaml
sed -i\'\' "s#APP_NAME#$APP_NAME#" deploy/cicd-demo-dev.yaml
sed -i\'\' "s#BUILD_NUMBER#$BUILD_NUMBER#" deploy/cicd-demo-dev.yaml
kubectl apply -f deploy/cicd-demo-dev.yaml'''}}}}stage('push with tag') {agent nonewhen {expression {params.TAG_NAME =~ /v.*/}}steps {input(message: 'release image with tag?', submitter: '')withCredentials([usernamePassword(credentialsId : 'gitlab-user-pass' ,passwordVariable : 'GIT_PASSWORD' ,usernameVariable : 'GIT_USERNAME' ,)]) {sh 'git config --global user.email "liugang@wolfcode.cn" 'sh 'git config --global user.name "xiaoliu" 'sh 'git tag -a $TAG_NAME -m "$TAG_NAME" 'sh 'git push http://$GIT_USERNAME:$GIT_PASSWORD@$GIT_REPO_URL/$GIT_ACCOUNT/k8s-cicd-demo.git --tags --ipv4'}container('maven') {sh 'docker tag $REGISTRY/$DOCKERHUB_NAMESPACE/$APP_NAME:SNAPSHOT-$BUILD_NUMBER $REGISTRY/$DOCKERHUB_NAMESPACE/$APP_NAME:$TAG_NAME'sh 'docker push $REGISTRY/$DOCKERHUB_NAMESPACE/$APP_NAME:$TAG_NAME'}}}stage('deploy to production') {agent nonewhen {expression {params.TAG_NAME =~ /v.*/}}steps {input(message: 'deploy to production?', submitter: '')container('maven') {sh '''sed -i\'\' "s#REGISTRY#$REGISTRY#" deploy/cicd-demo.yaml
sed -i\'\' "s#DOCKERHUB_NAMESPACE#$DOCKERHUB_NAMESPACE#" deploy/cicd-demo.yaml
sed -i\'\' "s#APP_NAME#$APP_NAME#" deploy/cicd-demo.yaml
sed -i\'\' "s#TAG_NAME#$TAG_NAME#" deploy/cicd-demo.yamlkubectl apply -f deploy/cicd-demo.yaml'''}}}}environment {REGISTRY = '108.1.1.1:8858'DOCKER_CREDENTIAL_ID = 'harbor-user-pass'GIT_REPO_URL = '108.1.1.1:28080'GIT_CREDENTIAL_ID = 'git-user-pass'KUBECONFIG_CREDENTIAL_ID = '804095f0-4bf5-4aed-b920-3f45a586bf52'DOCKERHUB_NAMESPACE = 'wolfcode'GITHUB_ACCOUNT = 'root'APP_NAME = 'k8s-cicd-demo'}parameters {string(name: 'BRANCH_NAME', defaultValue: 'master', description: '请选择要发布的分支')string(name: 'TAG_NAME', defaultValue: 'snapshot', description: '标签名称,必须以 v 开头,例如:v1、v1.0.0')}
}

参考资料:叩叮狼教育

相关文章:

  • mysql 常用命令练习
  • 初识C语言—常见关键字
  • NLog条件配置——实现将包含某个特定字符串日志写入指定文件
  • 蓝桥杯备战刷题three(自用)
  • MapStruct 教程
  • 【Java面试题】SpringBoot与Spring的区别
  • Programming Abstractions in C阅读笔记:p308-p311
  • 暗九之凶险,更甚于明九
  • K8S部署postgresql
  • Node.js_基础知识(CommonJS模块化)
  • Hololens 2应用开发系列(1)——使用MRTK在Unity中设置混合现实场景并进行程序模拟
  • 23端口登录的Telnet命令+传输协议FTP命令
  • Django 表单
  • 【Git】深入理解 Git 分支合并操作:git merge dev 命令详解
  • 2024年,智慧文旅领航新时代,重塑旅行体验的未来篇章!
  • JavaScript-如何实现克隆(clone)函数
  • [微信小程序] 使用ES6特性Class后出现编译异常
  • Android组件 - 收藏集 - 掘金
  • FastReport在线报表设计器工作原理
  • golang中接口赋值与方法集
  • nginx 配置多 域名 + 多 https
  • 闭包--闭包作用之保存(一)
  • 前端面试之CSS3新特性
  • 时间复杂度与空间复杂度分析
  • 使用agvtool更改app version/build
  • 王永庆:技术创新改变教育未来
  • 微信小程序实战练习(仿五洲到家微信版)
  • 异常机制详解
  • Semaphore
  • 函数计算新功能-----支持C#函数
  • ​LeetCode解法汇总2304. 网格中的最小路径代价
  • # include “ “ 和 # include < >两者的区别
  • # 学号 2017-2018-20172309 《程序设计与数据结构》实验三报告
  • #宝哥教你#查看jquery绑定的事件函数
  • #每天一道面试题# 什么是MySQL的回表查询
  • (13):Silverlight 2 数据与通信之WebRequest
  • (14)目标检测_SSD训练代码基于pytorch搭建代码
  • (AtCoder Beginner Contest 340) -- F - S = 1 -- 题解
  • (C语言)输入一个序列,判断是否为奇偶交叉数
  • (Matlab)遗传算法优化的BP神经网络实现回归预测
  • (pytorch进阶之路)CLIP模型 实现图像多模态检索任务
  • (六)激光线扫描-三维重建
  • (排序详解之 堆排序)
  • (七)理解angular中的module和injector,即依赖注入
  • (全部习题答案)研究生英语读写教程基础级教师用书PDF|| 研究生英语读写教程提高级教师用书PDF
  • (四)图像的%2线性拉伸
  • *Django中的Ajax 纯js的书写样式1
  • .locked1、locked勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .net Application的目录
  • .NET Core 实现 Redis 批量查询指定格式的Key
  • .net wcf memory gates checking failed
  • .sys文件乱码_python vscode输出乱码
  • .vollhavhelp-V-XXXXXXXX勒索病毒的最新威胁:如何恢复您的数据?
  • /usr/bin/python: can't decompress data; zlib not available 的异常处理
  • /usr/lib/mysql/plugin权限_给数据库增加密码策略遇到的权限问题