Kubernetes 集群实战(微课版)课件 项目9 持续集成和持续部署_第1页
Kubernetes 集群实战(微课版)课件 项目9 持续集成和持续部署_第2页
Kubernetes 集群实战(微课版)课件 项目9 持续集成和持续部署_第3页
Kubernetes 集群实战(微课版)课件 项目9 持续集成和持续部署_第4页
Kubernetes 集群实战(微课版)课件 项目9 持续集成和持续部署_第5页
已阅读5页,还剩136页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Kubernetes集群实战(微课版)工业和信息化精品系列教材——云计算技术项目9

持续集成和持续部署能力CAPACITY要求掌握基于Kubernetes的应用程序从开发到部署的流程学会使用Harbor部署企业级Docker注册中心了解DevOps与CI/CD的概念,学会搭建云原生应用程序的CI/CD平台了解Jenkins项目类型和流水线、主节点和代理节点掌握Jenkins的项目CI/CD实施方法学会在Kubernetes中动态创建Pod代理以实施CI/CD任务9.2搭建云原生应用程序的CI/CD平台任务9.1在Kubernetes中部署开发的应用程序任务9.3使用Jenkins的Maven项目实施CI/CD任务9.4使用Jenkins的流水线项目实施CI/CD任务9.5在Kubernetes中动态创建代理节点实施CI/CD任务9.1在Kubernetes中部署开发的应用程序任务说明01OPTION02OPTION03OPTION了解在Kubernetes中部署应用程序的基本流程了解企业级Docker注册服务器软件Harbor掌握Harbor的部署和使用04OPTION掌握手动将应用程序部署到Kubernetes的流程和方法任务9.1在Kubernetes中部署开发的应用程序相关知识9.1.1将应用程序部署到Kubernetes的基本流程编写应用程序代码对应用程序进行测试编写Dockerfile文件并构建Docker镜像将构建的Docker镜像推送到Docker注册中心进行发布编写YAML文件,用于对Kubernetes资源进编写YAML文件基于YAML资源配置文件在Kubernetes中运行应用程序更改YAML文件中的Docker镜像来实现应用程序的升级任务9.1在Kubernetes中部署开发的应用程序相关知识9.1.2开源的企业级DockerRegistry项目HarborCNCF托管的开源的可信云原生DockerRegistry项目。提供用于存储和分发Docker镜像的企业级注册服务器。云原生注册服务器。基于角色的访问控制。基于策略的复制。支持混合和多云场景中的多数据中心部署。增强的安全功能。任务9.1在Kubernetes中部署开发的应用程序任务实现任务9.1.1基于Harbor自建企业级Docker注册中心准备Harbor安装环境安装了Docker。安装DockerCompose。私有Docker注册中心(容器名为myregistry)已被卸载。任务9.1在Kubernetes中部署开发的应用程序任务实现任务9.1.1基于Harbor自建企业级Docker注册中心安装Harbor(1)下载合适的版本,本例下载的是2.7.0版。(2)将该软件包解压到/opt目录中。(3)将当前目录切换到/opt/harbor(此为Harbor的DockerCompose项目目录),再将Harbor预置的默认配置文件模板复制一份。(5)确认当前目录为/opt/harbor,进行预配置。[root@docker_devharbor]#./preparepreparebasedirissetto/opt/harbor......Unabletofindimage'goharbor/prepare:v2.7.0'locallyv2.7.0:Pullingfromgoharbor/prepareHTTPprotocolisinsecure.......(6)进行一键安装。[root@docker_devharbor]#./install.sh[Step0]:checkingifdockerisinstalled.........✔----Harborhasbeeninstalledandstartedsuccessfully.----任务9.1在Kubernetes中部署开发的应用程序任务实现任务9.1.1基于Harbor自建企业级Docker注册中心使用浏览器访问Harbor任务9.1在Kubernetes中部署开发的应用程序任务实现任务9.1.1基于Harbor自建企业级Docker注册中心使用docker命令访问Harbor修改/etc/docker/daemon.json文件。{"insecure-registries":[":5000"]}执行systemctlrestartdocker命令重启Docker服务使配置更改生效测试使用docker命令访问Harbor服务器。#dockerlogin:5000Username:adminPassword:WARNING!Yourpasswordwillbestoredunencryptedin/root/.docker/config.json.Configureacredentialhelpertoremovethiswarning.See/engine/reference/commandline/login/#credentials-storeLoginSucceeded#dockertaghello-world:5000/k8s/hello-world:v1#dockerpush:5000/k8s/hello-world:v1Thepushreferstorepository[:5000/k8s/hello-world]......任务9.1在Kubernetes中部署开发的应用程序任务实现任务9.1.1基于Harbor自建企业级Docker注册中心Harbor本身的管理操作切换到DockerCompose项目目录dockercomposeps:用于查看运行正在运行的Harbor服务。dockercomposeup-d:用于从后台启动Harbor服务。dockercomposedown:用于停止Harbor服务。任务9.1在Kubernetes中部署开发的应用程序任务实现任务9.1.2在Kubernetes集群中使用来自Harbor的镜像让containerd访问未启用HTTPS的Harbor服务器在Kubernetes工作节点中修改/etc/containerd/config.toml文件。[plugins."io.containerd.grpc.v1.cri".registry.mirrors.":5000"]endpoint=[":5000"]重启containerd,进行拉取镜像测试。[root@node01~]#systemctlrestartcontainerd[root@node01~]#crictlpull--credsadmin:Harbor12345:5000/k8s/hello-world:v1Imageisuptodateforsha256:feb5d9fea6a5e9606aa995e879d862b825965ba48de054caab5ef356dc6b3412任务9.1在Kubernetes中部署开发的应用程序任务实现任务9.1.2在Kubernetes集群中使用来自Harbor的镜像提供Harbor的认证信息如果工作节点的/etc/containerd/config.toml配置文件提供有Harbor的管理员账号的认证信息,则删除这些认证信息,并重启containerd。在master01主机上执行以下命令创建用于Harbor认证的Secret对象。[root@master01~]#kubectlcreatesecretdocker-registryharbor-cred--docker-server=:5000--docker-username=admin--docker-password=Harbor12345secret/harbor-credcreated[root@master01~]#kubectlgetsecretNAMETYPEDATAAGEharbor-credkubernetes.io/dockerconfigjson15s任务9.1在Kubernetes中部署开发的应用程序任务实现任务9.1.2在Kubernetes集群中使用来自Harbor的镜像提供Harbor的认证信息在master01主机上编写Pod配置文件(命名为hello-world-pod1.yaml)。apiVersion:v1kind:Podmetadata:name:hello-worldspec:#配置Pod的具体规格

restartPolicy:OnFailurecontainers:-name:hello-worldimage:":5000/k8s/hello-world:v1"#Harbor的私有仓库镜像

nodeName:node01#指定将Pod直接调度到node01节点上

imagePullSecrets:-name:harbor-cred基于上述配置文件创建Pod。任务9.1在Kubernetes中部署开发的应用程序任务实现任务9.1.2在Kubernetes集群中使用来自Harbor的镜像提供Harbor的认证信息执行kubectldescribepodhello-world命令查看该Pod的详细信息,可以发现该Pod在node01节点上成功部署,hello-world镜像被成功拉取。

NormalPulling32skubeletPullingimage":5000/k8s/hello-world:v1"NormalPulled32skubeletSuccessfullypulledimage":5000/k8s/hello-world:v1"in110.536813ms删除该Pod,并转到node01节点上使用crictlrmi命令删除hello-world镜像,清理实验环境。任务9.1在Kubernetes中部署开发的应用程序任务实现任务9.1.3将开发的应用程序部署到Kubernetes准备Maven打包环境安装JDK以便编译Java代码。yuminstall-yjava-1.8.0-openjdk-devel.x86_64[root@docker_dev~]#javac-versionjavac1.8.0_362安装Maven软件。[root@docker_dev~]#mvn-vApacheMaven3.8.8(4c87b05d9aedce574290d1acc98575ed5eb6cd39)......任务9.1在Kubernetes中部署开发的应用程序任务实现任务9.1.3将开发的应用程序部署到Kubernetes准备项目源码│pom.xml│README.md└─src├─main│└─java│└─com│└─abc│└─demo│Application.java│DemoController.java└─test└─java└─com└─abc└─demoApplicationTests.java任务9.1在Kubernetes中部署开发的应用程序任务实现任务9.1.3将开发的应用程序部署到Kubernetes使用Maven工具将应用程序打包安装JDK以便编译Java代码。yuminstall-yjava-1.8.0-openjdk-devel.x86_64[root@docker_dev~]#javac-versionjavac1.8.0_362安装Maven软件。[root@docker_dev~]#mvn-vApacheMaven3.8.8(4c87b05d9aedce574290d1acc98575ed5eb6cd39)......任务9.1在Kubernetes中部署开发的应用程序任务实现任务9.1.3将开发的应用程序部署到Kubernetes使用Maven工具将应用程序打包[root@docker_devdeploy-demo]#mvncleanpackage[INFO]Scanningforprojects.........[INFO]Buildingjar:/root/spring-boot-demo/target/spring-boot-demo-0.0.1-SNAPSHOT.jar......[INFO]BUILDSUCCESS[root@docker_devdeploy-demo]#java-jartarget/spring-boot-demo-0.0.1-SNAPSHOT.jar任务9.1在Kubernetes中部署开发的应用程序任务实现任务9.1.3将开发的应用程序部署到Kubernetes使用Maven工具将应用程序打包

测试所生成的Java类任务9.1在Kubernetes中部署开发的应用程序任务实现任务9.1.3将开发的应用程序部署到Kubernetes构建应用程序的Docker镜像(1)在该项目目录下创建Dockerfile文件并在其中添加以下代码。FROMopenjdk:8-jreCOPYtarget/spring-boot-demo-0.0.1-SNAPSHOT.jar/app.jarENTRYPOINT["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"](2)在该项目目录下执行构建镜像的命令。[root@docker_devdeploy-demo]#dockerbuild-tspring-boot-demo.(3)基于该镜像运行一个容器进行测试。[root@docker_devdeploy-demo]#dockerrun--rm--namespring-boot-demo-d-p8080:8080spring-boot-demo(4)访问该容器进行实测。[root@docker_devdeploy-demo]#curl:8080HelloWorld!(5)停止该容器,会自动删除该容器。[root@docker_devdeploy-demo]#dockerstopspring-boot-demo任务9.1在Kubernetes中部署开发的应用程序任务实现任务9.1.3将开发的应用程序部署到Kubernetes将Docker镜像发布到Docker注册中心[root@docker_dev~]#dockertagspring-boot-demo:5000/k8s/spring-boot-demo:v0.90[root@docker_dev~]#dockerpush:5000/k8s/spring-boot-demo:v0.90任务9.1在Kubernetes中部署开发的应用程序任务实现任务9.1.3将开发的应用程序部署到Kubernetes基于Kubernetes资源配置文件运行应用程序apiVersion:v1kind:Service#类型为Servicemetadata:name:sbdemo-svcspec:type:NodePortports:-name:sbdemoport:8080#让集群知道Service绑定的端口

nodePort:31008#节点上绑定的端口

targetPort:8080#目标Pod的端口

protocol:TCPselector:app:sbdemo---任务9.1在Kubernetes中部署开发的应用程序任务实现任务9.1.3将开发的应用程序部署到Kubernetes基于Kubernetes资源配置文件运行应用程序apiVersion:apps/v1kind:Deployment#类型为Deploymentmetadata:name:sbdemo-deployspec:replicas:1selector:matchLabels:app:sbdemotemplate:metadata:labels:app:sbdemospec:containers:-name:sbdemoimage::5000/k8s/spring-boot-demo:v0.90imagePullPolicy:Alwaysports:-containerPort:8080imagePullSecrets:-name:harbor-cred#提供拉取私有镜像认证的Secret对象任务9.2搭建云原生应用程序的CI/CD平台任务9.1在Kubernetes中部署开发的应用程序任务9.3使用Jenkins的Maven项目实施CI/CD任务9.4使用Jenkins的流水线项目实施CI/CD任务9.5在Kubernetes中动态创建代理节点实施CI/CD任务9.2搭建云原生应用程序的CI/CD平台任务说明01OPTION02OPTION03OPTION了解DevOps与CI/CD的概念和工作机制了解CI/CD主要工具学会规划和组建CI/CD平台04OPTION掌握GitLab服务器的部署和使用方法05OPTION掌握Jenkins服务器的部署和基本配置任务9.2搭建云原生应用程序的CI/CD平台相关知识9.2.1DevOps的概念DevOps——开发运维一体化。突出软件开发人员和运维人员的沟通合作。DevOps的目标是让业务所要求的那些变化能随时上线可用,加快项目的交付速度和提升质量。DevOps本质上是全方位的服务业务。任务9.2搭建云原生应用程序的CI/CD平台相关知识9.2.2CI/CD的概念持续集成表示开发应用程序时频繁地向主干提交代码,新提交的代码在最终合并到主干前,需要经过编译和自动化测试工作流进行验证。持续交付是指在持续集成的基础上,将集成后的代码部署到更贴近真实运行环境的类生产环境中。持续部署表示通过自动化的构建、测试和部署循环来快速交付高质量的软件产品。将Kubernetes和CI/CD结合起来,为云原生应用程序实施CI/CD使软件产品交付周期更加稳健,同时简化了开发和部署工作流。任务9.2搭建云原生应用程序的CI/CD平台相关知识9.2.3CI/CD的主要工具Jenkins——持续集成工具。GitLab——代码仓库管理系统。Harbor——企业级Docker注册中心。任务9.2搭建云原生应用程序的CI/CD平台相关知识9.2.4CI/CD平台的组建思路任务9.2搭建云原生应用程序的CI/CD平台任务实现任务9.2.1规划CI/CD平台选择GitLab、Jenkins、Harbor和Kubernetes的组合来搭建云原生应用程序的CI/CD平台。GitLab用于托管源码并进行版本控制。Jenkins作为核心的CI/CD工具,主导和协调整个DevOps业务。Harbor用于存储和发布镜像。Kubernetes集群用于实际部署和运行应用程序。任务9.2搭建云原生应用程序的CI/CD平台任务实现任务9.2.2部署GitLab服务器安装GitLab服务器(1)安装所需的依赖包。[root@docker_dev~]#yuminstall-ypolicycoreutils-pythonopenssh-server(2)下载GitLab安装包。(3)安装GitLab。[root@docker_dev~]#rpm-Uvhgitlab-ce-15.0.0-ce.0.el8.x86_64.rpm(4)根据提示修改配置文件/etc/gitlab/gitlab.rb,本例external_url字段值设置如下。external_url''(5)重新加载配置文件。[root@docker_dev~]#gitlab-ctlreconfigure任务9.2搭建云原生应用程序的CI/CD平台任务实现任务9.2.2部署GitLab服务器创建测试用的项目创建组创建项目任务9.2搭建云原生应用程序的CI/CD平台任务实现任务9.2.2部署GitLab服务器创建测试用的项目新建项目的详细信息任务9.2搭建云原生应用程序的CI/CD平台任务实现任务9.2.2部署GitLab服务器创建测试用的项目添加SSH密钥任务9.2搭建云原生应用程序的CI/CD平台任务实现任务9.2.2部署GitLab服务器将源代码提交到代码仓库[root@docker_dev~]#gitconfig--global"gly"[root@docker_dev~]#gitconfig--globaluser.email"k8s@"[root@docker_dev~]#gitclonegit@:k8s/spring-boot-demo.git[root@docker_dev~]#cdspring-boot-demo[root@docker_devspring-boot-demo]#cp-r/dev-app/09/spring-boot-demo/*.cp:是否覆盖'./README.md'?y[root@docker_devspring-boot-demo]#gitadd.[root@docker_devspring-boot-demo]#gitcommit-m"1stcommit"[root@docker_devspring-boot-demo]#gitpushoriginmain......To:k8s/spring-boot-demo.git3ae7d2c..4eb5178main->main任务9.2搭建云原生应用程序的CI/CD平台任务实现任务9.2.3部署Jenkins服务器安装Jenkins采用Docker部署,运行Jenkins容器#dockerrun--restartalways-uroot--privileged-d-p8999:8080-p50000:50000--namejenkins-v/var/jenkins_home:/var/jenkins_home-v/var/run/docker.sock:/var/run/docker.sock-v/usr/bin/docker:/usr/bin/dockerjenkins/jenkins:lts任务9.2搭建云原生应用程序的CI/CD平台任务实现任务9.2.3部署Jenkins服务器运行Jenkins安装向导执行一次性初始化操作解锁Jenkins任务9.2搭建云原生应用程序的CI/CD平台任务实现任务9.2.3部署Jenkins服务器运行Jenkins安装向导执行一次性初始化操作安装推荐的Jenkins插件任务9.2搭建云原生应用程序的CI/CD平台任务实现任务9.2.3部署Jenkins服务器运行Jenkins安装向导执行一次性初始化操作创建第一个管理员任务9.2搭建云原生应用程序的CI/CD平台任务实现任务9.2.3部署Jenkins服务器运行Jenkins安装向导执行一次性初始化操作实例配置任务9.2搭建云原生应用程序的CI/CD平台任务实现任务9.2.3部署Jenkins服务器运行Jenkins安装向导执行一次性初始化操作Jenkins已就绪任务9.2搭建云原生应用程序的CI/CD平台任务实现任务9.2.3部署Jenkins服务器运行Jenkins安装向导执行一次性初始化操作登录到Jenkins任务9.2搭建云原生应用程序的CI/CD平台任务实现任务9.2.3部署Jenkins服务器安装必要的Jenkins插件Jenkins插件管理界面任务9.2搭建云原生应用程序的CI/CD平台任务实现任务9.2.3部署Jenkins服务器安装必要的Jenkins插件安装GitLab插件任务9.2搭建云原生应用程序的CI/CD平台任务实现任务9.2.3部署Jenkins服务器安装必要的Jenkins插件Jenkins的插件安装状态任务9.2搭建云原生应用程序的CI/CD平台任务实现任务9.2.3部署Jenkins服务器安装必要的Jenkins插件查看已安装的Jenkins插件任务9.2搭建云原生应用程序的CI/CD平台任务实现任务9.2.4通过Jenkins集中管理凭据添加用于GitLab的凭据任务9.2搭建云原生应用程序的CI/CD平台任务实现任务9.2.4通过Jenkins集中管理凭据添加用于Harbor的凭据任务9.2搭建云原生应用程序的CI/CD平台任务实现任务9.2.4通过Jenkins集中管理凭据添加用于Kubernetes的凭据任务9.2搭建云原生应用程序的CI/CD平台任务实现任务9.2.4通过Jenkins集中管理凭据集中管理凭据任务9.2搭建云原生应用程序的CI/CD平台任务9.1在Kubernetes中部署开发的应用程序任务9.3使用Jenkins的Maven项目实施CI/CD任务9.4使用Jenkins的流水线项目实施CI/CD任务9.5在Kubernetes中动态创建代理节点实施CI/CD任务9.3使用Jenkins的Maven项目实施CI/CD任务说明01OPTION02OPTION03OPTION了解Jenkins的项目(任务)类型了解Maven项目的CI/CD实施流程学会通过Maven项目实施Java应用程序的CI/CD04OPTION掌握软件项目的自动化构建和部署的方法任务9.3使用Jenkins的Maven项目实施CI/CD相关知识9.3.1Jenkins的项目类型自由风格(FreeStyle)的项目Maven项目流水线(Pipeline)项目多配置项目多分支流水线项目任务9.3使用Jenkins的Maven项目实施CI/CD相关知识9.3.2Maven项目的CI/CD流程任务9.3使用Jenkins的Maven项目实施CI/CD任务实现任务9.3.1准备Maven项目的实施环境确认安装必要的Jenkins插件MavenIntegration插件——用于Java项目的清理、打包、测试等,提供Jenkins和Maven之间的深度集成,增加对项目之间自动触发的支持。PublishOverSSH插件——通过SSH协议发送已构建的制品,可用于向Kubernetes控制平面主机传送要部署的配置文件,可远程执行部署和更新命令。任务9.3使用Jenkins的Maven项目实施CI/CD任务实现任务9.3.1准备Maven项目的实施环境配置Maven安装选项任务9.3使用Jenkins的Maven项目实施CI/CD任务实现任务9.3.1准备Maven项目的实施环境配置PublishoverSSH选项配置SSH服务器的高级选项任务9.3使用Jenkins的Maven项目实施CI/CD任务实现任务9.3.1准备Maven项目的实施环境配置PublishoverSSH选项SSH服务器连接测试成功任务9.3使用Jenkins的Maven项目实施CI/CD任务实现任务9.3.2新建Maven项目实施CI/CD准备项目源码修改其中的DemoController.java文件:return"Hello!Pleasetestmaven!\n";Dockerfile文件的内容调整。FROMopenjdk:8-jreARGappADD$appapp.jarENTRYPOINT["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]spring-boot-demo.yaml文件更名为kube.yaml,容器的镜像语句修改

image::5000/k8s/spring-boot-demo任务9.3使用Jenkins的Maven项目实施CI/CD任务实现任务9.3.2新建Maven项目实施CI/CD将项目源码提交到代码仓库(1)在GitLab服务器上的k8s组中创建一个名为maven-demo的空白项目。(2)将GitLab服务器上的maven-demo代码仓库克隆到本地。[root@docker_dev~]#gitclonegit@0:k8s/maven-demo.git(3)将当前目录切换到本地仓库目录,将前面准备好的项目文件复制到本地仓库目录。(4)将代码提交到GitLab代码仓库:[root@docker_devmaven-demo]#gitadd.[root@docker_devmaven-demo]#gitcommit-m"testmaven"[root@docker_devmaven-demo]#gitpushoriginmain任务9.3使用Jenkins的Maven项目实施CI/CD任务实现任务9.3.2新建Maven项目实施CI/CD新建Maven项目任务9.3使用Jenkins的Maven项目实施CI/CD任务实现任务9.3.2新建Maven项目实施CI/CD新建Maven项目设置源代码管理选项任务9.3使用Jenkins的Maven项目实施CI/CD任务实现任务9.3.2新建Maven项目实施CI/CD新建Maven项目设置源代码管理选项修改分支名称任务9.3使用Jenkins的Maven项目实施CI/CD任务实现任务9.3.2新建Maven项目实施CI/CD新建Maven项目设置构建选项任务9.3使用Jenkins的Maven项目实施CI/CD任务实现任务9.3.2新建Maven项目实施CI/CD新建Maven项目设置构建选项添加构建之后的操作步骤任务9.3使用Jenkins的Maven项目实施CI/CD任务实现任务9.3.2新建Maven项目实施CI/CD新建Maven项目设置构建选项输入要执行的shell命令任务9.3使用Jenkins的Maven项目实施CI/CD任务实现任务9.3.2新建Maven项目实施CI/CD新建Maven项目设置构建选项设置SSH服务器选项任务9.3使用Jenkins的Maven项目实施CI/CD任务实现任务9.3.2新建Maven项目实施CI/CD执行项目构建任务9.3使用Jenkins的Maven项目实施CI/CD任务实现任务9.3.2新建Maven项目实施CI/CD执行项目构建单次构建的基本信息任务9.3使用Jenkins的Maven项目实施CI/CD任务实现任务9.3.2新建Maven项目实施CI/CD执行项目构建测试构建结果[root@master01~]#kubectlgetsvcNAMETYPECLUSTER-IPEXTERNAL-IPPORT(S)AGEsbdemo-svcNodePort03<none>8080:31008/TCP112s[root@master01~]#curl03:8080Hello!Pleasetestmaven![root@master01~]#curlmaster01:31008Hello!Pleasetestmaven!任务9.3使用Jenkins的Maven项目实施CI/CD任务实现任务9.3.3通过GitLab自动触发项目构建和部署配置Jenkins构建触发器设置构建触发器任务9.3使用Jenkins的Maven项目实施CI/CD任务实现任务9.3.3通过GitLab自动触发项目构建和部署配置Jenkins构建触发器生成密钥令牌任务9.3使用Jenkins的Maven项目实施CI/CD任务实现任务9.3.3通过GitLab自动触发项目构建和部署在GitLab服务器上创建Webhook允许向本地网络发送Webhook请求任务9.3使用Jenkins的Maven项目实施CI/CD任务实现任务9.3.3通过GitLab自动触发项目构建和部署在GitLab服务器上创建WebhookWebhook设置任务9.3使用Jenkins的Maven项目实施CI/CD任务实现任务9.3.3通过GitLab自动触发项目构建和部署在GitLab服务器上创建Webhook添加Webhook任务9.3使用Jenkins的Maven项目实施CI/CD任务实现任务9.3.3通过GitLab自动触发项目构建和部署测试自动触发项目构建Webhook测试成功任务9.3使用Jenkins的Maven项目实施CI/CD任务实现任务9.3.3通过GitLab自动触发项目构建和部署测试自动触发项目构建GitLab推送事件发起的构建任务9.3使用Jenkins的Maven项目实施CI/CD任务实现任务9.3.3通过GitLab自动触发项目构建和部署提交更改的代码自动触发项目的构建和部署(1)在docker_dev主机上进入用户主目录下的本地源代码目录maven-demo。(2)修改DemoController.java文件return"Hello!Pleasetestautobuild!\n";(3)依次执行以下命令将代码提交到GitLab代码仓库:[root@docker_devmaven-demo]#gitadd.[root@docker_devmaven-demo]#gitcommit-m"testautobuild"[root@docker_devmaven-demo]#gitpushoriginmain(4)在Jenkins上打开该项目的基本信息界面,即可发现已经自动触发该项目的构建。任务9.3使用Jenkins的Maven项目实施CI/CD任务实现任务9.3.3通过GitLab自动触发项目构建和部署提交更改的代码自动触发项目的构建和部署任务9.2搭建云原生应用程序的CI/CD平台任务9.1在Kubernetes中部署开发的应用程序任务9.3使用Jenkins的Maven项目实施CI/CD任务9.4使用Jenkins的流水线项目实施CI/CD任务9.5在Kubernetes中动态创建代理节点实施CI/CD任务9.4使用Jenkins的流水线项目实施CI/CD任务说明01OPTION02OPTION03OPTION初步了解Jenkins流水线语法初步掌握在Jenkins中使用流水线的方法学会通过编写流水线文件实施CI/CD04OPTION掌握代码分支的CI/CD实施方法任务9.4使用Jenkins的流水线项目实施CI/CD相关知识9.4.1Jenkins的流水线语法阶段(Stage)节点(Node)步骤(Steps)——最基本的操作单元。任务9.4使用Jenkins的流水线项目实施CI/CD相关知识9.4.1Jenkins的流水线语法声明式流水线脚本式流水线pipeline{agentany//在任何可用代理上执行此流水线或任何阶段stages{stage('Build'){//定义构建阶段steps{//执行与构建阶段相关的一些步骤}}stage('Test'){//定义测试阶段steps{//执行与测试阶段相关的一些步骤}}stage('Deploy'){//定义部署阶段steps{//执行与部署阶段相关的一些步骤}}}}node{在任何可用的代理上执行流水线或阶段stage('Build'){//定义构建阶段//执行与构建阶段相关的一些步骤}stage('Test'){//定义测试阶段//执行与测试阶段相关的一些步骤}stage('Deploy'){//定义部署阶段//执行与部署阶段相关的一些步骤}}任务9.4使用Jenkins的流水线项目实施CI/CD相关知识9.4.2在Jenkins中使用流水线两种方法直接在Jenkins提供的Web界面上编写流水线代码创建Jenkinsfile文件并将文件签入代码仓库首选第2种方法自动为所有分支和代码拉取请求创建流水线生成过程。支持流水线上的代码审查或迭代。支持流水线的审计跟踪。确认流水线的单一真实来源,流水线可以由项目的多个成员查看和编辑。任务9.4使用Jenkins的流水线项目实施CI/CD任务实现任务9.4.1新建流水线项目实施CI/CD准备项目源码修改其中的DemoController.java文件return"Hello!Pleasetestpipeline!\n";任务9.4使用Jenkins的流水线项目实施CI/CD任务实现任务9.4.1新建流水线项目实施CI/CD编写Jenkinsfilepipeline{agentanytools{//需要使用maven工具构建

maven'maven'}stages{stage('Build'){steps{sh'mvn-B-DskipTestscleanpackage'}}stage('Test'){steps{sh'mvntest'}post{always{junit'target/surefire-reports/*.xml'}}任务9.4使用Jenkins的流水线项目实施CI/CD任务实现任务9.4.1新建流水线项目实施CI/CD编写Jenkinsfile}stage('Dockerbuildforcreatingimage'){environment{HARBOR_USER=credentials('Harbor-ACCT')}steps{sh'''echo${HARBOR_USER_USR}${HARBOR_USER_PSW}dockerbuild--build-argapp=${App_Name}-t${HARBOR_ADDRESS}/${REGISTRY_DIR}/${IMAGE_NAME}.dockerlogin-u${HARBOR_USER_USR}-p${HARBOR_USER_PSW}${HARBOR_ADDRESS}dockerpush${HARBOR_ADDRESS}/${REGISTRY_DIR}/${IMAGE_NAME}dockerrmi${HARBOR_ADDRESS}/${REGISTRY_DIR}/${IMAGE_NAME}'''}}

任务9.4使用Jenkins的流水线项目实施CI/CD任务实现任务9.4.1新建流水线项目实施CI/CD编写Jenkinsfilestage('Publish'){steps{sshPublisher(publishers:[sshPublisherDesc(configName:'k8s-master',transfers:[sshTransfer(cleanRemote:false,excludes:'',execCommand:'''cd/spring-boot-demokubectlapply-fkube.yamlkubectldelete-fkube.yaml&&kubectlapply-fkube.yaml''',execTimeout:120000,flatten:false,makeEmptyDirs:false,noDefaultExcludes:false,patternSeparator:'[,]+',remoteDirectory:'/spring-boot-demo',remoteDirectorySDF:false,removePrefix:'',sourceFiles:'**/*.yaml')],usePromotionTimestamp:false,useWorkspaceInPromotion:false,verbose:false)])}}}environment{//此处定义环境变量

App_Name="target/spring-boot-demo-0.0.1-SNAPSHOT.jar"GITLAB_SRV=""HARBOR_ADDRESS=":5000"REGISTRY_DIR="k8s"IMAGE_NAME="spring-boot-demo"}}任务9.4使用Jenkins的流水线项目实施CI/CD任务实现任务9.4.1新建流水线项目实施CI/CD将项目源码和Jenkinsfile文件一起提交到代码仓库在Jenkins中新建流水线项目设置源码管理选项任务9.4使用Jenkins的流水线项目实施CI/CD任务实现任务9.4.1新建流水线项目实施CI/CD在Jenkins中新建流水线项目设置脚本路径任务9.4使用Jenkins的流水线项目实施CI/CD任务实现任务9.4.1新建流水线项目实施CI/CD在Jenkins中执行项目构建项目构建的阶段视图任务9.4使用Jenkins的流水线项目实施CI/CD任务实现任务9.4.1新建流水线项目实施CI/CD在Jenkins中执行项目构建查看BlueOcean流水线任务9.4使用Jenkins的流水线项目实施CI/CD任务实现任务9.4.1新建流水线项目实施CI/CD在Jenkins中执行项目构建查看控制台输出ObtainedJenkinsfilefromgitgit@:k8s/pipe-demo.git[Pipeline]StartofPipeline[Pipeline]nodeRunningonJenkinsin/var/jenkins_home/workspace/pipe-demo[Pipeline]{[Pipeline]stage[Pipeline]{(Declarative:CheckoutSCM)#此处省略[Pipeline]//node[Pipeline]EndofPipelineFinished:SUCCESS任务9.4使用Jenkins的流水线项目实施CI/CD任务实现任务9.4.2实施代码分支的CI/CD准备参数化构建环境安装有GitParameter插件以支持参数化构建。对多个代码分支,不用在流水线代码中提供分支名称,只需让项目接收外部输入的分支名称,为项目构建动态提供特定名称的代码分支。任务9.4使用Jenkins的流水线项目实施CI/CD任务实现任务9.4.2实施代码分支的CI/CD准备项目源码和Jenkinsfile文件并提交到代码仓库沿用SpringBoot演示项目代码。return"Hello!Pleasetestmainbranch!\n";修改Kubernetes资源配置文件kube.yaml文件。

image::5000/k8s/spring-boot-demo:<BUILD-TAG>任务9.4使用Jenkins的流水线项目实施CI/CD任务实现任务9.4.2实施代码分支的CI/CD准备项目源码和Jenkinsfile文件并提交到代码仓库重新修改流水线文件Jenkinsfilestages{stage('PullingCode'){parallel{stage('PullingCodebyJenkins'){when{expression{env.gitlabBranch==null}}steps{checkoutscmGit(branches:[[name:"${BRANCH}"]],extensions:[],userRemoteConfigs:[[credentialsId:"${env.GITLAB_PUB}",url:"${env.GITLAB_URL}"]])script{COMMIT_ID=sh(returnStdout:true,script:"gitlog-n1--pretty=format:'%h'").trim() TAG=BUILD_TAG+'-'+COMMIT_ID println"Currentbranchis${BRANCH},CommitIDis${COMMIT_ID},ImageTAGis${TAG}"}}}任务9.4使用Jenkins的流水线项目实施CI/CD任务实现任务9.4.2实施代码分支的CI/CD准备项目源码和Jenkinsfile文件并提交到代码仓库重新修改流水线文件Jenkinsfilestage('PullingCodebytrigger'){when{expression{env.gitlabBranch!=null}}steps{checkoutscmGit(branches:[[name:"${env.gitlabBranch}"]],extensions:[],userRemoteConfigs:[[credentialsId:"${env.GITLAB_PUB}",url:"${env.GITLAB_URL}"]])script{COMMIT_ID=sh(returnStdout:true,script:"gitlog-n1--pretty=format:'%h'").trim()TAG=BUILD_TAG+'-'+COMMIT_IDprintln"Currentbranchis${env.gitlabBranch},CommitIDis${COMMIT_ID},ImageTAGis${TAG}"}}}}}

任务9.4使用Jenkins的流水线项目实施CI/CD任务实现任务9.4.2实施代码分支的CI/CD准备项目源码和Jenkinsfile文件并提交到代码仓库重新修改流水线文件Jenkinsfilestage('Build'){//此处代码同任务9.4.1,省略

}stage('Test'){//此处代码同任务9.4.1,省略

}stage('Dockerbuildforcreatingimage'){environment{HARBOR_USER=credentials('Harbor-ACCT')}steps{sh"""echo${HARBOR_USER_USR}${HARBOR_USER_PSW}dockerbuild--build-argapp=${App_Name}-t${HARBOR_ADDRESS}/${REGISTRY_DIR}/${IMAGE_NAME}:${TAG}.dockerlogin-u${HARBOR_USER_USR}-p${HARBOR_USER_PSW}${HARBOR_ADDRESS}dockerpush${HARBOR_ADDRESS}/${REGISTRY_DIR}/${IMAGE_NAME}:${TAG}dockerrmi${HARBOR_ADDRESS}/${REGISTRY_DIR}/${IMAGE_NAME}:${TAG}"""}}任务9.4使用Jenkins的流水线项目实施CI/CD任务实现任务9.4.2实施代码分支的CI/CD准备项目源码和Jenkinsfile文件并提交到代码仓库重新修改流水线文件Jenkinsfilestage('Publish'){steps{//修改kube.yaml文件中的镜像标签

sh"sed-i's/<BUILD-TAG>/${TAG}/'kube.yaml"sshPublisher(publishers://此处代码同任务9.4.1,省略

)}}}

任务9.4使用Jenkins的流水线项目实施CI/CD任务实现任务9.4.2实施代码分支的CI/CD准备项目源码和Jenkinsfile文件并提交到代码仓库重新修改流水线文件Jenkinsfileenvironment{App_Name="target/spring-boot-demo-0.0.1-SNAPSHOT.jar"GITLAB_SRV=""GITLAB_URL='git@:k8s/branch-demo.git'GITLAB_PUB='GitLab-Key'HARBOR_ADDRESS=":5000"REGISTRY_DIR="k8s"IMAGE_NAME="spring-boot-demo"}parameters{gitParameter(branch:'',branchFilter:'origin/(.*)',defaultValue:'main',description:'Branchforbuildanddeploy',name:'BRANCH',quickFilterEnabled:false,selectedValue:'NONE',sortMode:'NONE',tagFilter:'*',type:'PT_BRANCH')}}任务9.4使用Jenkins的流水线项目实施CI/CD任务实现任务9.4.2实施代码分支的CI/CD新建流水线项目并手动执行项目构建首次构建失败任务9.4使用Jenkins的流水线项目实施CI/CD任务实现任务9.4.2实施代码分支的CI/CD新建流水线项目并手动执行项目构建自动生成的参数构建配置任务9.4使用Jenkins的流水线项目实施CI/CD任务实现任务9.4.2实施代码分支的CI/CD新建流水线项目并手动执行项目构建选择分支构建任务9.4使用Jenkins的流水线项目实施CI/CD任务实现任务9.4.2实施代码分支的CI/CD新建流水线项目并手动执行项目构建分支构建成功任务9.4使用Jenkins的流水线项目实施CI/CD任务实现任务9.4.2实施代码分支的CI/CD新建流水线项目并手动执行项目构建代码分支构建的基本信息任务9.4使用Jenkins的流水线项目实施CI/CD任务实现任务9.4.2实施代码分支的CI/CD新建流水线项目并手动执行项目构建查看分支构建的BlueOcean流水线任务9.4使用Jenkins的流水线项目实施CI/CD任务实现任务9.4.2实施代码分支的CI/CD新建流水线项目并手动执行项目构建查看镜像标签任务9.4使用Jenkins的流水线项目实施CI/CD任务实现任务9.4.2实施代码分支的CI/CD新建流水线项目并手动执行项目构建代码提交ID任务9.4使用Jenkins的流水线项目实施CI/CD任务实现任务9.4.2实施代码分支的CI/CD创建新的代码分支并进行构建修改DemoController.java文件return"Hello!Pleasetestdevbranch!\n";在本地仓库目录下执行以下命令创建一个名为dev(开发)的分支并切换到该分支。[root@docker_devbranch-demo]#git

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论