




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 深入探討計算機二級Web考試復習重點試題及答案
- 抖音直播電商合作權益分配與售后服務協議
- 網紅面包品牌品牌授權及產品研發與技術支持合作協議
- 職業技能培訓機構教練員知識產權保護聘用合同
- 高端生物合成研究員勞動合同
- 2025年中國半導體膠膜行業市場前景預測及投資價值評估分析報告
- 港口集裝箱堆場管理與運營承包協議
- 高端生物醫藥研究員全職聘用與研發成果轉化優先權合同
- 知乎鹽選專欄內容版權合作與數字圖書館引進協議
- 軌道交通技術合作補充協議
- 技術學徒合同協議書
- 語文教學法與評價2025年試卷及答案
- 人工智能在醫療領域的測試卷
- 《生態環境的密碼:竺可楨的科學研究課件》
- 車位回購協議書范本
- 中國的耕地與糧食安全課件高二下學期地理魯教版(2019)選擇性必修3
- 2025年服裝進貨合同范本下載8篇
- 勞務糾紛案例分析:提供勞務者受害責任糾紛
- 2024年江蘇省寶應縣事業單位公開招聘緊缺人才37名筆試題帶答案
- 保險公司保全試題及答案
- 交通過程中的大數據應用試題及答案
評論
0/150
提交評論