[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"$fW-NfQVWZ6z0kfYdsL5-p0QwsmJrsvAMccKhS7A44YcU":3,"$fX5QrpJKJBTy4IIQzl0wpPzSB8sOFqM6FXXwu54kGPQQ":14,"$f0e-4FkRSVcp8crDmTYvmPjxEMtVwMO4BTTGClp41B4Q":148,"$fuJP8rxm2zCswqXNXyCJCZ77Vg_Us3q3PgNMbD8DTf8g":149},{"siteTitle":4,"siteDescription":5,"icpNumber":6,"policeNumber":7,"githubUrl":8,"email":9,"baiduSiteVerification":7,"rewardWechatUrl":7,"rewardAlipayUrl":7,"authorName":10,"authorAvatar":11,"newsletterEnabled":12,"aiEnabled":13},"咕叽咕叽","咕叽咕叽的blog","蜀ICP备19034302号","","https:\u002F\u002Fgithub.com\u002FMonologuter","2439644676cy@gmail.com","叽叽咕咕","https:\u002F\u002Fmacbookpro99.oss-cn-shanghai.aliyuncs.com\u002Fuploads\u002F2026\u002F07\u002F97ed120b87e63a50a84713d9101f4247e31293bc6129f3a57aa49e1ebbbc4ff0-480.webp",false,true,{"id":15,"slug":16,"title":17,"excerpt":18,"contentHtml":19,"toc":20,"publishedAt":125,"updatedAt":125,"wordCount":126,"readingTimeMinutes":127,"viewCount":128,"allowComments":13,"seoTitle":129,"seoDescription":129,"seoKeywords":129,"categoryId":129,"seriesId":129,"seriesOrder":130,"sourceType":131,"sourceUrl":132,"sourceAuthor":133,"coverAssetId":129,"coverUrl":129,"category":129,"tags":134,"series":129,"prev":135,"next":138,"related":141},"44acd33f-0729-4d78-8464-a13a991a7fb3","devopsdcqube-csdn-xg6","devops_dcqube-CSDN博客","文章浏览阅读3.7k次。Sonar Qube是一个开源的代码分析平台，支持Java、Python、PHP、JavaScript、CSS等25种以上的语言，可以检测出重复代码、代码漏洞、代码规范和安全性漏洞的问题。Sonar Qube可以与多种软件整合进行代码扫描，比如Maven，Gradle，Git，Jenkins等，并且会将代码检测结果推送回Sonar Qube并且在系统提供的UI界面上显示出来。_dcqube","\u003Ch3 id=\"1环境准备\">1、环境准备\u003Ca class=\"heading-anchor\" href=\"#1环境准备\" aria-hidden=\"true\">#\u003C\u002Fa>\u003C\u002Fh3>\u003Cul>\u003Cli>\u003Cp>使用的虚拟机环境centos7.8\u003C\u002Fp>\u003C\u002Fli>\u003C\u002Ful>\u003Cblockquote>\u003Cp>Jenkins: 10.21.90.111\u003C\u002Fp>\u003Cp>k8sMaster : 10.21.90.113\u003C\u002Fp>\u003Cp>k8sNode: 10.21.90.114\u003C\u002Fp>\u003C\u002Fblockquote>\u003Cul>\u003Cli>\u003Cp>同步主机时区为亚洲，并同步时间\u003C\u002Fp>\u003Cdiv class=\"code-block\" data-lang=\"text\">\u003Cdiv class=\"code-head\">\u003Cdiv class=\"code-head-left\">\u003Cspan class=\"code-dots\">\u003C\u002Fspan>\u003Cspan class=\"code-lang\">text\u003C\u002Fspan>\u003C\u002Fdiv>\u003C\u002Fdiv>\u003Cpre class=\"shiki shiki-themes github-light github-dark\" style=\"background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan>[root@linux-node ~]# echo \"ZONE=Asia\u002FShanghai\" >> \u002Fetc\u002Fsysconfig\u002Fclock         \u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>[root@linux-node ~]# rm -f \u002Fetc\u002Flocaltime\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>#链接到上海时区文件       \u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>[root@linux-node ~]# ln -sf \u002Fusr\u002Fshare\u002Fzoneinfo\u002FAsia\u002FShanghai \u002Fetc\u002Flocaltime\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\u003C\u002Fdiv>\u003C\u002Fli>\u003Cli>\u003Cp>关闭防火墙和selinux\u003C\u002Fp>\u003Cdiv class=\"code-block\" data-lang=\"text\">\u003Cdiv class=\"code-head\">\u003Cdiv class=\"code-head-left\">\u003Cspan class=\"code-dots\">\u003C\u002Fspan>\u003Cspan class=\"code-lang\">text\u003C\u002Fspan>\u003C\u002Fdiv>\u003C\u002Fdiv>\u003Cpre class=\"shiki shiki-themes github-light github-dark\" style=\"background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan>[root@localhost ~]# systemctl stop firewalld\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>[root@localhost ~]# systemctl disable firewalld\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>Removed symlink \u002Fetc\u002Fsystemd\u002Fsystem\u002Fmulti-user.target.wants\u002Ffirewalld.service.\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>Removed symlink \u002Fetc\u002Fsystemd\u002Fsystem\u002Fdbus-org.fedoraproject.FirewallD1.service.\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>[root@localhost ~]# setenforce 0\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>[root@localhost ~]# sed -i \"s\u002FSELINUX=enforcing\u002FSELINUX=disabled\u002Fg\" \u002Fetc\u002Fselinux\u002Fconfig\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\u003C\u002Fdiv>\u003C\u002Fli>\u003Cli>\u003Cp>设置yum源\u003C\u002Fp>\u003Cdiv class=\"code-block\" data-lang=\"text\">\u003Cdiv class=\"code-head\">\u003Cdiv class=\"code-head-left\">\u003Cspan class=\"code-dots\">\u003C\u002Fspan>\u003Cspan class=\"code-lang\">text\u003C\u002Fspan>\u003C\u002Fdiv>\u003C\u002Fdiv>\u003Cpre class=\"shiki shiki-themes github-light github-dark\" style=\"background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan>wget -O \u002Fetc\u002Fyum.repos.d\u002FCentOS-Base.repo  http:\u002F\u002Fmirrors.aliyun.com\u002Frepo\u002FCentos-7.repo\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>wget -O \u002Fetc\u002Fyum.repos.d\u002Fepel.repo  http:\u002F\u002Fmirrors.aliyun.com\u002Frepo\u002Fepel-7.repo\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>yum clean all\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>yum makecache\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\u003C\u002Fdiv>\u003C\u002Fli>\u003Cli>\u003Cp>安装jdk\u003C\u002Fp>\u003C\u002Fli>\u003C\u002Ful>\u003Ch3 id=\"2安装docker\">2、安装docker\u003Ca class=\"heading-anchor\" href=\"#2安装docker\" aria-hidden=\"true\">#\u003C\u002Fa>\u003C\u002Fh3>\u003Cdiv class=\"code-block\" data-lang=\"text\">\u003Cdiv class=\"code-head\">\u003Cdiv class=\"code-head-left\">\u003Cspan class=\"code-dots\">\u003C\u002Fspan>\u003Cspan class=\"code-lang\">text\u003C\u002Fspan>\u003C\u002Fdiv>\u003C\u002Fdiv>\u003Cpre class=\"shiki shiki-themes github-light github-dark\" style=\"background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan>curl -sSL https:\u002F\u002Fget.daocloud.io\u002Fdocker | sh\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\u003C\u002Fdiv>\u003Ch3 id=\"3docker搭建基础软件服务环境\">3、docker搭建基础软件服务环境\u003Ca class=\"heading-anchor\" href=\"#3docker搭建基础软件服务环境\" aria-hidden=\"true\">#\u003C\u002Fa>\u003C\u002Fh3>\u003Cblockquote>\u003Cp>也可以直接编辑docker-compose.yml 直接使用docker-compose进行环境搭建\u003C\u002Fp>\u003Cp>Docker-compose.yml基本语法如下\u003C\u002Fp>\u003C\u002Fblockquote>\u003Cblockquote>\u003Cp>version: “3.8”\u003Cbr\u002F>volumes:\u003Cbr\u002F>data:\u003Cbr\u002F>config:\u003Cbr\u002F>plugin:\u003Cbr\u002F>networks:\u003Cbr\u002F>es:\u003Cbr\u002F>services:\u003Cbr\u002F>elasticsearch:\u003Cbr\u002F>image: elasticsearch:7.14.0\u003Cbr\u002F>ports:\u003C\u002Fp>\u003Cdiv class=\"code-block\" data-lang=\"text\">\u003Cdiv class=\"code-head\">\u003Cdiv class=\"code-head-left\">\u003Cspan class=\"code-dots\">\u003C\u002Fspan>\u003Cspan class=\"code-lang\">text\u003C\u002Fspan>\u003C\u002Fdiv>\u003C\u002Fdiv>\u003Cpre class=\"shiki shiki-themes github-light github-dark\" style=\"background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan> - \"9200:9200\"\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>       - \"9300:9300\"\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>   networks:\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>       - \"es\"\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>       environment:\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>             - \"discovery.type=single-node\"\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>                   - \"ES_JAVA_OPTS=-Xms512m -Xmx512m\"\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>           volumes:\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>                   - data:\u002FUsers\u002Fchenya\u002Fsoft\u002Fsoft\u002FdockerVolume\u002FesData\u002Fdata\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>                         - config:\u002FUsers\u002Fchenya\u002Fsoft\u002Fsoft\u002FdockerVolume\u002FesData\u002Fconfig\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>                         - plugin:\u002FUsers\u002Fchenya\u002Fsoft\u002Fsoft\u002FdockerVolume\u002FesData\u002Fplugins\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\u003C\u002Fdiv>\u003Cp>kibana:\u003Cbr\u002F>image: kibana:7.14.0\u003Cbr\u002F>ports:\u003Cbr\u002F>- “5601:5601”\u003Cbr\u002F>networks:\u003Cbr\u002F>- “es”\u003Cbr\u002F>volumes:\u003Cbr\u002F>- .\u002Fkibana.yml:\u002FUsers\u002Fchenya\u002Fsoft\u002Fsoft\u002FdockerVolume\u002FesData\u002Fkibana.yml\u003C\u002Fp>\u003C\u002Fblockquote>\u003Ch4 id=\"31mysql\">3.1、mysql\u003Ca class=\"heading-anchor\" href=\"#31mysql\" aria-hidden=\"true\">#\u003C\u002Fa>\u003C\u002Fh4>\u003Cp>https:\u002F\u002Fblog.csdn.net\u002Fu013189488\u002Farticle\u002Fdetails\u002F125077423\u003C\u002Fp>\u003Ch4 id=\"32redis\">3.2、redis\u003Ca class=\"heading-anchor\" href=\"#32redis\" aria-hidden=\"true\">#\u003C\u002Fa>\u003C\u002Fh4>\u003Cdiv class=\"code-block\" data-lang=\"text\">\u003Cdiv class=\"code-head\">\u003Cdiv class=\"code-head-left\">\u003Cspan class=\"code-dots\">\u003C\u002Fspan>\u003Cspan class=\"code-lang\">text\u003C\u002Fspan>\u003C\u002Fdiv>\u003C\u002Fdiv>\u003Cpre class=\"shiki shiki-themes github-light github-dark\" style=\"background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan>docker pull redis:3.2\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>docker run --name redis  -p 6379:6379  --restart=always -d &#x3C;容器id>\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\u003C\u002Fdiv>\u003Ch4 id=\"33rabbitmq\">3.3、Rabbitmq\u003Ca class=\"heading-anchor\" href=\"#33rabbitmq\" aria-hidden=\"true\">#\u003C\u002Fa>\u003C\u002Fh4>\u003Cdiv class=\"code-block\" data-lang=\"text\">\u003Cdiv class=\"code-head\">\u003Cdiv class=\"code-head-left\">\u003Cspan class=\"code-dots\">\u003C\u002Fspan>\u003Cspan class=\"code-lang\">text\u003C\u002Fspan>\u003C\u002Fdiv>\u003C\u002Fdiv>\u003Cpre class=\"shiki shiki-themes github-light github-dark\" style=\"background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan>docker pull rabbitmq\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>docker run --name rabbitmq -p 15672:15672 -p 5672:5672 -d  --restart=always &#x3C;容器id> \u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\u003C\u002Fdiv>\u003Ch4 id=\"34jenkins\">3.4、jenkins\u003Ca class=\"heading-anchor\" href=\"#34jenkins\" aria-hidden=\"true\">#\u003C\u002Fa>\u003C\u002Fh4>\u003Cdiv class=\"code-block\" data-lang=\"text\">\u003Cdiv class=\"code-head\">\u003Cdiv class=\"code-head-left\">\u003Cspan class=\"code-dots\">\u003C\u002Fspan>\u003Cspan class=\"code-lang\">text\u003C\u002Fspan>\u003C\u002Fdiv>\u003C\u002Fdiv>\u003Cpre class=\"shiki shiki-themes github-light github-dark\" style=\"background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan>docker pull jenkins\u002Fjenkins\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>docker run -p 8080：8080 -p 5000：5000 --name jenkinsdxc -v \u002Fusr\u002Fjenkins_data:\u002Fvar\u002Fjenkins_home  &#x3C;容器id>\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\u003C\u002Fdiv>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jxShDxT8-1663124776057)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月01日11时:36分:25秒)]\u003C\u002Fp>\u003Cblockquote>\u003Cp>jenkins基础环境搭建完了之后需要安装一系列插件 git node jdk maven\u003C\u002Fp>\u003Cp>需要配置服务器秘钥\u003C\u002Fp>\u003C\u002Fblockquote>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Nb0Uul4n-1663124776057)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月01日11时:38分:30秒)]\u003C\u002Fp>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fPog6hGG-1663124776058)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月01日11时:41分:11秒)]\u003C\u002Fp>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pv5W8AR7-1663124776058)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月01日11时:40分:06秒)]\u003C\u002Fp>\u003Ch4 id=\"35nginx\">3.5、nginx\u003Ca class=\"heading-anchor\" href=\"#35nginx\" aria-hidden=\"true\">#\u003C\u002Fa>\u003C\u002Fh4>\u003Cp>https:\u002F\u002Fblog.educy.top\u002Farchives\u002Fdocker%E5%AE%89%E8%A3%85nginx%E6%8C%82%E8%BD%BD%E6%95%B0%E6%8D%AE%E5%8D%B7-%E9%9D%92%E6%A9%99e-%E5%8D%9A%E5%AE%A2%E5%9B%AD\u003C\u002Fp>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-t2kH14Zd-1663124776058)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月01日11时:41分:38秒)]\u003C\u002Fp>\u003Ch3 id=\"4jenkins持续集成持续交付\">4、jenkins持续集成持续交付\u003Ca class=\"heading-anchor\" href=\"#4jenkins持续集成持续交付\" aria-hidden=\"true\">#\u003C\u002Fa>\u003C\u002Fh3>\u003Ch4 id=\"41jenkins初始化操作\">4.1、jenkins初始化操作\u003Ca class=\"heading-anchor\" href=\"#41jenkins初始化操作\" aria-hidden=\"true\">#\u003C\u002Fa>\u003C\u002Fh4>\u003Cul>\u003Cli>\u003Cp>查看密码登录Jenkins，并登录下载插件\u003C\u002Fp>\u003Cdiv class=\"code-block\" data-lang=\"text\">\u003Cdiv class=\"code-head\">\u003Cdiv class=\"code-head-left\">\u003Cspan class=\"code-dots\">\u003C\u002Fspan>\u003Cspan class=\"code-lang\">text\u003C\u002Fspan>\u003C\u002Fdiv>\u003C\u002Fdiv>\u003Cpre class=\"shiki shiki-themes github-light github-dark\" style=\"background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan>docker exec -it jenkins cat \u002Fvar\u002Fjenkins_home\u002Fsecrets\u002FinitialAdminPassword\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\u003C\u002Fdiv>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-spmju92B-1663124776058)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月04日13时:17分:19秒)]\u003C\u002Fp>\u003C\u002Fli>\u003C\u002Ful>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SVKbS8DM-1663124776058)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月04日13时:17分:41秒)]\u003C\u002Fp>\u003Cul>\u003Cli>\u003Cp>选择需要安装的插件\u003C\u002Fp>\u003C\u002Fli>\u003C\u002Ful>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mMNWNMqp-1663124776058)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月04日13时:18分:25秒)]\u003C\u002Fp>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4VB1GWPr-1663124776059)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月04日13时:18分:37秒)]\u003C\u002Fp>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nwmzX22w-1663124776059)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月04日13时:18分:50秒)]\u003C\u002Fp>\u003Cul>\u003Cli>\u003Cp>下载完毕设置信息进入首页\u003C\u002Fp>\u003C\u002Fli>\u003C\u002Ful>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rlp6tl4U-1663124776059)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月04日13时:19分:19秒)]\u003C\u002Fp>\u003Ch4 id=\"42jenkins入门配置\">4.2、Jenkins入门配置\u003Ca class=\"heading-anchor\" href=\"#42jenkins入门配置\" aria-hidden=\"true\">#\u003C\u002Fa>\u003C\u002Fh4>\u003Cp>由于Jenkins需要从Git拉取代码、需要本地构建、甚至需要直接发布自定义镜像到Docker仓库，所以Jenkins需要配置大量内容。\u003C\u002Fp>\u003Ch5 id=\"420全局配置\">4.2.0、全局配置\u003Ca class=\"heading-anchor\" href=\"#420全局配置\" aria-hidden=\"true\">#\u003C\u002Fa>\u003C\u002Fh5>\u003Cul>\u003Cli>\u003Cp>maven的全局配置\u003C\u002Fp>\u003C\u002Fli>\u003C\u002Ful>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vrUQZsfy-1663124776059)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月04日13时:35分:49秒)]\u003C\u002Fp>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EYbPuAYs-1663124776059)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月04日13时:37分:17秒)]\u003C\u002Fp>\u003Cul>\u003Cli>\u003Cp>jdk的全局配置\u003C\u002Fp>\u003C\u002Fli>\u003C\u002Ful>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-k3W6c7uk-1663124776059)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月04日13时:37分:58秒)]\u003C\u002Fp>\u003Cul>\u003Cli>\u003Cp>node的全局配置\u003C\u002Fp>\u003C\u002Fli>\u003C\u002Ful>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3oQdhC3h-1663124776060)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月04日13时:38分:26秒)]\u003C\u002Fp>\u003Cul>\u003Cli>\u003Cp>ssh Server的全局配置&lt;用来传输文件&gt;\u003C\u002Fp>\u003C\u002Fli>\u003C\u002Ful>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tQKdKuOE-1663124776060)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月04日13时:39分:37秒)]\u003C\u002Fp>\u003Ch5 id=\"421构建任务\">4.2.1、构建任务\u003Ca class=\"heading-anchor\" href=\"#421构建任务\" aria-hidden=\"true\">#\u003C\u002Fa>\u003C\u002Fh5>\u003Cp>准备好GitLab仓库中的项目，并且通过Jenkins配置项目的实现当前项目的DevOps基本流程。\u003C\u002Fp>\u003Cul>\u003Cli>\u003Cp>构建Maven工程发布到GitLab（Gitee、Github均可）\u003C\u002Fp>\u003C\u002Fli>\u003C\u002Ful>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xZZseGBO-1663124776060)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月04日13时:50分:41秒)]\u003C\u002Fp>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BiQS15Ln-1663124776060)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月04日13时:21分:11秒)]\u003C\u002Fp>\u003Cul>\u003Cli>\u003Cp>Jenkins点击左侧导航新建任务\u003C\u002Fp>\u003C\u002Fli>\u003C\u002Ful>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JgGbRq2U-1663124776060)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月04日13时:22分:16秒)]\u003C\u002Fp>\u003Ch5 id=\"422配置源代码拉取地址\">4.2.2、配置源代码拉取地址\u003Ca class=\"heading-anchor\" href=\"#422配置源代码拉取地址\" aria-hidden=\"true\">#\u003C\u002Fa>\u003C\u002Fh5>\u003Cp>Jenkins需要将Git上存放的源码存储到Jenkins服务所在磁盘的本地\u003C\u002Fp>\u003Cul>\u003Cli>\u003Cp>配置源代码拉取地址\u003C\u002Fp>\u003C\u002Fli>\u003C\u002Ful>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vj24czAq-1663124776060)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月04日13时:31分:56秒)]\u003C\u002Fp>\u003Cul>\u003Cli>\u003Cp>Jenkins立即构建\u003C\u002Fp>\u003C\u002Fli>\u003C\u002Ful>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XtiGUtKu-1663124776060)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月04日13时:45分:34秒)]\u003C\u002Fp>\u003Ch5 id=\"423基于parameter构建任务\">4.2.3、基于Parameter构建任务\u003Ca class=\"heading-anchor\" href=\"#423基于parameter构建任务\" aria-hidden=\"true\">#\u003C\u002Fa>\u003C\u002Fh5>\u003Cblockquote>\u003Cp>Tag： 相当于每次发布一个新版本的时候都给项目打上一个tag ，jenkins就可以根据这个tag进行构建，当发现该版本有bug需要回滚的时候，我们再重新构建上一个tag版本即可\u003C\u002Fp>\u003C\u002Fblockquote>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4CmSaGIJ-1663124776061)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月04日13时:54分:26秒)]\u003C\u002Fp>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Zn0pn7ZV-1663124776061)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月04日13时:55分:45秒)]\u003C\u002Fp>\u003Cul>\u003Cli>\u003Cp>查看构建工程的日志\u003C\u002Fp>\u003C\u002Fli>\u003C\u002Ful>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ndImQJF6-1663124776061)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月04日13时:57分:33秒)]\u003C\u002Fp>\u003Cul>\u003Cli>\u003Cp>查看控制台docker镜像以及容器\u003C\u002Fp>\u003C\u002Fli>\u003C\u002Ful>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cKOxdSmP-1663124776061)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月04日13时:59分:01秒)]\u003C\u002Fp>\u003Cul>\u003Cli>\u003Cp>测试接口\u003C\u002Fp>\u003C\u002Fli>\u003C\u002Ful>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fghEd8QB-1663124776062)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月04日13时:59分:35秒)]\u003C\u002Fp>\u003Ch5 id=\"424根据tag进行回滚\">4.2.4、根据tag进行回滚\u003Ca class=\"heading-anchor\" href=\"#424根据tag进行回滚\" aria-hidden=\"true\">#\u003C\u002Fa>\u003C\u002Fh5>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6AXApx13-1663124776062)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月04日14时:01分:31秒)]\u003C\u002Fp>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ap7WE0vl-1663124776062)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月04日14时:02分:10秒)]\u003C\u002Fp>\u003Ch3 id=\"5集成sonar-qube\">5、集成Sonar Qube\u003Ca class=\"heading-anchor\" href=\"#5集成sonar-qube\" aria-hidden=\"true\">#\u003C\u002Fa>\u003C\u002Fh3>\u003Ch4 id=\"51sonar-qube介绍\">5.1、Sonar Qube介绍\u003Ca class=\"heading-anchor\" href=\"#51sonar-qube介绍\" aria-hidden=\"true\">#\u003C\u002Fa>\u003C\u002Fh4>\u003Cblockquote>\u003Cp>Sonar Qube是一个开源的代码分析平台，支持Java、Python、PHP、JavaScript、CSS等25种以上的语言，可以检测出重复代码、代码漏洞、代码规范和安全性漏洞的问题。\u003C\u002Fp>\u003Cp>Sonar Qube可以与多种软件整合进行代码扫描，比如Maven，Gradle，Git，Jenkins等，并且会将代码检测结果推送回Sonar Qube并且在系统提供的UI界面上显示出来\u003C\u002Fp>\u003C\u002Fblockquote>\u003Ch4 id=\"52sonar-qube环境搭建\">5.2、Sonar Qube环境搭建\u003Ca class=\"heading-anchor\" href=\"#52sonar-qube环境搭建\" aria-hidden=\"true\">#\u003C\u002Fa>\u003C\u002Fh4>\u003Ch5 id=\"521-sonar-qube安装\">5.2.1、 Sonar Qube安装\u003Ca class=\"heading-anchor\" href=\"#521-sonar-qube安装\" aria-hidden=\"true\">#\u003C\u002Fa>\u003C\u002Fh5>\u003Cp>Sonar Qube在7.9版本中已经放弃了对MySQL的支持，并且建议在商业环境中采用PostgreSQL，那么安装Sonar Qube时需要依赖PostgreSQL。\u003C\u002Fp>\u003Cp>并且这里会安装Sonar Qube的长期支持版本8.9\u003C\u002Fp>\u003Cul>\u003Cli>\u003Cp>拉取镜像\u003C\u002Fp>\u003C\u002Fli>\u003C\u002Ful>\u003Cdiv class=\"code-block\" data-lang=\"text\">\u003Cdiv class=\"code-head\">\u003Cdiv class=\"code-head-left\">\u003Cspan class=\"code-dots\">\u003C\u002Fspan>\u003Cspan class=\"code-lang\">text\u003C\u002Fspan>\u003C\u002Fdiv>\u003C\u002Fdiv>\u003Cpre class=\"shiki shiki-themes github-light github-dark\" style=\"background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan>docker pull postgres\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>docker pull sonarqube:8.9.3-community\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\u003C\u002Fdiv>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Mal5nvSt-1663124776062)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月04日14时:15分:56秒)]\u003C\u002Fp>\u003Cul>\u003Cli>\u003Cp>编写docker-compose.yml文件\u003C\u002Fp>\u003C\u002Fli>\u003C\u002Ful>\u003Cdiv class=\"code-block\" data-lang=\"text\">\u003Cdiv class=\"code-head\">\u003Cdiv class=\"code-head-left\">\u003Cspan class=\"code-dots\">\u003C\u002Fspan>\u003Cspan class=\"code-lang\">text\u003C\u002Fspan>\u003C\u002Fdiv>\u003C\u002Fdiv>\u003Cpre class=\"shiki shiki-themes github-light github-dark\" style=\"background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan>version: \"3.1\"\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>services:\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>  db:\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>    image: postgres\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>    container_name: db\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>    ports:\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>      - 5432:5432\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>    networks:\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>      - sonarnet\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>    environment:\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>      POSTGRES_USER: sonar\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>      POSTGRES_PASSWORD: sonar\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>  sonarqube:\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>    image: sonarqube:8.9.3-community\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>    container_name: sonarqube\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>    depends_on:\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>      - db\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>    ports:\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>      - \"9000:9000\"\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>    networks:\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>      - sonarnet\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>    environment:\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>      SONAR_JDBC_URL: jdbc:postgresql:\u002F\u002Fdb:5432\u002Fsonar\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>      SONAR_JDBC_USERNAME: sonar\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>      SONAR_JDBC_PASSWORD: sonar\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>networks:\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>  sonarnet:\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>    driver: bridge\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\u003C\u002Fdiv>\u003Cul>\u003Cli>\u003Cp>基于docker-compose.yml构建镜像\u003C\u002Fp>\u003C\u002Fli>\u003C\u002Ful>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RRRhGTS1-1663124776062)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月04日14时:20分:09秒)]\u003C\u002Fp>\u003Cul>\u003Cli>\u003Cp>查看sona日志\u003C\u002Fp>\u003C\u002Fli>\u003C\u002Ful>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UHFYrdMc-1663124776062)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月04日14时:22分:38秒)]\u003C\u002Fp>\u003Cp>可以看到需要修改最大虚拟内存\u003C\u002Fp>\u003Cul>\u003Cli>\u003Cp>修改主机最大虚拟内存\u003C\u002Fp>\u003C\u002Fli>\u003C\u002Ful>\u003Cdiv class=\"code-block\" data-lang=\"text\">\u003Cdiv class=\"code-head\">\u003Cdiv class=\"code-head-left\">\u003Cspan class=\"code-dots\">\u003C\u002Fspan>\u003Cspan class=\"code-lang\">text\u003C\u002Fspan>\u003C\u002Fdiv>\u003C\u002Fdiv>\u003Cpre class=\"shiki shiki-themes github-light github-dark\" style=\"background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan>vim \u002Fetc\u002Fsysctl.conf\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\u003C\u002Fdiv>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hQFXjp2c-1663124776063)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月04日14时:25分:48秒)]\u003C\u002Fp>\u003Cdiv class=\"code-block\" data-lang=\"text\">\u003Cdiv class=\"code-head\">\u003Cdiv class=\"code-head-left\">\u003Cspan class=\"code-dots\">\u003C\u002Fspan>\u003Cspan class=\"code-lang\">text\u003C\u002Fspan>\u003C\u002Fdiv>\u003C\u002Fdiv>\u003Cpre class=\"shiki shiki-themes github-light github-dark\" style=\"background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan>sysctl -p   查看此时的最大虚拟内存\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\u003C\u002Fdiv>\u003Cdiv class=\"code-block\" data-lang=\"text\">\u003Cdiv class=\"code-head\">\u003Cdiv class=\"code-head-left\">\u003Cspan class=\"code-dots\">\u003C\u002Fspan>\u003Cspan class=\"code-lang\">text\u003C\u002Fspan>\u003C\u002Fdiv>\u003C\u002Fdiv>\u003Cpre class=\"shiki shiki-themes github-light github-dark\" style=\"background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan>[root@localhost sona]# sysctl -p \u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>vm.max_map_count = 262144\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\u003C\u002Fdiv>\u003Cul>\u003Cli>\u003Cp>访问sona主页\u003C\u002Fp>\u003C\u002Fli>\u003C\u002Ful>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Mo5cxgeJ-1663124776063)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月04日14时:28分:38秒)]\u003C\u002Fp>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WQzCeXrz-1663124776063)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月04日14时:29分:45秒)]\u003C\u002Fp>\u003Cul>\u003Cli>\u003Cp>安装中文插件\u003C\u002Fp>\u003C\u002Fli>\u003C\u002Ful>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-T8SqPHwf-1663124776063)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月04日14时:32分:03秒)]\u003C\u002Fp>\u003Ch4 id=\"53sona的基本使用\">5.3、sona的基本使用\u003Ca class=\"heading-anchor\" href=\"#53sona的基本使用\" aria-hidden=\"true\">#\u003C\u002Fa>\u003C\u002Fh4>\u003Cp>Sonar Qube的使用方式很多，Maven可以整合，也可以采用sonar-scanner的方式，再查看Sonar Qube的检测效果\u003C\u002Fp>\u003Ch5 id=\"531maven实现代码检测\">5.3.1、Maven实现代码检测\u003Ca class=\"heading-anchor\" href=\"#531maven实现代码检测\" aria-hidden=\"true\">#\u003C\u002Fa>\u003C\u002Fh5>\u003Cul>\u003Cli>\u003Cp>修改Maven的settings.xml文件配置Sonar Qube信息\u003C\u002Fp>\u003Cdiv class=\"code-block\" data-lang=\"text\">\u003Cdiv class=\"code-head\">\u003Cdiv class=\"code-head-left\">\u003Cspan class=\"code-dots\">\u003C\u002Fspan>\u003Cspan class=\"code-lang\">text\u003C\u002Fspan>\u003C\u002Fdiv>\u003C\u002Fdiv>\u003Cpre class=\"shiki shiki-themes github-light github-dark\" style=\"background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan>&#x3C;profile>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>    &#x3C;id>sonar&#x3C;\u002Fid>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>    &#x3C;activation>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>        &#x3C;activeByDefault>true&#x3C;\u002FactiveByDefault>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>    &#x3C;\u002Factivation>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>    &#x3C;properties>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>        &#x3C;sonar.login>admin&#x3C;\u002Fsonar.login>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>        &#x3C;sonar.password>123456789&#x3C;\u002Fsonar.password>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>        &#x3C;sonar.host.url>http:\u002F\u002F192.168.11.11:9000&#x3C;\u002Fsonar.host.url>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>    &#x3C;\u002Fproperties>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>&#x3C;\u002Fprofile>\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\u003C\u002Fdiv>\u003C\u002Fli>\u003Cli>\u003Cp>在代码位置执行命令：mvn sonar:sonar\u003C\u002Fp>\u003C\u002Fli>\u003Cli>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-c5H18hEn-1663124776063)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月04日15时:02分:36秒)]\u003C\u002Fp>\u003C\u002Fli>\u003Cli>\u003Cp>查看Sonar Qube界面检测结果\u003C\u002Fp>\u003C\u002Fli>\u003C\u002Ful>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7pUosv0B-1663124776063)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月04日15时:02分:59秒)]\u003C\u002Fp>\u003Ch5 id=\"532sonar-scanner实现代码检测\">5.3.2、Sonar-scanner实现代码检测\u003Ca class=\"heading-anchor\" href=\"#532sonar-scanner实现代码检测\" aria-hidden=\"true\">#\u003C\u002Fa>\u003C\u002Fh5>\u003Cul>\u003Cli>\u003Cp>下载Sonar-scanner：https:\u002F\u002Fbinaries.sonarsource.com\u002FDistribution\u002Fsonar-scanner-cli\u002F\u003C\u002Fp>\u003Cp>下载4.6.x版本即可，要求Linux版本\u003C\u002Fp>\u003C\u002Fli>\u003Cli>\u003Cp>解压并配置sonar服务端信息\u003C\u002Fp>\u003Cul>\u003Cli>\u003Cp>由于是zip压缩包，需要安装unzip解压插件\u003C\u002Fp>\u003C\u002Fli>\u003Cli>\u003Cp>\u003C\u002Fp>\u003C\u002Fli>\u003C\u002Ful>\u003Cdiv class=\"code-block\" data-lang=\"text\">\u003Cdiv class=\"code-head\">\u003Cdiv class=\"code-head-left\">\u003Cspan class=\"code-dots\">\u003C\u002Fspan>\u003Cspan class=\"code-lang\">text\u003C\u002Fspan>\u003C\u002Fdiv>\u003C\u002Fdiv>\u003Cpre class=\"shiki shiki-themes github-light github-dark\" style=\"background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan>yum -y install unzip\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\u003C\u002Fdiv>\u003Cul>\u003Cli>\u003Cp>解压压缩包\u003C\u002Fp>\u003Cdiv class=\"code-block\" data-lang=\"text\">\u003Cdiv class=\"code-head\">\u003Cdiv class=\"code-head-left\">\u003Cspan class=\"code-dots\">\u003C\u002Fspan>\u003Cspan class=\"code-lang\">text\u003C\u002Fspan>\u003C\u002Fdiv>\u003C\u002Fdiv>\u003Cpre class=\"shiki shiki-themes github-light github-dark\" style=\"background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan>unzip sonar-scanner-cli\u002Fsonar-scanner-cli-4.6.0.2311-linux.zip\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\u003C\u002Fdiv>\u003C\u002Fli>\u003Cli>\u003Cp>配置sonarQube服务端地址，修改conf下的sonar-scanner.properties\u003C\u002Fp>\u003C\u002Fli>\u003C\u002Ful>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-f2Y9bWDY-1663124776064)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月04日15时:19分:45秒)]\u003C\u002Fp>\u003C\u002Fli>\u003Cli>\u003Cp>执行命令检测代码\u003C\u002Fp>\u003C\u002Fli>\u003C\u002Ful>\u003Cdiv class=\"code-block\" data-lang=\"text\">\u003Cdiv class=\"code-head\">\u003Cdiv class=\"code-head-left\">\u003Cspan class=\"code-dots\">\u003C\u002Fspan>\u003Cspan class=\"code-lang\">text\u003C\u002Fspan>\u003C\u002Fdiv>\u003C\u002Fdiv>\u003Cpre class=\"shiki shiki-themes github-light github-dark\" style=\"background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan># 在项目所在目录执行以下命令\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>\u002Fopt\u002Fdata\u002Fjenkins_data\u002Fjenkins_home\u002Fsonar-scanner\u002Fbin\u002Fsonar-scanner -Dsonar.sources=.\u002F -Dsonar.projectname=mytest  -Dsonar.login=3aa66c73523dc3955fdb04ada420b0a1365fd4c4  -Dsonar.projectKey=mytest  -Dsonar.java.binaries=.\u002Ftarget\u002F\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\u003C\u002Fdiv>\u003Cdiv class=\"code-block\" data-lang=\"text\">\u003Cdiv class=\"code-head\">\u003Cdiv class=\"code-head-left\">\u003Cspan class=\"code-dots\">\u003C\u002Fspan>\u003Cspan class=\"code-lang\">text\u003C\u002Fspan>\u003C\u002Fdiv>\u003C\u002Fdiv>\u003Cpre class=\"shiki shiki-themes github-light github-dark\" style=\"background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan>[root@localhost TestProject]# \u002Fopt\u002Fdata\u002Fjenkins_data\u002Fjenkins_home\u002Fsonar-scanner\u002Fbin\u002Fsonar-scanner -Dsonar.sources=.\u002F -Dsonar.projectname=mytest  -Dsonar.login=3aa66c73523dc3955fdb04ada420b0a1365fd4c4  -Dsonar.projectKey=mytest  -Dsonar.java.binaries=.\u002Ftarget\u002F\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Scanner configuration file: \u002Fopt\u002Fdata\u002Fjenkins_data\u002Fjenkins_home\u002Fsonar-scanner\u002Fconf\u002Fsonar-scanner.properties\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Project root configuration file: NONE\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: SonarScanner 4.6.1.2450\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Java 11.0.3 AdoptOpenJDK (64-bit)\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Linux 3.10.0-1160.76.1.el7.x86_64 amd64\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: User cache: \u002Froot\u002F.sonar\u002Fcache\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Scanner configuration file: \u002Fopt\u002Fdata\u002Fjenkins_data\u002Fjenkins_home\u002Fsonar-scanner\u002Fconf\u002Fsonar-scanner.properties\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Project root configuration file: NONE\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Analyzing on SonarQube server 8.9.3\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Default locale: \"en_US\", source code encoding: \"UTF-8\"\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Load global settings\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Load global settings (done) | time=89ms\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Server id: 243B8A4D-AYMHLlWCpKRcCxeen58c\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: User cache: \u002Froot\u002F.sonar\u002Fcache\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Load\u002Fdownload plugins\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Load plugins index\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Load plugins index (done) | time=48ms\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Plugin [l10nzh] defines 'l10nen' as base plugin. This metadata can be removed from manifest of l10n plugins since version 5.2.\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Load\u002Fdownload plugins (done) | time=124ms\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Process project properties\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Process project properties (done) | time=8ms\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Execute project builders\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Execute project builders (done) | time=1ms\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Project key: mytest\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Base dir: \u002Fopt\u002Fdata\u002Fjenkins_data\u002Fjenkins_home\u002Fworkspace\u002FTestProject\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Working dir: \u002Fopt\u002Fdata\u002Fjenkins_data\u002Fjenkins_home\u002Fworkspace\u002FTestProject\u002F.scannerwork\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Load project settings for component key: 'mytest'\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Load quality profiles\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Load quality profiles (done) | time=60ms\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Load active rules\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Load active rules (done) | time=1060ms\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Indexing files...\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Project configuration:\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: 9 files indexed\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: 8 files ignored because of scm ignore settings\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Quality profile for java: Sonar way\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Quality profile for xml: Sonar way\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: ------------- Run sensors on module mytest\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Load metrics repository\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Load metrics repository (done) | time=23ms\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Sensor JavaSquidSensor [java]\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Configured Java source version (sonar.java.source): none\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: JavaClasspath initialization\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: JavaClasspath initialization (done) | time=9ms\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: JavaTestClasspath initialization\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: JavaTestClasspath initialization (done) | time=0ms\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Java Main Files AST scan\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: 3 source files to be analyzed\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Load project repositories\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Load project repositories (done) | time=8ms\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: 3\u002F3 source files have been analyzed\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>WARN: Dependencies\u002Flibraries were not provided for analysis of SOURCE files. The 'sonar.java.libraries' property is empty. Verify your configuration, as you might end up with less precise results.\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>WARN: Unresolved imports\u002Ftypes have been detected during analysis. Enable DEBUG mode to see them.\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Java Main Files AST scan (done) | time=1270ms\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Java Test Files AST scan\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: 0 source files to be analyzed\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: 0\u002F0 source files have been analyzed\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Java Test Files AST scan (done) | time=1ms\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Java Generated Files AST scan\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: 0 source files to be analyzed\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: 0\u002F0 source files have been analyzed\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Java Generated Files AST scan (done) | time=0ms\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Sensor JavaSquidSensor [java] (done) | time=1659ms\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Sensor CSS Rules [cssfamily]\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: No CSS, PHP, HTML or VueJS files are found in the project. CSS analysis is skipped.\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Sensor CSS Rules [cssfamily] (done) | time=1ms\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Sensor JaCoCo XML Report Importer [jacoco]\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: 'sonar.coverage.jacoco.xmlReportPaths' is not defined. Using default locations: target\u002Fsite\u002Fjacoco\u002Fjacoco.xml,target\u002Fsite\u002Fjacoco-it\u002Fjacoco.xml,build\u002Freports\u002Fjacoco\u002Ftest\u002FjacocoTestReport.xml\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: No report imported, no coverage information will be imported by JaCoCo XML Report Importer\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Sensor JaCoCo XML Report Importer [jacoco] (done) | time=3ms\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Sensor C# Project Type Information [csharp]\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Sensor C# Project Type Information [csharp] (done) | time=1ms\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Sensor C# Properties [csharp]\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Sensor C# Properties [csharp] (done) | time=1ms\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Sensor SurefireSensor [java]\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: parsing [\u002Fopt\u002Fdata\u002Fjenkins_data\u002Fjenkins_home\u002Fworkspace\u002FTestProject\u002Ftarget\u002Fsurefire-reports]\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Sensor SurefireSensor [java] (done) | time=3ms\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Sensor JavaXmlSensor [java]\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: 1 source file to be analyzed\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: 1\u002F1 source file has been analyzed\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Sensor JavaXmlSensor [java] (done) | time=218ms\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Sensor HTML [web]\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Sensor HTML [web] (done) | time=5ms\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Sensor XML Sensor [xml]\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: 1 source file to be analyzed\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: 1\u002F1 source file has been analyzed\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Sensor XML Sensor [xml] (done) | time=167ms\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Sensor VB.NET Project Type Information [vbnet]\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Sensor VB.NET Project Type Information [vbnet] (done) | time=1ms\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Sensor VB.NET Properties [vbnet]\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Sensor VB.NET Properties [vbnet] (done) | time=1ms\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: ------------- Run sensors on project\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Sensor Zero Coverage Sensor\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Sensor Zero Coverage Sensor (done) | time=10ms\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Sensor Java CPD Block Indexer\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Sensor Java CPD Block Indexer (done) | time=17ms\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: SCM Publisher SCM provider for this project is: git\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: SCM Publisher 4 source files to be analyzed\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: SCM Publisher 4\u002F4 source files have been analyzed (done) | time=167ms\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: CPD Executor 3 files had no CPD blocks\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: CPD Executor Calculating CPD for 0 files\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: CPD Executor CPD calculation finished (done) | time=0ms\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Analysis report generated in 74ms, dir size=101 KB\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Analysis report compressed in 33ms, zip size=18 KB\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Analysis report uploaded in 1136ms\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: ANALYSIS SUCCESSFUL, you can browse http:\u002F\u002F10.21.90.111:9000\u002Fdashboard?id=mytest\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Note that you will be able to access the updated dashboard once the server has processed the submitted analysis report\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: More about the report processing at http:\u002F\u002F10.21.90.111:9000\u002Fapi\u002Fce\u002Ftask?id=AYMHZFLNEMGepM7duLdg\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Analysis total time: 6.437 s\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: ------------------------------------------------------------------------\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: EXECUTION SUCCESS\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: ------------------------------------------------------------------------\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Total time: 7.536s\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Final Memory: 8M\u002F44M\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: ------------------------------------------------------------------------\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>[root@localhost TestProject]# \u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\u003C\u002Fdiv>\u003Cul>\u003Cli>\u003Cp>查看代码监测效果\u003C\u002Fp>\u003C\u002Fli>\u003C\u002Ful>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cjsK42Up-1663124776064)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月04日15时:27分:38秒)]\u003C\u002Fp>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-at4haZsW-1663124776064)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月04日15时:28分:06秒)]\u003C\u002Fp>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JywRUxbU-1663124776064)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月04日15时:28分:23秒)]\u003C\u002Fp>\u003Ch5 id=\"533jenkins整合sonar\">5.3.3、jenkins整合sonar\u003Ca class=\"heading-anchor\" href=\"#533jenkins整合sonar\" aria-hidden=\"true\">#\u003C\u002Fa>\u003C\u002Fh5>\u003Ch6 id=\"5331下载sonar-scanner插件\">5.3.3.1、下载sonar-scanner插件\u003Ca class=\"heading-anchor\" href=\"#5331下载sonar-scanner插件\" aria-hidden=\"true\">#\u003C\u002Fa>\u003C\u002Fh6>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qLK2wqPd-1663124776064)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月04日15时:31分:11秒)]\u003C\u002Fp>\u003Ch6 id=\"5332配置sonar秘钥以及地址\">5.3.3.2、配置sonar秘钥以及地址\u003Ca class=\"heading-anchor\" href=\"#5332配置sonar秘钥以及地址\" aria-hidden=\"true\">#\u003C\u002Fa>\u003C\u002Fh6>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-P08hldRC-1663124776064)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月04日15时:37分:43秒)]\u003C\u002Fp>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vW6aLnVD-1663124776065)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月04日15时:37分:11秒)]\u003C\u002Fp>\u003Ch6 id=\"5333配置全局sonar路径\">5.3.3.3、配置全局sonar路径\u003Ca class=\"heading-anchor\" href=\"#5333配置全局sonar路径\" aria-hidden=\"true\">#\u003C\u002Fa>\u003C\u002Fh6>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uRg7wUOT-1663124776065)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月04日15时:42分:33秒)]\u003C\u002Fp>\u003Ch6 id=\"5333流水线中追加代码扫描\">5.3.3.3、流水线中追加代码扫描\u003Ca class=\"heading-anchor\" href=\"#5333流水线中追加代码扫描\" aria-hidden=\"true\">#\u003C\u002Fa>\u003C\u002Fh6>\u003Cdiv class=\"code-block\" data-lang=\"text\">\u003Cdiv class=\"code-head\">\u003Cdiv class=\"code-head-left\">\u003Cspan class=\"code-dots\">\u003C\u002Fspan>\u003Cspan class=\"code-lang\">text\u003C\u002Fspan>\u003C\u002Fdiv>\u003C\u002Fdiv>\u003Cpre class=\"shiki shiki-themes github-light github-dark\" style=\"background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan>sonar.projectname=${JOB_NAME}\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>sonar.projectKey=${JOB_NAME}\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>sonar.source=.\u002F\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>sonar.java.binaries=target\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\u003C\u002Fdiv>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZxT05OR9-1663124776065)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月04日15时:46分:33秒)]\u003C\u002Fp>\u003Ch6 id=\"5334代码构建\">5.3.3.4、代码构建\u003Ca class=\"heading-anchor\" href=\"#5334代码构建\" aria-hidden=\"true\">#\u003C\u002Fa>\u003C\u002Fh6>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Z1PLfwUW-1663124776065)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月04日15时:51分:29秒)]\u003C\u002Fp>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-232b0EAy-1663124776065)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月04日15时:52分:20秒)]\u003C\u002Fp>\u003Cdiv class=\"code-block\" data-lang=\"text\">\u003Cdiv class=\"code-head\">\u003Cdiv class=\"code-head-left\">\u003Cspan class=\"code-dots\">\u003C\u002Fspan>\u003Cspan class=\"code-lang\">text\u003C\u002Fspan>\u003C\u002Fdiv>\u003C\u002Fdiv>\u003Cpre class=\"shiki shiki-themes github-light github-dark\" style=\"background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan>INFO: Scanner configuration file: \u002Fvar\u002Fjenkins_home\u002Fsonar-scanner\u002Fconf\u002Fsonar-scanner.properties\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Project root configuration file: NONE\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: SonarScanner 4.6.1.2450\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Java 11.0.3 AdoptOpenJDK (64-bit)\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Linux 3.10.0-1160.76.1.el7.x86_64 amd64\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: User cache: \u002Fvar\u002Fjenkins_home\u002F.sonar\u002Fcache\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Scanner configuration file: \u002Fvar\u002Fjenkins_home\u002Fsonar-scanner\u002Fconf\u002Fsonar-scanner.properties\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Project root configuration file: NONE\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Analyzing on SonarQube server 8.9.3\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Default locale: \"en\", source code encoding: \"UTF-8\"\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Load global settings\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Load global settings (done) | time=91ms\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Server id: 243B8A4D-AYMHLlWCpKRcCxeen58c\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: User cache: \u002Fvar\u002Fjenkins_home\u002F.sonar\u002Fcache\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Load\u002Fdownload plugins\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Load plugins index\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Load plugins index (done) | time=51ms\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Plugin [l10nzh] defines 'l10nen' as base plugin. This metadata can be removed from manifest of l10n plugins since version 5.2.\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Load\u002Fdownload plugins (done) | time=122ms\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Process project properties\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Process project properties (done) | time=1ms\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Execute project builders\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Execute project builders (done) | time=2ms\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Project key: TestProject\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Base dir: \u002Fvar\u002Fjenkins_home\u002Fworkspace\u002FTestProject\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Working dir: \u002Fvar\u002Fjenkins_home\u002Fworkspace\u002FTestProject\u002F.scannerwork\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Load project settings for component key: 'TestProject'\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Auto-configuring with CI 'Jenkins'\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Load quality profiles\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Load quality profiles (done) | time=70ms\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Auto-configuring with CI 'Jenkins'\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Load active rules\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Load active rules (done) | time=1169ms\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Indexing files...\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Project configuration:\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: 9 files indexed\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: 8 files ignored because of scm ignore settings\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Quality profile for java: Sonar way\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Quality profile for xml: Sonar way\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: ------------- Run sensors on module TestProject\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Load metrics repository\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Load metrics repository (done) | time=33ms\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Sensor JavaSquidSensor [java]\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Configured Java source version (sonar.java.source): none\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: JavaClasspath initialization\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: JavaClasspath initialization (done) | time=8ms\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: JavaTestClasspath initialization\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: JavaTestClasspath initialization (done) | time=0ms\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Java Main Files AST scan\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: 3 source files to be analyzed\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Load project repositories\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Load project repositories (done) | time=7ms\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: 3\u002F3 source files have been analyzed\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>WARN: Dependencies\u002Flibraries were not provided for analysis of SOURCE files. The 'sonar.java.libraries' property is empty. Verify your configuration, as you might end up with less precise results.\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>WARN: Unresolved imports\u002Ftypes have been detected during analysis. Enable DEBUG mode to see them.\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Java Main Files AST scan (done) | time=983ms\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Java Test Files AST scan\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: 0 source files to be analyzed\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: 0\u002F0 source files have been analyzed\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Java Test Files AST scan (done) | time=0ms\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Java Generated Files AST scan\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: 0 source files to be analyzed\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: 0\u002F0 source files have been analyzed\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Java Generated Files AST scan (done) | time=0ms\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Sensor JavaSquidSensor [java] (done) | time=1330ms\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Sensor CSS Rules [cssfamily]\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: No CSS, PHP, HTML or VueJS files are found in the project. CSS analysis is skipped.\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Sensor CSS Rules [cssfamily] (done) | time=0ms\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Sensor JaCoCo XML Report Importer [jacoco]\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: 'sonar.coverage.jacoco.xmlReportPaths' is not defined. Using default locations: target\u002Fsite\u002Fjacoco\u002Fjacoco.xml,target\u002Fsite\u002Fjacoco-it\u002Fjacoco.xml,build\u002Freports\u002Fjacoco\u002Ftest\u002FjacocoTestReport.xml\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: No report imported, no coverage information will be imported by JaCoCo XML Report Importer\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Sensor JaCoCo XML Report Importer [jacoco] (done) | time=3ms\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Sensor C# Project Type Information [csharp]\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Sensor C# Project Type Information [csharp] (done) | time=1ms\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Sensor C# Properties [csharp]\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Sensor C# Properties [csharp] (done) | time=1ms\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Sensor SurefireSensor [java]\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: parsing [\u002Fvar\u002Fjenkins_home\u002Fworkspace\u002FTestProject\u002Ftarget\u002Fsurefire-reports]\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Sensor SurefireSensor [java] (done) | time=1ms\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Sensor JavaXmlSensor [java]\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: 1 source file to be analyzed\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: 1\u002F1 source file has been analyzed\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Sensor JavaXmlSensor [java] (done) | time=186ms\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Sensor HTML [web]\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Sensor HTML [web] (done) | time=3ms\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Sensor XML Sensor [xml]\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: 1 source file to be analyzed\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: 1\u002F1 source file has been analyzed\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Sensor XML Sensor [xml] (done) | time=126ms\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Sensor VB.NET Project Type Information [vbnet]\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Sensor VB.NET Project Type Information [vbnet] (done) | time=1ms\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Sensor VB.NET Properties [vbnet]\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Sensor VB.NET Properties [vbnet] (done) | time=1ms\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: ------------- Run sensors on project\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Sensor Zero Coverage Sensor\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Sensor Zero Coverage Sensor (done) | time=8ms\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Sensor Java CPD Block Indexer\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Sensor Java CPD Block Indexer (done) | time=15ms\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: SCM Publisher SCM provider for this project is: git\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: SCM Publisher 4 source files to be analyzed\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: SCM Publisher 4\u002F4 source files have been analyzed (done) | time=86ms\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: CPD Executor 3 files had no CPD blocks\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: CPD Executor Calculating CPD for 0 files\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: CPD Executor CPD calculation finished (done) | time=0ms\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Analysis report generated in 67ms, dir size=101 KB\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Analysis report compressed in 33ms, zip size=18 KB\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Analysis report uploaded in 444ms\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: ANALYSIS SUCCESSFUL, you can browse http:\u002F\u002F10.21.90.111:9000\u002Fdashboard?id=TestProject\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Note that you will be able to access the updated dashboard once the server has processed the submitted analysis report\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: More about the report processing at http:\u002F\u002F10.21.90.111:9000\u002Fapi\u002Fce\u002Ftask?id=AYMHfOJgEMGepM7duLds\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Analysis total time: 5.303 s\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: ------------------------------------------------------------------------\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: EXECUTION SUCCESS\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: ------------------------------------------------------------------------\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Total time: 6.395s\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Final Memory: 8M\u002F44M\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: ------------------------------------------------------------------------\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>SSH: Connecting from host [7c6d0b3479dd]\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>SSH: Connecting with configuration [10.21.90.111] ...\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>SSH: Creating session: username [root], hostname [10.21.90.111], port [22]\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>SSH: Connecting session ...\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>SSH: Connected\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>SSH: Opening SFTP channel ...\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>SSH: SFTP channel open\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>SSH: Connecting SFTP channel ...\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>SSH: Connected\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>SSH: cd [\u002F]\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>SSH: OK\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>SSH: cd [\u002F]\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>SSH: OK\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>SSH: cd [opt\u002Fdata\u002FtempJar\u002Ftest]\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>SSH: OK\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>SSH: cd [docker]\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>SSH: OK\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>SSH: put [Dockerfile]\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>SSH: OK\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>SSH: put [docker-compose.yml]\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>SSH: OK\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>SSH: cd [\u002F]\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>SSH: OK\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>SSH: cd [opt\u002Fdata\u002FtempJar\u002Ftest]\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>SSH: OK\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>SSH: cd [target]\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>SSH: OK\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>SSH: put [test.jar]\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>SSH: OK\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>SSH: Opening exec channel ...\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>SSH: EXEC: channel open\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>SSH: EXEC: STDOUT\u002FSTDERR from command [docker rm -f  hello-world1.0.0\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>docker rmi  hello-world:v1.0.0\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>pid=`ps -ef | grep test.jar.jar | grep -v grep | awk '{print $2}'`\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>echo \"旧的进程id: $pid\"\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>if [ -n \"$pid\" ]\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>then\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>kill -9 $pid\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>fi\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>cd \u002Fopt\u002Fdata\u002FtempJar\u002Ftest\u002Ftarget\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>mv test.jar  \u002Fopt\u002Fdata\u002FtempJar\u002Ftest\u002Fdocker\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>cd  \u002Fopt\u002Fdata\u002FtempJar\u002Ftest\u002Fdocker\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>docker-compose down\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>docker-compose up -d --build\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>npid=`ps -ef | grep SpringbootHelloWorld-0.0.1-SNAPSHOT.jar | grep -v grep | awk '{print $2}'`\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>echo \"新的进程 $npid:$?\"\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>echo \"启动成功！\"] ...\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>SSH: EXEC: connected\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>hello-world1.0.0\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>Untagged: hello-world:v1.0.0\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>Deleted: sha256:32a33a140320c2b60f8fc84c1e993a61acc279f2b0d692702222314d88c808d6\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>Deleted: sha256:f2a568e1a3911ef3fcbca1367f1d41f6962d54d6f51c62ab2370c16ce86280b6\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>Deleted: sha256:e731c7d62db0747e0ded60e79506c7f23d71c482ad252aa16372b7b3aa4ab93e\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>Deleted: sha256:0d6121f16fa8a198eecb4d73be24e0673a46022401dd4ab8bc8873b66a77461e\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>旧的进程id: \u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>Removing network docker_default\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>Creating network \"docker_default\" with the default driver\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>Building demo\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>Step 1\u002F4 : FROM adoptopenjdk\u002Fopenjdk8\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan> ---> 540dce7c8eb7\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>Step 2\u002F4 : COPY test.jar \u002Fusr\u002Flocal\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan> ---> 9d9156866239\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>Step 3\u002F4 : WORKDIR \u002Fusr\u002Flocal\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan> ---> Running in e48558ffdfe1\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>Removing intermediate container e48558ffdfe1\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan> ---> 24800bc4c809\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>Step 4\u002F4 : CMD java -jar  test.jar\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan> ---> Running in ca619af9cd72\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>Removing intermediate container ca619af9cd72\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan> ---> 64bf8a27c101\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>Successfully built 64bf8a27c101\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>Successfully tagged hello-world:v1.0.0\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>Creating hello-world1.0.0 ... \u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>[1B新的进程 :0\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>启动成功！\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>SSH: EXEC: completed after 5,204 ms\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>SSH: Disconnecting configuration [10.21.90.111] ...\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>SSH: Transferred 3 file(s)\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>Finished: SUCCESS\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\u003C\u002Fdiv>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fOvOif1k-1663124776065)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月04日15时:55分:02秒)]\u003C\u002Fp>\u003Ch3 id=\"6harbor\">6、harbor\u003Ca class=\"heading-anchor\" href=\"#6harbor\" aria-hidden=\"true\">#\u003C\u002Fa>\u003C\u002Fh3>\u003Ch4 id=\"61安装docker-compose\">6.1、安装docker-compose\u003Ca class=\"heading-anchor\" href=\"#61安装docker-compose\" aria-hidden=\"true\">#\u003C\u002Fa>\u003C\u002Fh4>\u003Cdiv class=\"code-block\" data-lang=\"text\">\u003Cdiv class=\"code-head\">\u003Cdiv class=\"code-head-left\">\u003Cspan class=\"code-dots\">\u003C\u002Fspan>\u003Cspan class=\"code-lang\">text\u003C\u002Fspan>\u003C\u002Fdiv>\u003C\u002Fdiv>\u003Cpre class=\"shiki shiki-themes github-light github-dark\" style=\"background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan>curl -L \"https:\u002F\u002Fgithub.com\u002Fdocker\u002Fcompose\u002Freleases\u002Fdownload\u002F1.23.2\u002Fdocker-compose-$(uname -s)-$(uname -m)\" -o\u002Fusr\u002Flocal\u002Fbin\u002Fdocker-compose\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\u003C\u002Fdiv>\u003Cp>给docker-compose赋予权限\u003C\u002Fp>\u003Cdiv class=\"code-block\" data-lang=\"text\">\u003Cdiv class=\"code-head\">\u003Cdiv class=\"code-head-left\">\u003Cspan class=\"code-dots\">\u003C\u002Fspan>\u003Cspan class=\"code-lang\">text\u003C\u002Fspan>\u003C\u002Fdiv>\u003C\u002Fdiv>\u003Cpre class=\"shiki shiki-themes github-light github-dark\" style=\"background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan>chmod +x \u002Fusr\u002Flocal\u002Fbin\u002Fdocker-compose\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\u003C\u002Fdiv>\u003Cp>检查运行docker-compose --version，如下:\u003C\u002Fp>\u003Cdiv class=\"code-block\" data-lang=\"text\">\u003Cdiv class=\"code-head\">\u003Cdiv class=\"code-head-left\">\u003Cspan class=\"code-dots\">\u003C\u002Fspan>\u003Cspan class=\"code-lang\">text\u003C\u002Fspan>\u003C\u002Fdiv>\u003C\u002Fdiv>\u003Cpre class=\"shiki shiki-themes github-light github-dark\" style=\"background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan>[root@localhost ~]# docker-compose --version\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>docker-compose version 1.23.2, build 1110ad01\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\u003C\u002Fdiv>\u003Ch4 id=\"62安装harbor\">6.2、安装harbor\u003Ca class=\"heading-anchor\" href=\"#62安装harbor\" aria-hidden=\"true\">#\u003C\u002Fa>\u003C\u002Fh4>\u003Cul>\u003Cli>\u003Cp>在github上下载相应的安装包\u003C\u002Fp>\u003C\u002Fli>\u003C\u002Ful>\u003Cp>​ http:\u002F\u002Fgithub.com\u002Fgoharbor\u002Fharbor\u002Freleases\u003C\u002Fp>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KAxYfzzE-1663124776065)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月03日12时:22分:37秒)]\u003C\u002Fp>\u003Cul>\u003Cli>\u003Cp>解压完毕进入目录修改编辑配置文件\u003C\u002Fp>\u003C\u002Fli>\u003C\u002Ful>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hegacbME-1663124776065)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月03日12时:06分:56秒)]\u003C\u002Fp>\u003Cp>​ [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Rg7HYNPE-1663124776066)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月03日12时:26分:38秒)]\u003C\u002Fp>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cboyO0Qi-1663124776067)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月03日12时:29分:19秒)]\u003C\u002Fp>\u003Cul>\u003Cli>\u003Cp>运行 .\u002Finstall.sh\u003C\u002Fp>\u003C\u002Fli>\u003C\u002Ful>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wek3xwxl-1663124776067)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月03日12时:28分:53秒)]\u003C\u002Fp>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ND7IXPjs-1663124776067)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月03日12时:32分:41秒)]\u003C\u002Fp>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Wfhe84yp-1663124776067)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月03日12时:31分:04秒)]\u003C\u002Fp>\u003Cul>\u003Cli>\u003Cp>常用的管理命令&lt;都需要在harbor目录下进行&gt;\u003C\u002Fp>\u003C\u002Fli>\u003C\u002Ful>\u003Cblockquote>\u003Cp>停止服务： docker-compose stop\u003Cbr\u002F>开始服务： docker-compose start\u003Cbr\u002F>重启服务：docker-compose restart\u003Cbr\u002F>停止服务并删除容器：docker-compose down\u003Cbr\u002F>启动服务并运行容器：docker-compose up\u003C\u002Fp>\u003C\u002Fblockquote>\u003Ch4 id=\"63jenkins配置本机docker\">6.3、jenkins配置本机docker\u003Ca class=\"heading-anchor\" href=\"#63jenkins配置本机docker\" aria-hidden=\"true\">#\u003C\u002Fa>\u003C\u002Fh4>\u003Ch5 id=\"631修改dockersock权限\">6.3.1、修改docker.sock权限\u003Ca class=\"heading-anchor\" href=\"#631修改dockersock权限\" aria-hidden=\"true\">#\u003C\u002Fa>\u003C\u002Fh5>\u003Cdiv class=\"code-block\" data-lang=\"text\">\u003Cdiv class=\"code-head\">\u003Cdiv class=\"code-head-left\">\u003Cspan class=\"code-dots\">\u003C\u002Fspan>\u003Cspan class=\"code-lang\">text\u003C\u002Fspan>\u003C\u002Fdiv>\u003C\u002Fdiv>\u003Cpre class=\"shiki shiki-themes github-light github-dark\" style=\"background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan>cd \u002Fvar\u002Frun\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>  \u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>chmod o+rw docker.sock\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\u003C\u002Fdiv>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Xjl2SUlv-1663124776067)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月03日12时:38分:25秒)]\u003C\u002Fp>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PlLNLOIM-1663124776067)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月03日12时:39分:13秒)]\u003C\u002Fp>\u003Ch5 id=\"632配置docker私服\">6.3.2、配置docker私服\u003Ca class=\"heading-anchor\" href=\"#632配置docker私服\" aria-hidden=\"true\">#\u003C\u002Fa>\u003C\u002Fh5>\u003Cdiv class=\"code-block\" data-lang=\"text\">\u003Cdiv class=\"code-head\">\u003Cdiv class=\"code-head-left\">\u003Cspan class=\"code-dots\">\u003C\u002Fspan>\u003Cspan class=\"code-lang\">text\u003C\u002Fspan>\u003C\u002Fdiv>\u003C\u002Fdiv>\u003Cpre class=\"shiki shiki-themes github-light github-dark\" style=\"background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan>vim \u002Fetc\u002Fdocker\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\u003C\u002Fdiv>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PJ7O7IA4-1663124776067)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月04日16时:38分:28秒)]\u003C\u002Fp>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vG4l15Nn-1663124776068)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月04日16时:38分:56秒)]\u003C\u002Fp>\u003Ch4 id=\"64jenkins集成harbor\">6.4、jenkins集成harbor\u003Ca class=\"heading-anchor\" href=\"#64jenkins集成harbor\" aria-hidden=\"true\">#\u003C\u002Fa>\u003C\u002Fh4>\u003Cblockquote>\u003Cp>我们将最开始构建完推送到服务器的步骤删除 重新再下面追加执行shell 在代码扫描完成之后就直接构建镜像打包发布到harbor私服\u003C\u002Fp>\u003C\u002Fblockquote>\u003Cdiv class=\"code-block\" data-lang=\"text\">\u003Cdiv class=\"code-head\">\u003Cdiv class=\"code-head-left\">\u003Cspan class=\"code-dots\">\u003C\u002Fspan>\u003Cspan class=\"code-lang\">text\u003C\u002Fspan>\u003C\u002Fdiv>\u003C\u002Fdiv>\u003Cpre class=\"shiki shiki-themes github-light github-dark\" style=\"background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan>mv target\u002F*.jar docker\u002F\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>docker build -t hello-world:$tag docker\u002F\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>docker login -u admin -p admin 10.21.90.111:8089\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>docker tag hello-world:$tag 10.21.90.111:8089\u002Frepo\u002Fhello-world:$tag\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>docker push 10.21.90.111:8089\u002Frepo\u002Fhello-world:$tag\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\u003C\u002Fdiv>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-f7lcn2h4-1663124776068)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月04日16时:20分:00秒)]\u003C\u002Fp>\u003Cdiv class=\"code-block\" data-lang=\"text\">\u003Cdiv class=\"code-head\">\u003Cdiv class=\"code-head-left\">\u003Cspan class=\"code-dots\">\u003C\u002Fspan>\u003Cspan class=\"code-lang\">text\u003C\u002Fspan>\u003C\u002Fdiv>\u003C\u002Fdiv>\u003Cpre class=\"shiki shiki-themes github-light github-dark\" style=\"background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan>[TestProject] $ \u002Fbin\u002Fsh -xe \u002Ftmp\u002Fjenkins11098697136826807761.sh\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>+ mv target\u002Ftest.jar docker\u002F\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>+ docker build -t hello-world:4.0.0 docker\u002F\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>Sending build context to Docker daemon  17.57MB\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>Step 1\u002F4 : FROM adoptopenjdk\u002Fopenjdk8\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan> ---> 540dce7c8eb7\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>Step 2\u002F4 : COPY test.jar \u002Fusr\u002Flocal\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan> ---> ec4d13f05a1f\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>Step 3\u002F4 : WORKDIR \u002Fusr\u002Flocal\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan> ---> Running in 895e1bf527aa\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>Removing intermediate container 895e1bf527aa\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan> ---> f06297821a35\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>Step 4\u002F4 : CMD java -jar  test.jar\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan> ---> Running in 7349658fc174\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>Removing intermediate container 7349658fc174\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan> ---> 891f70d1f0c9\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>Successfully built 891f70d1f0c9\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>Successfully tagged hello-world:4.0.0\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>+ docker login -u admin -p admin 10.21.90.111:8089\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>WARNING! Using --password via the CLI is insecure. Use --password-stdin.\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>WARNING! Your password will be stored unencrypted in \u002Fvar\u002Fjenkins_home\u002F.docker\u002Fconfig.json.\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>Configure a credential helper to remove this warning. See\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Freference\u002Fcommandline\u002Flogin\u002F#credentials-store\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>Login Succeeded\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>+ docker tag hello-world:4.0.0 10.21.90.111:8089\u002Frepo\u002Fhello-world:4.0.0\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>+ docker push 10.21.90.111:8089\u002Frepo\u002Fhello-world:4.0.0\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>The push refers to repository [10.21.90.111:8089\u002Frepo\u002Fhello-world]\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>4b2ccce3f91c: Preparing\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>d4d0d8f1f520: Preparing\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>808fbdd57a2b: Preparing\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>b40ed86654e5: Preparing\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>4b2ccce3f91c: Pushed\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>808fbdd57a2b: Pushed\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>b40ed86654e5: Pushed\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>d4d0d8f1f520: Pushed\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>4.0.0: digest: sha256:c74299fa0816845750b4d46e16b0b2678f447d6ec8955cdc82e08ee1f7c3e518 size: 1166\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>Finished: SUCCESS\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\u003C\u002Fdiv>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ke8NZRXS-1663124776068)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月04日16时:35分:48秒)]\u003C\u002Fp>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hxr9FglB-1663124776068)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月04日16时:36分:24秒)]\u003C\u002Fp>\u003Cblockquote>\u003Cp>注意：截止以上步骤 只是将jenkins构建好的镜像推送到了harbor 后续我们需要jenkins通知目标服务器拉取harbor中的镜像并启动\u003C\u002Fp>\u003C\u002Fblockquote>\u003Ch4 id=\"65目标服务器拉取harbor镜像\">6.5、目标服务器拉取harbor镜像\u003Ca class=\"heading-anchor\" href=\"#65目标服务器拉取harbor镜像\" aria-hidden=\"true\">#\u003C\u002Fa>\u003C\u002Fh4>\u003Ch5 id=\"651编写脚本文件\">6.5.1、编写脚本文件\u003Ca class=\"heading-anchor\" href=\"#651编写脚本文件\" aria-hidden=\"true\">#\u003C\u002Fa>\u003C\u002Fh5>\u003Cdiv class=\"code-block\" data-lang=\"text\">\u003Cdiv class=\"code-head\">\u003Cdiv class=\"code-head-left\">\u003Cspan class=\"code-dots\">\u003C\u002Fspan>\u003Cspan class=\"code-lang\">text\u003C\u002Fspan>\u003C\u002Fdiv>\u003C\u002Fdiv>\u003Cpre class=\"shiki shiki-themes github-light github-dark\" style=\"background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan>mkdir \u002Fopt\u002Fdata\u002Fdeploy\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>vim deploy.sh\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\u003C\u002Fdiv>\u003Cdiv class=\"code-block\" data-lang=\"text\">\u003Cdiv class=\"code-head\">\u003Cdiv class=\"code-head-left\">\u003Cspan class=\"code-dots\">\u003C\u002Fspan>\u003Cspan class=\"code-lang\">text\u003C\u002Fspan>\u003C\u002Fdiv>\u003C\u002Fdiv>\u003Cpre class=\"shiki shiki-themes github-light github-dark\" style=\"background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan>horbar_addr=$1\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>horbar_repo=$2\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>project=$3\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>version=$4\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>container_port=$5\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>host_port=$6\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>imageName=$horbar_addr\u002F$horbar_repo\u002F$project:$version\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>echo $imageName\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>containerId=`docker ps -a | grep ${project} | awk '{print $1}'`\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>echo $containerId\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>if [ \"$containerId\" != \"\" ] ; then\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>    docker stop $containerId\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>    docker rm $containerId\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>    echo \"Delete Container Success\"\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>fi\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>tag=`docker images | grep ${project} | awk '{print $2}'`\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>echo $tag\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>if [[ \"$tag\" =~ \"$version\" ]] ; then\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>    docker rmi  $imageName\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>    echo \"Delete Image Success\"\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>fi\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>docker login -u admin  -p admin  $horbar_addr\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>docker pull $imageName\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>docker run -d -p $host_port:$container_port --name $project $imageName\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>echo \"Start Container Success\"\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>echo $project\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\u003C\u002Fdiv>\u003Cp>设置权限并执行\u003C\u002Fp>\u003Cdiv class=\"code-block\" data-lang=\"text\">\u003Cdiv class=\"code-head\">\u003Cdiv class=\"code-head-left\">\u003Cspan class=\"code-dots\">\u003C\u002Fspan>\u003Cspan class=\"code-lang\">text\u003C\u002Fspan>\u003C\u002Fdiv>\u003C\u002Fdiv>\u003Cpre class=\"shiki shiki-themes github-light github-dark\" style=\"background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan>chmod a+x deploy.sh\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\u003C\u002Fdiv>\u003Cblockquote>\u003Cp>将脚本文件拷贝到\u002Fusr\u002Fbin路径下 这样保证在任何位置都可以执行该脚本\u003C\u002Fp>\u003C\u002Fblockquote>\u003Cdiv class=\"code-block\" data-lang=\"text\">\u003Cdiv class=\"code-head\">\u003Cdiv class=\"code-head-left\">\u003Cspan class=\"code-dots\">\u003C\u002Fspan>\u003Cspan class=\"code-lang\">text\u003C\u002Fspan>\u003C\u002Fdiv>\u003C\u002Fdiv>\u003Cpre class=\"shiki shiki-themes github-light github-dark\" style=\"background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan>[root@localhost deploy]# echo $PATH\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>\u002Fusr\u002Flocal\u002Fsbin:\u002Fusr\u002Flocal\u002Fbin:\u002Fusr\u002Fsbin:\u002Fusr\u002Fbin:\u002Froot\u002Fbin\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>[root@localhost deploy]# cp deploy.sh  \u002Fusr\u002Fbin\u002F\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\u003C\u002Fdiv>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-R6xQxrLn-1663124776068)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月04日18时:36分:18秒)]\u003C\u002Fp>\u003Ch5 id=\"652配置构建后的操作\">6.5.2、配置构建后的操作\u003Ca class=\"heading-anchor\" href=\"#652配置构建后的操作\" aria-hidden=\"true\">#\u003C\u002Fa>\u003C\u002Fh5>\u003Cul>\u003Cli>\u003Cp>首先追加一个port参数用来记录容器启动时候占用的端口\u003C\u002Fp>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-A5dU914v-1663124776068)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月04日17时:05分:05秒)]\u003C\u002Fp>\u003C\u002Fli>\u003Cli>\u003Cp>增加构建后的步骤\u003C\u002Fp>\u003C\u002Fli>\u003C\u002Ful>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MhKMJsX5-1663124776068)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月04日18时:37分:21秒)]\u003C\u002Fp>\u003Cdiv class=\"code-block\" data-lang=\"text\">\u003Cdiv class=\"code-head\">\u003Cdiv class=\"code-head-left\">\u003Cspan class=\"code-dots\">\u003C\u002Fspan>\u003Cspan class=\"code-lang\">text\u003C\u002Fspan>\u003C\u002Fdiv>\u003C\u002Fdiv>\u003Cpre class=\"shiki shiki-themes github-light github-dark\" style=\"background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan>INFO: Analysis total time: 3.951 s\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: ------------------------------------------------------------------------\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: EXECUTION SUCCESS\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: ------------------------------------------------------------------------\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Total time: 4.953s\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: Final Memory: 8M\u002F40M\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>INFO: ------------------------------------------------------------------------\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>[hello-world] $ \u002Fbin\u002Fsh -xe \u002Ftmp\u002Fjenkins4897409162283685501.sh\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>+ mv target\u002Ftest.jar docker\u002F\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>+ docker build -t hello-world:4.0.0 docker\u002F\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>Sending build context to Docker daemon  17.57MB\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>Step 1\u002F4 : FROM adoptopenjdk\u002Fopenjdk8\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan> ---> 540dce7c8eb7\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>Step 2\u002F4 : COPY test.jar \u002Fusr\u002Flocal\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan> ---> 937aca11ae87\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>Step 3\u002F4 : WORKDIR \u002Fusr\u002Flocal\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan> ---> Running in cc41c3a71efb\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>Removing intermediate container cc41c3a71efb\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan> ---> ce9d957a6346\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>Step 4\u002F4 : CMD java -jar  test.jar\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan> ---> Running in 76d1deddd448\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>Removing intermediate container 76d1deddd448\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan> ---> 92a250115b57\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>Successfully built 92a250115b57\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>Successfully tagged hello-world:4.0.0\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>+ docker login -u admin -p admin 10.21.90.111:8089\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>WARNING! Using --password via the CLI is insecure. Use --password-stdin.\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>WARNING! Your password will be stored unencrypted in \u002Fvar\u002Fjenkins_home\u002F.docker\u002Fconfig.json.\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>Configure a credential helper to remove this warning. See\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Freference\u002Fcommandline\u002Flogin\u002F#credentials-store\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>Login Succeeded\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>+ docker tag hello-world:4.0.0 10.21.90.111:8089\u002Frepo\u002Fhello-world:4.0.0\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>+ docker push 10.21.90.111:8089\u002Frepo\u002Fhello-world:4.0.0\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>The push refers to repository [10.21.90.111:8089\u002Frepo\u002Fhello-world]\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>d86574eb4574: Preparing\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>d4d0d8f1f520: Preparing\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>808fbdd57a2b: Preparing\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>b40ed86654e5: Preparing\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>d4d0d8f1f520: Layer already exists\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>808fbdd57a2b: Layer already exists\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>b40ed86654e5: Layer already exists\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>d86574eb4574: Pushed\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>4.0.0: digest: sha256:c87530204514713b00c0afa877808ab4937136570dc6ed6550a5ed049e4b57f4 size: 1166\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>SSH: Connecting from host [7c6d0b3479dd]\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>SSH: Connecting with configuration [10.21.90.111] ...\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>SSH: EXEC: completed after 11,608 ms\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>SSH: Disconnecting configuration [10.21.90.111] ...\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>SSH: Transferred 0 file(s)\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>Finished: SUCCESS\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\u003C\u002Fdiv>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5JOfsmDM-1663124776068)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月04日18时:37分:46秒)]\u003C\u002Fp>\u003Ch3 id=\"7jenkins流水线任务\">7、jenkins流水线任务\u003Ca class=\"heading-anchor\" href=\"#7jenkins流水线任务\" aria-hidden=\"true\">#\u003C\u002Fa>\u003C\u002Fh3>\u003Ch4 id=\"71-jenkins流水线任务介绍\">7.1 Jenkins流水线任务介绍\u003Ca class=\"heading-anchor\" href=\"#71-jenkins流水线任务介绍\" aria-hidden=\"true\">#\u003C\u002Fa>\u003C\u002Fh4>\u003Cblockquote>\u003Cp>之前采用Jenkins的自由风格构建的项目，每个步骤流程都要通过不同的方式设置，并且构建过程中整体流程是不可见的，无法确认每个流程花费的时间，并且问题不方便定位问题。\u003C\u002Fp>\u003Cp>Jenkins的Pipeline可以让项目的发布整体流程可视化，明确执行的阶段，可以快速的定位问题。并且整个项目的生命周期可以通过一个Jenkinsfile文件管理，而且Jenkinsfile文件是可以放在项目中维护。\u003C\u002Fp>\u003Cp>所以Pipeline相对自由风格或者其他的项目风格更容易操作。\u003C\u002Fp>\u003C\u002Fblockquote>\u003Ch4 id=\"72-jenkins流水线任务\">7.2 Jenkins流水线任务\u003Ca class=\"heading-anchor\" href=\"#72-jenkins流水线任务\" aria-hidden=\"true\">#\u003C\u002Fa>\u003C\u002Fh4>\u003Ch5 id=\"721-构建jenkins流水线任务\">7.2.1 构建Jenkins流水线任务\u003Ca class=\"heading-anchor\" href=\"#721-构建jenkins流水线任务\" aria-hidden=\"true\">#\u003C\u002Fa>\u003C\u002Fh5>\u003Cul>\u003Cli>\u003Cp>生成Groovy脚本\u003C\u002Fp>\u003C\u002Fli>\u003C\u002Ful>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jSZvNs68-1663124776068)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月04日18时:44分:49秒)]\u003C\u002Fp>\u003Cul>\u003Cli>\u003Cp>构建后查看视图\u003C\u002Fp>\u003C\u002Fli>\u003C\u002Ful>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-H3pIBCUI-1663124776069)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月04日18时:45分:39秒)]\u003C\u002Fp>\u003Ch5 id=\"722测试案例\">7.2.2、测试案例\u003Ca class=\"heading-anchor\" href=\"#722测试案例\" aria-hidden=\"true\">#\u003C\u002Fa>\u003C\u002Fh5>\u003Cdiv class=\"code-block\" data-lang=\"text\">\u003Cdiv class=\"code-head\">\u003Cdiv class=\"code-head-left\">\u003Cspan class=\"code-dots\">\u003C\u002Fspan>\u003Cspan class=\"code-lang\">text\u003C\u002Fspan>\u003C\u002Fdiv>\u003C\u002Fdiv>\u003Cpre class=\"shiki shiki-themes github-light github-dark\" style=\"background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan>pipeline {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>    agent any\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>    \u002F\u002F 存放所有任务的合集\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>    stages {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>        stage('拉取Git代码') {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>            steps {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>                echo '拉取Git代码'\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>            }\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>        }\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>        stage('检测代码质量') {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>            steps {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>                echo '检测代码质量'\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>            }\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>        }\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>        stage('构建代码') {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>            steps {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>                echo '构建代码'\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>            }\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>        }\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>        stage('制作自定义镜像并发布Harbor') {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>            steps {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>                echo '制作自定义镜像并发布Harbor'\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>            }\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>        }\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>        stage('基于Harbor部署工程') {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>            steps {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>                echo '基于Harbor部署工程'\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>            }\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>        }\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>    }\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>}\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\u003C\u002Fdiv>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9pN7QPBZ-1663124776069)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月04日19时:24分:09秒)]\u003C\u002Fp>\u003Ch5 id=\"723jenkinsfile\">7.2.3、Jenkinsfile\u003Ca class=\"heading-anchor\" href=\"#723jenkinsfile\" aria-hidden=\"true\">#\u003C\u002Fa>\u003C\u002Fh5>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NWCYadun-1663124776069)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月04日19时:30分:24秒)]\u003C\u002Fp>\u003Ch4 id=\"73pipeline部署\">7.3、pipeline部署\u003Ca class=\"heading-anchor\" href=\"#73pipeline部署\" aria-hidden=\"true\">#\u003C\u002Fa>\u003C\u002Fh4>\u003Ch5 id=\"731生成checkout流水线语法\">7.3.1、生成checkout流水线语法\u003Ca class=\"heading-anchor\" href=\"#731生成checkout流水线语法\" aria-hidden=\"true\">#\u003C\u002Fa>\u003C\u002Fh5>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-O3J86LzB-1663124776069)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月04日19时:37分:57秒)]\u003C\u002Fp>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-L0tEtyZl-1663124776069)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月04日19时:38分:59秒)]\u003C\u002Fp>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-L5myDfnu-1663124776069)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月04日19时:40分:34秒)]\u003C\u002Fp>\u003Ch5 id=\"732maven构建\">7.3.2、maven构建\u003Ca class=\"heading-anchor\" href=\"#732maven构建\" aria-hidden=\"true\">#\u003C\u002Fa>\u003C\u002Fh5>\u003Cblockquote>\u003Cp>步骤基本都是一致的 先生成对应的流水线语法 然后将其复制到Git Jenkinsfile文件中进行脚本替换即可\u003C\u002Fp>\u003C\u002Fblockquote>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-z3jtdOdF-1663124776069)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月04日19时:48分:16秒)]\u003C\u002Fp>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lnpEf2W7-1663124776069)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月04日19时:48分:36秒)]\u003C\u002Fp>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Lh3BVjDH-1663124776070)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月04日19时:49分:40秒)]\u003C\u002Fp>\u003Ch5 id=\"733pipeline代码审查sonar\">7.3.3、pipeline代码审查sonar\u003Ca class=\"heading-anchor\" href=\"#733pipeline代码审查sonar\" aria-hidden=\"true\">#\u003C\u002Fa>\u003C\u002Fh5>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zNN43GXn-1663124776070)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月04日19时:56分:24秒)]\u003C\u002Fp>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-F419FLLM-1663124776070)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月04日19时:56分:53秒)]\u003C\u002Fp>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NP8yB1H9-1663124776070)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月04日19时:57分:14秒)]\u003C\u002Fp>\u003Ch5 id=\"734pipeline制作自定义docker镜像\">7.3.4、pipeline制作自定义Docker镜像\u003Ca class=\"heading-anchor\" href=\"#734pipeline制作自定义docker镜像\" aria-hidden=\"true\">#\u003C\u002Fa>\u003C\u002Fh5>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HRRuJSHv-1663124776070)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月04日20时:01分:56秒)]\u003C\u002Fp>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-O4IbSo4i-1663124776070)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月04日20时:02分:16秒)]\u003C\u002Fp>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kpasGuoU-1663124776070)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月04日20时:02分:36秒)]\u003C\u002Fp>\u003Ch5 id=\"735将pineline镜像推送到harbor私服\">7.3.5、将pineline镜像推送到harbor私服\u003Ca class=\"heading-anchor\" href=\"#735将pineline镜像推送到harbor私服\" aria-hidden=\"true\">#\u003C\u002Fa>\u003C\u002Fh5>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FCJMKhYC-1663124776071)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月04日20时:17分:18秒)]\u003C\u002Fp>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DLgGhZ4m-1663124776071)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月04日20时:17分:43秒)]\u003C\u002Fp>\u003Ch5 id=\"736通知目标服务器拉取镜像并启动\">7.3.6、通知目标服务器拉取镜像并启动\u003Ca class=\"heading-anchor\" href=\"#736通知目标服务器拉取镜像并启动\" aria-hidden=\"true\">#\u003C\u002Fa>\u003C\u002Fh5>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WcVINlrx-1663124776071)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月04日20时:28分:49秒)]\u003C\u002Fp>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kRFHJVMv-1663124776071)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月04日20时:32分:25秒)]\u003C\u002Fp>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UiS5okP5-1663124776071)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月04日20时:34分:17秒)]\u003C\u002Fp>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KKnvGrtk-1663124776071)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月04日20时:33分:10秒)]\u003C\u002Fp>\u003Ch5 id=\"737jenkins构建部署通知钉钉\">7.3.7、jenkins构建部署通知钉钉\u003Ca class=\"heading-anchor\" href=\"#737jenkins构建部署通知钉钉\" aria-hidden=\"true\">#\u003C\u002Fa>\u003C\u002Fh5>\u003Cul>\u003Cli>\u003Cp>首先下载相关插件由于jenkins版本原因可能还需要下载dingding-notifications.jpi插件\u003C\u002Fp>\u003C\u002Fli>\u003C\u002Ful>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MdNa8edp-1663124776071)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月04日20时:37分:19秒)]\u003C\u002Fp>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wRgetxqv-1663124776072)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月04日20时:56分:29秒)]\u003C\u002Fp>\u003Ch5 id=\"738测试流水线\">7.3.8、测试流水线\u003Ca class=\"heading-anchor\" href=\"#738测试流水线\" aria-hidden=\"true\">#\u003C\u002Fa>\u003C\u002Fh5>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-T3ylTwxm-1663124776072)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月04日21时:07分:22秒)]\u003C\u002Fp>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VszqA7SQ-1663124776072)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月04日21时:09分:57秒)]\u003C\u002Fp>\u003Cblockquote>\u003Cp>该小节相关脚本\u003C\u002Fp>\u003C\u002Fblockquote>\u003Cdiv class=\"code-block\" data-lang=\"text\">\u003Cdiv class=\"code-head\">\u003Cdiv class=\"code-head-left\">\u003Cspan class=\"code-dots\">\u003C\u002Fspan>\u003Cspan class=\"code-lang\">text\u003C\u002Fspan>\u003C\u002Fdiv>\u003C\u002Fdiv>\u003Cpre class=\"shiki shiki-themes github-light github-dark\" style=\"background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan>pipeline {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>    agent any\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>    environment {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>         harborUser = 'admin'\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>         harborPasswd = 'admin'\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>         harborAddress = '10.21.90.111:8089'\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>         harborRepo = 'repo'\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>    }\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>    \u002F\u002F 存放所有任务的合集\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>    stages {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>        stage('拉取Git代码') {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>            steps {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>                checkout([$class: 'GitSCM', branches: [[name: '${tag}']], extensions: [], userRemoteConfigs: [[credentialsId: '715f601c-6bb5-41c3-9416-fc917a11d91e', url: 'http:\u002F\u002F124.70.156.177:30080\u002FChenYa\u002Fspringboothelloworld.git']]])\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>            }\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>        }\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>        stage('maven构建') {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>            steps {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>                sh '\u002Fvar\u002Fjenkins_home\u002Ftools\u002Fhudson.tasks.Maven_MavenInstallation\u002Fmaven36\u002Fbin\u002Fmvn clean package -DskipTests'\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>            }\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>        }\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>        stage('检测代码质量') {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>            steps {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>                sh '\u002Fvar\u002Fjenkins_home\u002Fsonar-scanner\u002Fbin\u002Fsonar-scanner -Dsonar.source=.\u002F  -Dsonar.projectname=${JOB_NAME} -Dsonar.projectKey=${JOB_NAME} -Dsonar.java.binaries=.\u002Ftarget -Dsonar.login=b0a66f164cd150009d28b2ab4ee6be28ced5fcb8'\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>            }\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>        }\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>        stage('基于Dockerfile制作自定义镜像并发布') {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>            steps {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>                sh '''mv .\u002Ftarget\u002F*.jar .\u002Fdocker\u002F\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>docker build -t  ${JOB_NAME}:${tag} .\u002Fdocker\u002F'''\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>            }\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>        }\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>        stage('将镜像推送到harbor') {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>            steps {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>                sh '''docker login -u ${harborUser}  -p ${harborPasswd} ${harborAddress}\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>docker tag  ${JOB_NAME}:${tag} ${harborAddress}\u002F${harborRepo}\u002F${JOB_NAME}:${tag} \u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>docker push  ${harborAddress}\u002F${harborRepo}\u002F${JOB_NAME}:${tag}'''\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>            }\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>        }\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>        stage('通过publish Over SSH通知目标服务器') {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>            steps {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>                sshPublisher(publishers: [sshPublisherDesc(configName: '10.21.90.111', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: \"deploy.sh $harborAddress  $harborRepo  $JOB_NAME  $tag  $container_port  $host_port\", execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, removePrefix: '', sourceFiles: '')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>            }\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>        }\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>    }\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>    post {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>        success {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>            dingtalk (\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>                robot: 'jenkins_DingDing',\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>                type:'MARKDOWN',\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>                title: \"success: ${JOB_NAME}\",\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>                text: [\"- 成功构建:${JOB_NAME}项目!\\n- 版本:${tag}\\n- 持续时间:${currentBuild.durationString}\\n- 任务:#${JOB_NAME}\"]\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>            )\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>        }\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>        failure {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>            dingtalk (\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>                robot: 'jenkins_DingDing',\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>                type:'MARKDOWN',\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>                title: \"fail: ${JOB_NAME}\",\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>                text: [\"- 失败构建:${JOB_NAME}项目!\\n- 版本:${tag}\\n- 持续时间:${currentBuild.durationString}\\n- 任务:#${JOB_NAME}\"]\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>            )\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>        }\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>    }\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>}\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\u003C\u002Fdiv>\u003Ch3 id=\"8搭建k8s集群平台\">8、搭建k8s集群平台\u003Ca class=\"heading-anchor\" href=\"#8搭建k8s集群平台\" aria-hidden=\"true\">#\u003C\u002Fa>\u003C\u002Fh3>\u003Cblockquote>\u003Cp>安装文档 版本为1.19\u003C\u002Fp>\u003Cp>https:\u002F\u002Fkuboard.cn\u002Finstall\u002Fhistory-k8s\u002Finstall-k8s-1.19.x.html\u003C\u002Fp>\u003C\u002Fblockquote>\u003Ch4 id=\"81k8s的介绍\">8.1、k8s的介绍\u003Ca class=\"heading-anchor\" href=\"#81k8s的介绍\" aria-hidden=\"true\">#\u003C\u002Fa>\u003C\u002Fh4>\u003Cp>Kubernetes是一个开源的，用于管理云平台中多个主机上的容器化的应用，Kubernetes的目标是让部署容器化的应用简单并且高效（powerful），Kubernetes提供了应用部署，规划，更新，维护的一种机制。\u003C\u002Fp>\u003Cp>Kubernetes一个核心的特点就是能够自主的管理容器来保证云平台中的容器按照用户的期望状态运行着，管理员可以加载一个微型服务，让规划器来找到合适的位置，同时，Kubernetes也系统提升工具以及人性化方面，让用户能够方便的部署自己的应用。\u003C\u002Fp>\u003Cp>Kubernetes主要能帮助我们完成：\u003C\u002Fp>\u003Cul>\u003Cli>\u003Cp>服务发现和负载均衡\u003C\u002Fp>\u003Cp>Kubernetes 可以使用 DNS 名称或自己的 IP 地址公开容器，如果进入容器的流量很大， Kubernetes 可以负载均衡并分配网络流量，从而使部署稳定。\u003C\u002Fp>\u003C\u002Fli>\u003Cli>\u003Cp>存储编排\u003C\u002Fp>\u003Cp>Kubernetes 允许你自动挂载你选择的存储系统，比如本地存储，类似Docker的数据卷。\u003C\u002Fp>\u003C\u002Fli>\u003Cli>\u003Cp>自动部署和回滚\u003C\u002Fp>\u003Cp>你可以使用 Kubernetes 描述已部署容器的所需状态，它可以以受控的速率将实际状态 更改为期望状态。Kubernetes 会自动帮你根据情况部署创建新容器，并删除现有容器给新容器提供资源。\u003C\u002Fp>\u003C\u002Fli>\u003Cli>\u003Cp>自动完成装箱计算\u003C\u002Fp>\u003Cp>Kubernetes 允许你设置每个容器的资源，比如CPU和内存。\u003C\u002Fp>\u003C\u002Fli>\u003Cli>\u003Cp>自我修复\u003C\u002Fp>\u003Cp>Kubernetes 重新启动失败的容器、替换容器、杀死不响应用户定义的容器，并运行状况检查的容器。\u003C\u002Fp>\u003C\u002Fli>\u003Cli>\u003Cp>秘钥与配置管理\u003C\u002Fp>\u003Cp>Kubernetes 允许你存储和管理敏感信息，例如密码、OAuth 令牌和 ssh 密钥。你可以在不重建容器镜像的情况下部署和更新密钥和应用程序配置，也无需在堆栈配置中暴露密钥。\u003C\u002Fp>\u003C\u002Fli>\u003C\u002Ful>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MgoBMsXS-1663124776072)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月04日21时:37分:42秒)]\u003C\u002Fp>\u003Ch4 id=\"82-kubernetes架构\">8.2 Kubernetes架构\u003Ca class=\"heading-anchor\" href=\"#82-kubernetes架构\" aria-hidden=\"true\">#\u003C\u002Fa>\u003C\u002Fh4>\u003Cp>Kubernetes 搭建需要至少两个节点，一个Master负责管理，一个Slave搭建在工作服务器上负责分配。\u003C\u002Fp>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uSGFwM29-1663124776072)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月04日21时:39分:04秒)]\u003C\u002Fp>\u003Cp>从图中可以看到各个组件的基本功能：\u003C\u002Fp>\u003Cul>\u003Cli>\u003Cp>API Server：作为K8s通讯的核心组件，K8s内部交互以及接收发送指令的组件。\u003C\u002Fp>\u003C\u002Fli>\u003Cli>\u003Cp>controller-manager：作为K8s的核心组件，主要做资源调度，根据集群情况分配资源\u003C\u002Fp>\u003C\u002Fli>\u003Cli>\u003Cp>etcd：一个key-value的数据库，存储存储集群的状态信息\u003C\u002Fp>\u003C\u002Fli>\u003Cli>\u003Cp>scheduler：负责调度每个工作节点\u003C\u002Fp>\u003C\u002Fli>\u003Cli>\u003Cp>cloud-controller-manager：负责调度其他云服务产品\u003C\u002Fp>\u003C\u002Fli>\u003Cli>\u003Cp>kubelet：管理Pods上面的容器。\u003C\u002Fp>\u003C\u002Fli>\u003Cli>\u003Cp>kube-proxy：负责处理其他Slave或客户端的请求。\u003C\u002Fp>\u003C\u002Fli>\u003Cli>\u003Cp>Pod：可以理解为就是运行的容器\u003C\u002Fp>\u003C\u002Fli>\u003C\u002Ful>\u003Ch4 id=\"83-kubernetes安装\">8.3、 Kubernetes安装\u003Ca class=\"heading-anchor\" href=\"#83-kubernetes安装\" aria-hidden=\"true\">#\u003C\u002Fa>\u003C\u002Fh4>\u003Cp>这里会采用https:\u002F\u002Fkuboard.cn\u002F提供的方式安装K8s，安装单Master节点\u003C\u002Fp>\u003Cul>\u003Cli>\u003Cp>要求使用Centos7.8版本：https:\u002F\u002Fvault.centos.org\u002F7.8.2003\u002Fisos\u002Fx86_64\u002FCentOS-7-x86_64-Minimal-2003.iso\u003C\u002Fp>\u003C\u002Fli>\u003Cli>\u003Cp>至少2台 \u003Cstrong>2核4G\u003C\u002Fstrong> 的服务器\u003C\u002Fp>\u003C\u002Fli>\u003C\u002Ful>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GS5gZTMV-1663124776073)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月04日21时:40分:44秒)]\u003C\u002Fp>\u003Cp>准备好服务器后开始安装\u003C\u002Fp>\u003Cul>\u003Cli>\u003Cp>重新设置hostname，不允许为localhost\u003C\u002Fp>\u003Cdiv class=\"code-block\" data-lang=\"text\">\u003Cdiv class=\"code-head\">\u003Cdiv class=\"code-head-left\">\u003Cspan class=\"code-dots\">\u003C\u002Fspan>\u003Cspan class=\"code-lang\">text\u003C\u002Fspan>\u003C\u002Fdiv>\u003C\u002Fdiv>\u003Cpre class=\"shiki shiki-themes github-light github-dark\" style=\"background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan># 修改 hostname，名字不允许使用下划线、小数点、大写字母，不能叫master\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>hostnamectl set-hostname your-new-host-name\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan># 查看修改结果\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>hostnamectl status\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan># 设置 hostname 解析\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>echo \"127.0.0.1   $(hostname)\" >> \u002Fetc\u002Fhosts\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\u003C\u002Fdiv>\u003C\u002Fli>\u003Cli>\u003Cp>要求2台服务之间可以相互通讯并且关闭防火墙\u003C\u002Fp>\u003C\u002Fli>\u003C\u002Ful>\u003Cdiv class=\"code-block\" data-lang=\"text\">\u003Cdiv class=\"code-head\">\u003Cdiv class=\"code-head-left\">\u003Cspan class=\"code-dots\">\u003C\u002Fspan>\u003Cspan class=\"code-lang\">text\u003C\u002Fspan>\u003C\u002Fdiv>\u003C\u002Fdiv>\u003Cpre class=\"shiki shiki-themes github-light github-dark\" style=\"background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan>[root@localhost ~]# systemctl stop firewalld\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>[root@localhost ~]# systemctl disable firewalld\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\u003C\u002Fdiv>\u003Cul>\u003Cli>\u003Cp>安装软件\u003C\u002Fp>\u003Cdiv class=\"code-block\" data-lang=\"text\">\u003Cdiv class=\"code-head\">\u003Cdiv class=\"code-head-left\">\u003Cspan class=\"code-dots\">\u003C\u002Fspan>\u003Cspan class=\"code-lang\">text\u003C\u002Fspan>\u003C\u002Fdiv>\u003C\u002Fdiv>\u003Cpre class=\"shiki shiki-themes github-light github-dark\" style=\"background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan># 阿里云 docker hub 镜像\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>export REGISTRY_MIRROR=https:\u002F\u002Fregistry.cn-hangzhou.aliyuncs.com\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>curl -sSL https:\u002F\u002Fkuboard.cn\u002Finstall-script\u002Fv1.19.x\u002Finstall_kubelet.sh | sh -s 1.19.5\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\u003C\u002Fdiv>\u003C\u002Fli>\u003C\u002Ful>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EQH1wqvi-1663124776073)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月04日22时:07分:05秒)]\u003C\u002Fp>\u003Cp>首先初始化Master节点\u003C\u002Fp>\u003Cblockquote>\u003Cp>关于初始化时用到的环境变量\u003C\u002Fp>\u003Cul>\u003Cli>\u003Cp>\u003Cstrong>APISERVER_NAME\u003C\u002Fstrong> 不能是 master 的 hostname\u003C\u002Fp>\u003C\u002Fli>\u003Cli>\u003Cp>\u003Cstrong>APISERVER_NAME\u003C\u002Fstrong> 必须全为小写字母、数字、小数点，不能包含减号\u003C\u002Fp>\u003C\u002Fli>\u003Cli>\u003Cp>\u003Cstrong>POD_SUBNET\u003C\u002Fstrong> 所使用的网段不能与 \u003Cem>\u003Cstrong>master节点\u002Fworker节点\u003C\u002Fstrong>\u003C\u002Fem> 所在的网段重叠。该字段的取值为一个 \u003Ca target=\"_blank\" rel=\"nofollow\" href=\"https:\u002F\u002Fkuboard.cn\u002Fglossary\u002Fcidr.html\">CIDR\u003C\u002Fa> 值，如果您对 CIDR 这个概念还不熟悉，请仍然执行 export POD_SUBNET=10.100.0.0\u002F16 命令，不做修改\u003C\u002Fp>\u003C\u002Fli>\u003C\u002Ful>\u003C\u002Fblockquote>\u003Cul>\u003Cli>\u003Cp>设置ip，域名，网段并执行初始化操作\u003C\u002Fp>\u003C\u002Fli>\u003C\u002Ful>\u003Cdiv class=\"code-block\" data-lang=\"text\">\u003Cdiv class=\"code-head\">\u003Cdiv class=\"code-head-left\">\u003Cspan class=\"code-dots\">\u003C\u002Fspan>\u003Cspan class=\"code-lang\">text\u003C\u002Fspan>\u003C\u002Fdiv>\u003C\u002Fdiv>\u003Cpre class=\"shiki shiki-themes github-light github-dark\" style=\"background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan># 只在 master 节点执行\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan># 替换 x.x.x.x 为 master 节点实际 IP（请使用内网 IP）\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan># export 命令只在当前 shell 会话中有效，开启新的 shell 窗口后，如果要继续安装过程，请重新执行此处的 export 命令\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>export MASTER_IP=10.21.90.113\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan># 替换 apiserver.demo 为 您想要的 dnsName\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>export APISERVER_NAME=apiserver.demo\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan># Kubernetes 容器组所在的网段，该网段安装完成后，由 kubernetes 创建，事先并不存在于您的物理网络中\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>export POD_SUBNET=10.100.0.1\u002F16\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>echo \"${MASTER_IP}    ${APISERVER_NAME}\" >> \u002Fetc\u002Fhosts\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>curl -sSL https:\u002F\u002Fkuboard.cn\u002Finstall-script\u002Fv1.19.x\u002Finit_master.sh | sh -s 1.19.5\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\u003C\u002Fdiv>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DjulTNp5-1663124776073)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月04日22时:08分:58秒)]\u003C\u002Fp>\u003Cul>\u003Cli>\u003Cp>检查master状态\u003C\u002Fp>\u003C\u002Fli>\u003C\u002Ful>\u003Cdiv class=\"code-block\" data-lang=\"text\">\u003Cdiv class=\"code-head\">\u003Cdiv class=\"code-head-left\">\u003Cspan class=\"code-dots\">\u003C\u002Fspan>\u003Cspan class=\"code-lang\">text\u003C\u002Fspan>\u003C\u002Fdiv>\u003C\u002Fdiv>\u003Cpre class=\"shiki shiki-themes github-light github-dark\" style=\"background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan># 只在 master 节点执行\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan># 执行如下命令，等待 3-10 分钟，直到所有的容器组处于 Running 状态\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>watch kubectl get pod -n kube-system -o wide\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan># 查看 master 节点初h\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>kubectl get nodes -o wide\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\u003C\u002Fdiv>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0MqFg9Pu-1663124776073)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月04日22时:11分:23秒)]\u003C\u002Fp>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-K6byUWa9-1663124776073)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月04日22时:12分:01秒)]\u003C\u002Fp>\u003Cblockquote>\u003Cp>\u003Ccode>Ps：如果出现NotReady的情况执行（最新版本的BUG，1.19一般没有）\u003C\u002Fcode>\u003C\u002Fp>\u003C\u002Fblockquote>\u003Cdiv class=\"code-block\" data-lang=\"text\">\u003Cdiv class=\"code-head\">\u003Cdiv class=\"code-head-left\">\u003Cspan class=\"code-dots\">\u003C\u002Fspan>\u003Cspan class=\"code-lang\">text\u003C\u002Fspan>\u003C\u002Fdiv>\u003C\u002Fdiv>\u003Cpre class=\"shiki shiki-themes github-light github-dark\" style=\"background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan>docker pull quay.io\u002Fcoreos\u002Fflannel:v0.10.0-amd64 \u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>mkdir -p \u002Fetc\u002Fcni\u002Fnet.d\u002F\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>cat &#x3C;&#x3C;EOF> \u002Fetc\u002Fcni\u002Fnet.d\u002F10-flannel.conf\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>{\"name\":\"cbr0\",\"type\":\"flannel\",\"delegate\": {\"isDefaultGateway\": true}}\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>EOF\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>mkdir \u002Fusr\u002Fshare\u002Foci-umount\u002Foci-umount.d -p\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>mkdir \u002Frun\u002Fflannel\u002F\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>cat &#x3C;&#x3C;EOF> \u002Frun\u002Fflannel\u002Fsubnet.env\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>FLANNEL_NETWORK=172.100.0.0\u002F16\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>FLANNEL_SUBNET=172.100.1.0\u002F24\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>FLANNEL_MTU=1450\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>FLANNEL_IPMASQ=true\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>EOF\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>kubectl apply -f https:\u002F\u002Fraw.githubusercontent.com\u002Fcoreos\u002Fflannel\u002Fv0.9.1\u002FDocumentation\u002Fkube-flannel.yml\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\u003C\u002Fdiv>\u003Cp>安装网络服务插件\u003C\u002Fp>\u003Cdiv class=\"code-block\" data-lang=\"text\">\u003Cdiv class=\"code-head\">\u003Cdiv class=\"code-head-left\">\u003Cspan class=\"code-dots\">\u003C\u002Fspan>\u003Cspan class=\"code-lang\">text\u003C\u002Fspan>\u003C\u002Fdiv>\u003C\u002Fdiv>\u003Cpre class=\"shiki shiki-themes github-light github-dark\" style=\"background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan>export POD_SUBNET=10.100.0.0\u002F16\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>kubectl apply -f https:\u002F\u002Fkuboard.cn\u002Finstall-script\u002Fv1.22.x\u002Fcalico-operator.yaml\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>wget https:\u002F\u002Fkuboard.cn\u002Finstall-script\u002Fv1.22.x\u002Fcalico-custom-resources.yaml\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>sed -i \"s#192.168.0.0\u002F16#${POD_SUBNET}#\" calico-custom-resources.yaml\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>kubectl apply -f calico-custom-resources.yaml\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\u003C\u002Fdiv>\u003Cp>初始化worker节点\u003C\u002Fp>\u003Cul>\u003Cli>\u003Cp>获取Join命令参数，在Master节点执行\u003C\u002Fp>\u003C\u002Fli>\u003C\u002Ful>\u003Cdiv class=\"code-block\" data-lang=\"text\">\u003Cdiv class=\"code-head\">\u003Cdiv class=\"code-head-left\">\u003Cspan class=\"code-dots\">\u003C\u002Fspan>\u003Cspan class=\"code-lang\">text\u003C\u002Fspan>\u003C\u002Fdiv>\u003C\u002Fdiv>\u003Cpre class=\"shiki shiki-themes github-light github-dark\" style=\"background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan># 只在 master 节点执行\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>kubeadm token create --print-join-command\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\u003C\u002Fdiv>\u003Cul>\u003Cli>\u003Cp>在worker节点初始化\u003C\u002Fp>\u003C\u002Fli>\u003C\u002Ful>\u003Cdiv class=\"code-block\" data-lang=\"text\">\u003Cdiv class=\"code-head\">\u003Cdiv class=\"code-head-left\">\u003Cspan class=\"code-dots\">\u003C\u002Fspan>\u003Cspan class=\"code-lang\">text\u003C\u002Fspan>\u003C\u002Fdiv>\u003C\u002Fdiv>\u003Cpre class=\"shiki shiki-themes github-light github-dark\" style=\"background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan># 只在 worker 节点执行\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan># 替换 x.x.x.x 为 master 节点的内网 IP\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>export MASTER_IP=10.21.90.113\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan># 替换 apiserver.demo 为初始化 master 节点时所使用的 APISERVER_NAME\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>export APISERVER_NAME=apiserver.demo\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>echo \"${MASTER_IP}    ${APISERVER_NAME}\" >> \u002Fetc\u002Fhosts\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan># 替换为 master 节点上 kubeadm token create 命令的输出\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>kubeadm join apiserver.demo:6443 --token 8ydoon.82k0u0i59tfmfxz7     --discovery-token-ca-cert-hash sha256:74843341f86e51a94b12b7502d45019f56a989f0dbd059e2ac7ecd9fbfe18d53\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\u003C\u002Fdiv>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VTUJWq9X-1663124776073)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月04日22时:16分:02秒)]\u003C\u002Fp>\u003Cul>\u003Cli>\u003Cp>检查最终运行效果\u003C\u002Fp>\u003C\u002Fli>\u003C\u002Ful>\u003Cdiv class=\"code-block\" data-lang=\"text\">\u003Cdiv class=\"code-head\">\u003Cdiv class=\"code-head-left\">\u003Cspan class=\"code-dots\">\u003C\u002Fspan>\u003Cspan class=\"code-lang\">text\u003C\u002Fspan>\u003C\u002Fdiv>\u003C\u002Fdiv>\u003Cpre class=\"shiki shiki-themes github-light github-dark\" style=\"background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan># 只在 master 节点执行\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>kubectl get nodes -o wide\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\u003C\u002Fdiv>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-w5TmygTj-1663124776073)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月04日22时:16分:51秒)]\u003C\u002Fp>\u003Cblockquote>\u003Cp>Ps：如果出现NotReady的情况执行（最新版本的BUG，1.19一般没有）\u003C\u002Fp>\u003C\u002Fblockquote>\u003Cdiv class=\"code-block\" data-lang=\"text\">\u003Cdiv class=\"code-head\">\u003Cdiv class=\"code-head-left\">\u003Cspan class=\"code-dots\">\u003C\u002Fspan>\u003Cspan class=\"code-lang\">text\u003C\u002Fspan>\u003C\u002Fdiv>\u003C\u002Fdiv>\u003Cpre class=\"shiki shiki-themes github-light github-dark\" style=\"background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan>docker pull quay.io\u002Fcoreos\u002Fflannel:v0.10.0-amd64 \u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>mkdir -p \u002Fetc\u002Fcni\u002Fnet.d\u002F\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>cat &#x3C;&#x3C;EOF> \u002Fetc\u002Fcni\u002Fnet.d\u002F10-flannel.conf\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>{\"name\":\"cbr0\",\"type\":\"flannel\",\"delegate\": {\"isDefaultGateway\": true}}\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>EOF\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>mkdir \u002Fusr\u002Fshare\u002Foci-umount\u002Foci-umount.d -p\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>mkdir \u002Frun\u002Fflannel\u002F\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>cat &#x3C;&#x3C;EOF> \u002Frun\u002Fflannel\u002Fsubnet.env\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>FLANNEL_NETWORK=172.100.0.0\u002F16\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>FLANNEL_SUBNET=172.100.1.0\u002F24\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>FLANNEL_MTU=1450\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>FLANNEL_IPMASQ=true\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>EOF\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>kubectl apply -f https:\u002F\u002Fraw.githubusercontent.com\u002Fcoreos\u002Fflannel\u002Fv0.9.1\u002FDocumentation\u002Fkube-flannel.yml\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\u003C\u002Fdiv>\u003Cul>\u003Cli>\u003Cp>输出结果如下所示：\u003C\u002Fp>\u003C\u002Fli>\u003C\u002Ful>\u003Cdiv class=\"code-block\" data-lang=\"text\">\u003Cdiv class=\"code-head\">\u003Cdiv class=\"code-head-left\">\u003Cspan class=\"code-dots\">\u003C\u002Fspan>\u003Cspan class=\"code-lang\">text\u003C\u002Fspan>\u003C\u002Fdiv>\u003C\u002Fdiv>\u003Cpre class=\"shiki shiki-themes github-light github-dark\" style=\"background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan>[root@k8smaster ~]# kubectl get nodes\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\u003C\u002Fdiv>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SbJhK3oE-1663124776074)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月04日22时:18分:47秒)]\u003C\u002Fp>\u003Cp>安装Kuboard管理K8s集群\u003C\u002Fp>\u003Cul>\u003Cli>\u003Cp>安装Kuboard\u003C\u002Fp>\u003C\u002Fli>\u003C\u002Ful>\u003Cdiv class=\"code-block\" data-lang=\"text\">\u003Cdiv class=\"code-head\">\u003Cdiv class=\"code-head-left\">\u003Cspan class=\"code-dots\">\u003C\u002Fspan>\u003Cspan class=\"code-lang\">text\u003C\u002Fspan>\u003C\u002Fdiv>\u003C\u002Fdiv>\u003Cpre class=\"shiki shiki-themes github-light github-dark\" style=\"background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan>kubectl apply -f https:\u002F\u002Faddons.kuboard.cn\u002Fkuboard\u002Fkuboard-v3.yaml\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan># 您也可以使用下面的指令，唯一的区别是，该指令使用华为云的镜像仓库替代 docker hub 分发 Kuboard 所需要的镜像\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan># kubectl apply -f https:\u002F\u002Faddons.kuboard.cn\u002Fkuboard\u002Fkuboard-v3-swr.yaml\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\u003C\u002Fdiv>\u003Cul>\u003Cli>\u003Cp>查看启动情况\u003C\u002Fp>\u003C\u002Fli>\u003C\u002Ful>\u003Cdiv class=\"code-block\" data-lang=\"text\">\u003Cdiv class=\"code-head\">\u003Cdiv class=\"code-head-left\">\u003Cspan class=\"code-dots\">\u003C\u002Fspan>\u003Cspan class=\"code-lang\">text\u003C\u002Fspan>\u003C\u002Fdiv>\u003C\u002Fdiv>\u003Cpre class=\"shiki shiki-themes github-light github-dark\" style=\"background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan>watch kubectl get pods -n kuboard\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\u003C\u002Fdiv>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9iSoGfWo-1663124776074)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月04日22时:25分:08秒)]\u003C\u002Fp>\u003Cul>\u003Cli>\u003Cp>在浏览器中打开链接 http:\u002F\u002F10.21.90.113:30080\u003C\u002Fp>\u003C\u002Fli>\u003C\u002Ful>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kd1FEsWc-1663124776074)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月04日22时:29分:14秒)]\u003C\u002Fp>\u003Ch4 id=\"84-kubernetes操作\">8.4 Kubernetes操作\u003Ca class=\"heading-anchor\" href=\"#84-kubernetes操作\" aria-hidden=\"true\">#\u003C\u002Fa>\u003C\u002Fh4>\u003Cp>首先我们要了解Kubernetes在运行我们的资源时，关联到了哪些内容\u003C\u002Fp>\u003Cul>\u003Cli>\u003Cp>资源的构建方式：\u003C\u002Fp>\u003Cul>\u003Cli>\u003Cp>采用kubectl的命令方式\u003C\u002Fp>\u003C\u002Fli>\u003Cli>\u003Cp>yaml文件方式\u003C\u002Fp>\u003C\u002Fli>\u003C\u002Ful>\u003C\u002Fli>\u003C\u002Ful>\u003Ch6 id=\"841-namespace\">8.4.1 Namespace\u003Ca class=\"heading-anchor\" href=\"#841-namespace\" aria-hidden=\"true\">#\u003C\u002Fa>\u003C\u002Fh6>\u003Cul>\u003Cli>\u003Cp>命名空间：主要是为了对Kubernetes中运行的资源进行过隔离， 但是网络是互通的，类似Docker的容器，可以将多个资源配置到一个NameSpace中。而NameSpace可以对不同环境进行资源隔离，默认情况下Kubernetes提供了default命名空间，在构建资源时，如果不指定资源，默认采用default资源。\u003Cbr\u002F>命令方式：\u003C\u002Fp>\u003Cdiv class=\"code-block\" data-lang=\"text\">\u003Cdiv class=\"code-head\">\u003Cdiv class=\"code-head-left\">\u003Cspan class=\"code-dots\">\u003C\u002Fspan>\u003Cspan class=\"code-lang\">text\u003C\u002Fspan>\u003C\u002Fdiv>\u003C\u002Fdiv>\u003Cpre class=\"shiki shiki-themes github-light github-dark\" style=\"background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan># 查看现有的全部命名空间\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>kubectl get ns\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan># 构建命名空间\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>kubectl create ns 命名空间名称\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan># 删除现有命名空间， 并且会删除空间下的全部资源\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>kubectl delete ns 命名空间名称\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\u003C\u002Fdiv>\u003Cp>yaml文件方式：（构建资源时，设置命名空间）\u003C\u002Fp>\u003Cdiv class=\"code-block\" data-lang=\"text\">\u003Cdiv class=\"code-head\">\u003Cdiv class=\"code-head-left\">\u003Cspan class=\"code-dots\">\u003C\u002Fspan>\u003Cspan class=\"code-lang\">text\u003C\u002Fspan>\u003C\u002Fdiv>\u003C\u002Fdiv>\u003Cpre class=\"shiki shiki-themes github-light github-dark\" style=\"background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan>apiVersion: v1\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>kind: Namespace\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>metadata:\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>  name: test\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\u003C\u002Fdiv>\u003C\u002Fli>\u003C\u002Ful>\u003Ch6 id=\"842-pod\">8.4.2 Pod\u003Ca class=\"heading-anchor\" href=\"#842-pod\" aria-hidden=\"true\">#\u003C\u002Fa>\u003C\u002Fh6>\u003Cul>\u003Cli>\u003Cp>Pod：Kubernetes运行的一组容器，Pod是Kubernetes的最小单位，但是对于Docker而然，Pod中会运行多个Docker容器\u003C\u002Fp>\u003Cul>\u003Cli>\u003Cp>命令方式：\u003C\u002Fp>\u003Cdiv class=\"code-block\" data-lang=\"text\">\u003Cdiv class=\"code-head\">\u003Cdiv class=\"code-head-left\">\u003Cspan class=\"code-dots\">\u003C\u002Fspan>\u003Cspan class=\"code-lang\">text\u003C\u002Fspan>\u003C\u002Fdiv>\u003C\u002Fdiv>\u003Cpre class=\"shiki shiki-themes github-light github-dark\" style=\"background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan># 查看所有运行的pod\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>kubectl get pods -A\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan># 查看指定Namespace下的Pod\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>kubectl get pod [-n 命名空间]  #（默认default）\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan># 创建Pod\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>kubectl run pod名称 --image=镜像名称\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan># 查看Pod详细信息\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>kubectl describe pod pod名称\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan># 删除pod\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>kubectl delete pod pod名称 [-n 命名空间]  #（默认default）\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan># 查看pod输出的日志\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>kubectl logs -f pod名称\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan># 进去pod容器内部\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>kubectl exec -it pod名称 -- bash\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan># 查看kubernetes给Pod分配的ip信息，并且通过ip和容器的端口，可以直接访问\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>kubectl get pod -owide\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\u003C\u002Fdiv>\u003C\u002Fli>\u003Cli>\u003Cp>yaml方式（推荐）\u003C\u002Fp>\u003Cdiv class=\"code-block\" data-lang=\"text\">\u003Cdiv class=\"code-head\">\u003Cdiv class=\"code-head-left\">\u003Cspan class=\"code-dots\">\u003C\u002Fspan>\u003Cspan class=\"code-lang\">text\u003C\u002Fspan>\u003C\u002Fdiv>\u003C\u002Fdiv>\u003Cpre class=\"shiki shiki-themes github-light github-dark\" style=\"background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan>apiVersion: v1\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>kind: Pod\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>metadata:\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>  labels:\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>    run: 运行的pod名称\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>  name: pod名称\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>  namespace: 命名空间\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>spec:\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>  containers:\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>  - image: 镜像名称\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>    name: 容器名称\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan># 启动Pod：kubectl apply -f yaml文件名称\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan># 删除Pod：kubectl delete -f yaml文件名称\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\u003C\u002Fdiv>\u003C\u002Fli>\u003Cli>\u003Cp>Pod中运行多个容器\u003C\u002Fp>\u003Cdiv class=\"code-block\" data-lang=\"text\">\u003Cdiv class=\"code-head\">\u003Cdiv class=\"code-head-left\">\u003Cspan class=\"code-dots\">\u003C\u002Fspan>\u003Cspan class=\"code-lang\">text\u003C\u002Fspan>\u003C\u002Fdiv>\u003C\u002Fdiv>\u003Cpre class=\"shiki shiki-themes github-light github-dark\" style=\"background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan>apiVersion: v1\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>kind: Pod\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>metadata:\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>  labels:\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>    run: 运行的pod名称\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>  name: pod名称\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>  namespace: 命名空间\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>spec:\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>  containers:\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>  - image: 镜像名称\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>    name: 容器名称\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>  - image: 镜像名称\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>    name: 容器名称\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>…………    \u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\u003C\u002Fdiv>\u003Cp>启动后可以查看到\u003C\u002Fp>\u003C\u002Fli>\u003C\u002Ful>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AldJarUb-1663124776074)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月04日22时:54分:02秒)]\u003C\u002Fp>\u003C\u002Fli>\u003C\u002Ful>\u003Ch6 id=\"843-deployment\">8.4.3 Deployment\u003Ca class=\"heading-anchor\" href=\"#843-deployment\" aria-hidden=\"true\">#\u003C\u002Fa>\u003C\u002Fh6>\u003Cp>部署时，可以通过Deployment管理和编排Pod\u003C\u002Fp>\u003Cp>Deployment部署实现\u003C\u002Fp>\u003Cul>\u003Cli>\u003Cp>命令方式\u003C\u002Fp>\u003Cdiv class=\"code-block\" data-lang=\"text\">\u003Cdiv class=\"code-head\">\u003Cdiv class=\"code-head-left\">\u003Cspan class=\"code-dots\">\u003C\u002Fspan>\u003Cspan class=\"code-lang\">text\u003C\u002Fspan>\u003C\u002Fdiv>\u003C\u002Fdiv>\u003Cpre class=\"shiki shiki-themes github-light github-dark\" style=\"background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan># 基于Deployment启动容器\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>kubectl create deployment deployment名称 --image=镜像名称\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan># 用deployment启动的容器会在被删除后自动再次创建，达到故障漂移的效果\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan># 需要使用deploy的方式删除deploy\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan># 查看现在的deployment\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>kubectl get deployment\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan># 删除deployment\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>kubectl delete deployment deployment名称\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan># 基于Deployment启动容器并设置Pod集群数\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>kubectl create deployment deployment名称 --image=镜像名称 --replicas 集群个数\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\u003C\u002Fdiv>\u003C\u002Fli>\u003Cli>\u003Cp>\u003Ca target=\"_blank\" rel=\"nofollow\" href=\"https:\u002F\u002Fkubernetes.io\u002Fzh\u002Fdocs\u002Fconcepts\u002Fworkloads\u002Fcontrollers\u002Fdeployment\u002F\">配置文件方式\u003C\u002Fa>\u003C\u002Fp>\u003Cdiv class=\"code-block\" data-lang=\"text\">\u003Cdiv class=\"code-head\">\u003Cdiv class=\"code-head-left\">\u003Cspan class=\"code-dots\">\u003C\u002Fspan>\u003Cspan class=\"code-lang\">text\u003C\u002Fspan>\u003C\u002Fdiv>\u003C\u002Fdiv>\u003Cpre class=\"shiki shiki-themes github-light github-dark\" style=\"background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan>apiVersion: apps\u002Fv1\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>kind: Deployment\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>metadata:\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>  name: nginx-deployment\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>  labels:\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>    app: nginx\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>spec:\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>  replicas: 3\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>  selector:\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>    matchLabels:\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>      app: nginx\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>  template:\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>    metadata:\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>      labels:\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>        app: nginx\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>    spec:\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>      containers:\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>      - name: nginx\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>       image: nginx\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>       ports:\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>       - containerPort: 80\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\u003C\u002Fdiv>\u003Cp>正常使用kubectl运行yaml即可\u003C\u002Fp>\u003C\u002Fli>\u003C\u002Ful>\u003Cp>弹性伸缩功能\u003C\u002Fp>\u003Cdiv class=\"code-block\" data-lang=\"text\">\u003Cdiv class=\"code-head\">\u003Cdiv class=\"code-head-left\">\u003Cspan class=\"code-dots\">\u003C\u002Fspan>\u003Cspan class=\"code-lang\">text\u003C\u002Fspan>\u003C\u002Fdiv>\u003C\u002Fdiv>\u003Cpre class=\"shiki shiki-themes github-light github-dark\" style=\"background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan># 基于scale实现弹性伸缩\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>kubectl scale deploy\u002FDeployment名称 --replicas 集群个数\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan># 或者修改yaml文件\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>kubectl edit deploy Deployment名称\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\u003C\u002Fdiv>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3NHTPKeh-1663124776074)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月04日22时:57分:23秒)]\u003C\u002Fp>\u003Cp>灰度发布\u003C\u002Fp>\u003Cp>Deploy可以在部署新版本数\u003C\u002Fp>\u003Cp>据时，成功启动一个pod，才会下线一个老版本的Pod\u003C\u002Fp>\u003Cdiv class=\"code-block\" data-lang=\"text\">\u003Cdiv class=\"code-head\">\u003Cdiv class=\"code-head-left\">\u003Cspan class=\"code-dots\">\u003C\u002Fspan>\u003Cspan class=\"code-lang\">text\u003C\u002Fspan>\u003C\u002Fdiv>\u003C\u002Fdiv>\u003Cpre class=\"shiki shiki-themes github-light github-dark\" style=\"background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan>kubectl set image deployment\u002FDeployment名称 容器名=镜像:版本\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\u003C\u002Fdiv>\u003Ch6 id=\"844-service\">8.4.4 Service\u003Ca class=\"heading-anchor\" href=\"#844-service\" aria-hidden=\"true\">#\u003C\u002Fa>\u003C\u002Fh6>\u003Cp>可以将多个Pod对外暴露一个Service，让客户端可以通过Service访问到这一组Pod，并且可以实现负载均衡\u003C\u002Fp>\u003Cp>ClusterIP方式：\u003C\u002Fp>\u003Cp>ClusterIP是集群内部Pod之间的访问方式\u003C\u002Fp>\u003Cul>\u003Cli>\u003Cp>命令实现效果\u003C\u002Fp>\u003Cdiv class=\"code-block\" data-lang=\"text\">\u003Cdiv class=\"code-head\">\u003Cdiv class=\"code-head-left\">\u003Cspan class=\"code-dots\">\u003C\u002Fspan>\u003Cspan class=\"code-lang\">text\u003C\u002Fspan>\u003C\u002Fdiv>\u003C\u002Fdiv>\u003Cpre class=\"shiki shiki-themes github-light github-dark\" style=\"background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan># 通过生成service映射一个Deployment下的所有pod中的某一个端口的容器\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>kubectl expose deployment Deployment名称 --port=Service端口号 --target-port=Pod内容器端口\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>kubectl expose  nginx-deployment --port=8888 --target-port=80 -n test\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\u003C\u002Fdiv>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fPtw2aRn-1663124776074)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月05日11时:41分:10秒)]\u003C\u002Fp>\u003Cp>之后通过\u003Ccode>kubectl get service\u003C\u002Fcode>查看Service提供的ip，即可访问\u003C\u002Fp>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lEPL5sNR-1663124776074)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月05日11时:41分:58秒)]\u003C\u002Fp>\u003Cp>也可以通过\u003Ccode>Deployment名称.namespace名称.svc\u003C\u002Fcode>作为域名访问\u003C\u002Fp>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qPQcjel6-1663124776075)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月04日22时:58分:25秒)]\u003C\u002Fp>\u003C\u002Fli>\u003C\u002Ful>\u003Cp>NodePort方式\u003C\u002Fp>\u003Cp>ClusterIP的方式只能在Pod内部实现访问，但是一般需要对外暴露网关，所以需要NodePort的方式Pod外暴露访问\u003C\u002Fp>\u003Cul>\u003Cli>\u003Cp>命令实现方式\u003C\u002Fp>\u003Cdiv class=\"code-block\" data-lang=\"text\">\u003Cdiv class=\"code-head\">\u003Cdiv class=\"code-head-left\">\u003Cspan class=\"code-dots\">\u003C\u002Fspan>\u003Cspan class=\"code-lang\">text\u003C\u002Fspan>\u003C\u002Fdiv>\u003C\u002Fdiv>\u003Cpre class=\"shiki shiki-themes github-light github-dark\" style=\"background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan># 通过生成service映射一个Deployment下的所有pod中的某一个端口的容器\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>kubectl expose deployment Deployment名称 --port=Service端口号 --target-port=Pod内容器端口 --type=NodePort\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\u003C\u002Fdiv>\u003C\u002Fli>\u003C\u002Ful>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-m37iKKxw-1663124776075)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月04日22时:59分:00秒)]\u003C\u002Fp>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JA0zzbeh-1663124776075)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月04日22时:59分:35秒)]\u003C\u002Fp>\u003Cp>Service也可以通过yaml文件实现\u003C\u002Fp>\u003Cdiv class=\"code-block\" data-lang=\"text\">\u003Cdiv class=\"code-head\">\u003Cdiv class=\"code-head-left\">\u003Cspan class=\"code-dots\">\u003C\u002Fspan>\u003Cspan class=\"code-lang\">text\u003C\u002Fspan>\u003C\u002Fdiv>\u003C\u002Fdiv>\u003Cpre class=\"shiki shiki-themes github-light github-dark\" style=\"background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan>apiVersion: v1\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>kind: Service\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>metadata:\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>  labels\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>    app: nginx\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>  name: nginx\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>  spec:\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>    selector:\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>      app: nginx\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>    ports:\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>    - port: 8888\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>     protocol: TCP\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>     targetPort: 80\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\u003C\u002Fdiv>\u003Cp>通过apply启动就也可以创建Service\u003C\u002Fp>\u003Cp>测试效果-Deployment部署，通过Service暴露\u003C\u002Fp>\u003Cdiv class=\"code-block\" data-lang=\"text\">\u003Cdiv class=\"code-head\">\u003Cdiv class=\"code-head-left\">\u003Cspan class=\"code-dots\">\u003C\u002Fspan>\u003Cspan class=\"code-lang\">text\u003C\u002Fspan>\u003C\u002Fdiv>\u003C\u002Fdiv>\u003Cpre class=\"shiki shiki-themes github-light github-dark\" style=\"background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan>apiVersion: apps\u002Fv1\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>kind: Deployment\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>metadata:\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>  name: nginx-deployment\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>  labels:\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>    app: nginx-deployment\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>spec:\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>  replicas: 2\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>  selector:\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>    matchLabels:\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>      app: nginx-deployment\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>  template:\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>    metadata:\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>      labels:\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>        app: nginx-deployment\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>    spec:\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>      containers:\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>      - name: nginx-deployment\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>        image: nginx\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>        ports:\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>        - containerPort: 80\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>---\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>apiVersion: v1\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>kind: Service\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>metadata:\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>  labels:\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>    app: nginx-service\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>  name: nginx-service\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>spec:\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>  selector:\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>    app: nginx-deployment\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>  ports:\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>  - port: 8888\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>    protocol: TCP\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>    targetPort: 80\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>  type: NodePort\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\u003C\u002Fdiv>\u003Cp>可以查看到暴露的信息\u003C\u002Fp>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cwB9RHey-1663124776075)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月04日22时:59分:50秒)]\u003C\u002Fp>\u003Ch6 id=\"845-ingress\">8.4.5 Ingress\u003Ca class=\"heading-anchor\" href=\"#845-ingress\" aria-hidden=\"true\">#\u003C\u002Fa>\u003C\u002Fh6>\u003Cp>Kubernetes推荐将Ingress作为所有Service的入口，提供统一的入口，避免多个服务之间需要记录大量的IP或者域名，毕竟IP可能改变，服务太多域名记录不方便。\u003C\u002Fp>\u003Cp>Ingress底层其实就是一个Nginx， 可以在Kuboard上直接点击安装\u003C\u002Fp>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Q9BHWabN-1663124776075)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月04日23时:00分:16秒)]\u003C\u002Fp>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-US5KJYik-1663124776075)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月04日23时:01分:04秒)]\u003C\u002Fp>\u003Cp>因为副本数默认为1，但是k8s整体集群就2个节点，所以显示下面即为安装成功\u003C\u002Fp>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-V0T1LwpW-1663124776075)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月04日23时:01分:18秒)]\u003C\u002Fp>\u003Cp>可以将Ingress接收到的请求转发到不同的Service中。\u003C\u002Fp>\u003Cp>推荐使用yaml文件方式\u003C\u002Fp>\u003Cdiv class=\"code-block\" data-lang=\"text\">\u003Cdiv class=\"code-head\">\u003Cdiv class=\"code-head-left\">\u003Cspan class=\"code-dots\">\u003C\u002Fspan>\u003Cspan class=\"code-lang\">text\u003C\u002Fspan>\u003C\u002Fdiv>\u003C\u002Fdiv>\u003Cpre class=\"shiki shiki-themes github-light github-dark\" style=\"background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan>apiVersion: networking.k8s.io\u002Fv1\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>kind: Ingress\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>metadata:\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>  name: nginx-ingress\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>spec:\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>  ingressClassName: ingress\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>  rules:\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>  - host: nginx.mashibing.com\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>    http:\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>      paths:\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>      - path: \u002F\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>        pathType: Prefix\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>        backend:\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>          service:\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>            name: nginx-service\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>            port:\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>              number: 8888\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\u003C\u002Fdiv>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jQ9Qk5Zx-1663124776076)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月04日23时:01分:44秒)]\u003C\u002Fp>\u003Cp>Kuboard安装的Ingress有admission的校验配置，需要先删除配置再启动\u003C\u002Fp>\u003Cp>找到指定的ingress的校验信息，删除即可\u003C\u002Fp>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-X5nztV0J-1663124776076)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月04日23时:02分:06秒)]\u003C\u002Fp>\u003Cdiv class=\"code-block\" data-lang=\"text\">\u003Cdiv class=\"code-head\">\u003Cdiv class=\"code-head-left\">\u003Cspan class=\"code-dots\">\u003C\u002Fspan>\u003Cspan class=\"code-lang\">text\u003C\u002Fspan>\u003C\u002Fdiv>\u003C\u002Fdiv>\u003Cpre class=\"shiki shiki-themes github-light github-dark\" style=\"background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan># 查看校验webhook的配置\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>kubectl get -A ValidatingWebhookConfiguration\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan># 删除指定的校验\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>kubectl delete ValidatingWebhookConfiguration ingress-nginx-admission-my-ingress-controller\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\u003C\u002Fdiv>\u003Cp>配置本地hosts文件\u003C\u002Fp>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7yJttVED-1663124776076)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月04日23时:02分:38秒)]\u003C\u002Fp>\u003Cp>记下来既可以访问在Service中暴露的Nginx信息\u003C\u002Fp>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-u1aEqP5J-1663124776076)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月04日23时:03分:15秒)]\u003C\u002Fp>\u003Ch4 id=\"85-jenkins集成kubernetes\">8.5 Jenkins集成Kubernetes\u003Ca class=\"heading-anchor\" href=\"#85-jenkins集成kubernetes\" aria-hidden=\"true\">#\u003C\u002Fa>\u003C\u002Fh4>\u003Ch6 id=\"851-准备部署的yml文件\">8.5.1 准备部署的yml文件\u003Ca class=\"heading-anchor\" href=\"#851-准备部署的yml文件\" aria-hidden=\"true\">#\u003C\u002Fa>\u003C\u002Fh6>\u003Cdiv class=\"code-block\" data-lang=\"text\">\u003Cdiv class=\"code-head\">\u003Cdiv class=\"code-head-left\">\u003Cspan class=\"code-dots\">\u003C\u002Fspan>\u003Cspan class=\"code-lang\">text\u003C\u002Fspan>\u003C\u002Fdiv>\u003C\u002Fdiv>\u003Cpre class=\"shiki shiki-themes github-light github-dark\" style=\"background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan>apiVersion: apps\u002Fv1\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>kind: Deployment\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>metadata:\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>  namespace: test\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>  name: pipeline\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>  labels:\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>    app: pipeline\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>spec:\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>  replicas: 2\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>  selector:\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>    matchLabels:\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>      app: pipeline\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>  template:\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>    metadata:\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>      labels:\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>        app: pipeline\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>    spec:\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>      containers:\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>        - name: pipeline\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>          image: 10.21.90.111:8089\u002Frepo\u002Fpipeline:5.0.0\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>          imagePullPolicy: Always\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>          ports:\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>            - containerPort: 9091\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>---\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>apiVersion: v1\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>kind: Service\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>metadata:\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>  namespace: test\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>  labels:\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>    app: pipeline\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>  name: pipeline\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>spec:\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>  selector:\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>    app: pipeline\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>  ports:\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>    - port: 8081\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>      targetPort: 9091\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>  type: NodePort\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>---\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>apiVersion: networking.k8s.io\u002Fv1\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>kind: Ingress\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>metadata:\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>  namespace: test\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>  name: pipeline\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>spec:\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>  ingressClassName: ingress\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>  rules:\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>    - host: mashibing.pipeline.com\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>      http:\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>        paths:\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>          - path: \u002F\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>            pathType: Prefix\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>            backend:\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>              service:\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>                name: pipeline\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>                port:\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>                  number: 8081\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\u003C\u002Fdiv>\u003Ch6 id=\"852-harbor私服配置\">8.5.2 Harbor私服配置\u003Ca class=\"heading-anchor\" href=\"#852-harbor私服配置\" aria-hidden=\"true\">#\u003C\u002Fa>\u003C\u002Fh6>\u003Cp>在尝试用kubernetes的yml文件启动pipeline服务时，会出现Kubernetes无法拉取镜像的问题，这里需要在kubernetes所在的Linux中配置Harbor服务信息，并且保证Kubernetes可以拉取Harbor上的镜像\u003C\u002Fp>\u003Cul>\u003Cli>\u003Cp>设置Master和Worker的私服地址信息\u003C\u002Fp>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-v2JVK4gW-1663124776076)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月05日15时:37分:59秒)]\u003C\u002Fp>\u003C\u002Fli>\u003Cli>\u003Cp>在Kuboard上设置私服密文信息\u003C\u002Fp>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZFMvBf5y-1663124776076)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月05日15时:39分:22秒)]\u003C\u002Fp>\u003Cp>按照复制指令的位置测试认证，效果如下\u003C\u002Fp>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NWT6XOzE-1663124776076)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月05日15时:40分:50秒)]\u003C\u002Fp>\u003C\u002Fli>\u003C\u002Ful>\u003Ch6 id=\"1053-测试使用效果\">10.5.3 测试使用效果\u003Ca class=\"heading-anchor\" href=\"#1053-测试使用效果\" aria-hidden=\"true\">#\u003C\u002Fa>\u003C\u002Fh6>\u003Cp>执行kubectl命令，基于yml启动服务，并且基于部署后服务的提示信息以及Ingress的设置，直接访问\u003C\u002Fp>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-q9zRx998-1663124776077)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月04日23时:06分:35秒)]\u003C\u002Fp>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xXBuinNo-1663124776077)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月05日15时:41分:54秒)]\u003C\u002Fp>\u003Ch6 id=\"1053-jenkins远程调用\">10.5.3 Jenkins远程调用\u003Ca class=\"heading-anchor\" href=\"#1053-jenkins远程调用\" aria-hidden=\"true\">#\u003C\u002Fa>\u003C\u002Fh6>\u003Cul>\u003Cli>\u003Cp>将pipeline.yml配置到Gitlab中\u003C\u002Fp>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Rbphd34n-1663124776077)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月05日15时:43分:07秒)]\u003C\u002Fp>\u003C\u002Fli>\u003Cli>\u003Cp>配置Jenkins的目标服务器，可以将yml文件传输到K8s的Master上\u003C\u002Fp>\u003C\u002Fli>\u003C\u002Ful>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wfTA0qsr-1663124776077)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月05日15时:50分:27秒)]\u003C\u002Fp>\u003Cul>\u003Cli>\u003Cp>修改Jenkinsfile，重新设置流水线任务脚本，并测试效果\u003C\u002Fp>\u003C\u002Fli>\u003C\u002Ful>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-p55FWLRf-1663124776078)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月04日23时:11分:09秒)]\u003C\u002Fp>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pMEETSH4-1663124776078)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月04日23时:11分:34秒)]\u003C\u002Fp>\u003Cul>\u003Cli>\u003Cp>设置Jenkins无密码登录k8s-master\u003C\u002Fp>\u003Cp>将Jenkins中公钥信息复制到k8s-master的~\u002F.ssh\u002Fauthorized_keysz中，保证远程连接无密码\u003C\u002Fp>\u003Cp>进入到jenkins容器内部生成ssh\u003C\u002Fp>\u003Cdiv class=\"code-block\" data-lang=\"text\">\u003Cdiv class=\"code-head\">\u003Cdiv class=\"code-head-left\">\u003Cspan class=\"code-dots\">\u003C\u002Fspan>\u003Cspan class=\"code-lang\">text\u003C\u002Fspan>\u003C\u002Fdiv>\u003C\u002Fdiv>\u003Cpre class=\"shiki shiki-themes github-light github-dark\" style=\"background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan>ssh-keygen -t rsa\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\u003C\u002Fdiv>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-S1LRmjdK-1663124776079)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月05日16时:07分:14秒)]\u003C\u002Fp>\u003Cp>将上述的id_rsa.pub中的key复制到master主机的 ~.ssh\u002F 中的authorized_keys\u003C\u002Fp>\u003C\u002Fli>\u003Cli>\u003Cp>设置执行kubectl的脚本到Jenkinsfile\u003C\u002Fp>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-s3jdbEtZ-1663124776079)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月05日15时:58分:09秒)]\u003C\u002Fp>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dVK66rTo-1663124776079)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月05日15时:56分:51秒)]\u003C\u002Fp>\u003C\u002Fli>\u003Cli>\u003Cp>执行查看效果\u003C\u002Fp>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FrUaZ7ym-1663124776079)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月05日16时:00分:56秒)]\u003C\u002Fp>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VRXunLJz-1663124776079)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月05日16时:01分:30秒)]\u003C\u002Fp>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1wqBE64x-1663124776079)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月05日16时:02分:06秒)]\u003C\u002Fp>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aPQYtGML-1663124776079)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月05日16时:20分:33秒)]\u003C\u002Fp>\u003Cp>然后在流水线中配置执行pineline.yml的脚本\u003C\u002Fp>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zbwl9V04-1663124776080)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月05日16时:25分:09秒)]\u003C\u002Fp>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FNYEzlpl-1663124776080)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月05日16时:39分:20秒)]\u003C\u002Fp>\u003Cp>可以查看到yml文件是由变化的， 这样k8s就会重新加载\u003C\u002Fp>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZTAMXpxc-1663124776080)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月05日16时:40分:30秒)]\u003C\u002Fp>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aLSHvrup-1663124776080)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月05日16时:41分:28秒)]\u003C\u002Fp>\u003C\u002Fli>\u003Cli>\u003Cp>查看效果\u003C\u002Fp>\u003C\u002Fli>\u003C\u002Ful>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mcSMAzyr-1663124776080)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月05日16时:38分:16秒)]\u003C\u002Fp>\u003Cp>Ps：这种方式更适应与CD操作，将项目将基于某个版本部署到指定的目标服务器\u003C\u002Fp>\u003Ch4 id=\"86-基于gitlab的webhooks\">8.6、 基于GitLab的WebHooks\u003Ca class=\"heading-anchor\" href=\"#86-基于gitlab的webhooks\" aria-hidden=\"true\">#\u003C\u002Fa>\u003C\u002Fh4>\u003Cp>这里要实现自动化的一个CI操作，也就是开发人员Push代码到Git仓库后，Jenkins会自动的构建项目，将最新的提交点代码构建并进行打包部署，这里区别去上述的CD操作，CD操作需要基于某个版本进行部署，而这里每次都是将最新的提交点集成到主干上并测试。\u003C\u002Fp>\u003Ch6 id=\"861-webhooks通知\">8.6.1 WebHooks通知\u003Ca class=\"heading-anchor\" href=\"#861-webhooks通知\" aria-hidden=\"true\">#\u003C\u002Fa>\u003C\u002Fh6>\u003Cp>首先在jenkins上安装这两个插件\u003C\u002Fp>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sLU1DEzb-1663124776080)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月05日17时:01分:27秒)]\u003C\u002Fp>\u003Cp>开启Jenkins的自动构建\u003C\u002Fp>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4KCJHnHQ-1663124776081)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月05日17时:03分:24秒)]\u003C\u002Fp>\u003Cp>设置Gitlab的Webhooks\u003C\u002Fp>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-U1kFIVws-1663124776081)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月04日23时:14分:16秒)]\u003C\u002Fp>\u003Cp>需要关闭Jenkins的Gitlab认证\u003C\u002Fp>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hiXU2NT7-1663124776081)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月04日23时:14分:42秒)]\u003C\u002Fp>\u003Cp>再次测试Gitlab\u003C\u002Fp>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-70fXQ41w-1663124776081)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月04日23时:15分:01秒)]\u003C\u002Fp>\u003Ch6 id=\"862-修改配置\">8.6.2 修改配置\u003Ca class=\"heading-anchor\" href=\"#862-修改配置\" aria-hidden=\"true\">#\u003C\u002Fa>\u003C\u002Fh6>\u003Cp>修改Jenkinsfile实现基于最新提交点实现持续集成效果，将之前引用${tag}的全部去掉\u003C\u002Fp>\u003Cdiv class=\"code-block\" data-lang=\"text\">\u003Cdiv class=\"code-head\">\u003Cdiv class=\"code-head-left\">\u003Cspan class=\"code-dots\">\u003C\u002Fspan>\u003Cspan class=\"code-lang\">text\u003C\u002Fspan>\u003C\u002Fdiv>\u003C\u002Fdiv>\u003Cpre class=\"shiki shiki-themes github-light github-dark\" style=\"background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan>\u002F\u002F 所有的脚本命令都放在pipeline中\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>pipeline{\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>\t\u002F\u002F 指定任务再哪个集群节点中执行\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>\tagent any\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>\t\u002F\u002F 声明全局变量，方便后面使用\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>\tenvironment {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>\t\tharborUser = 'admin'\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>        harborPasswd = 'Harbor12345'\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>        harborAddress = '192.168.11.102:80'\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>        harborRepo = 'repo'\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>\t}\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>    stages {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>        stage('拉取git仓库代码') {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>            steps {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>                checkout([$class: 'GitSCM', branches: [[name: '*\u002Fmaster']], extensions: [], userRemoteConfigs: [[url: 'http:\u002F\u002F192.168.11.101:8929\u002Froot\u002Fmytest.git']]])\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>            }\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>        }\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>        stage('通过maven构建项目') {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>            steps {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>                sh '\u002Fvar\u002Fjenkins_home\u002Fmaven\u002Fbin\u002Fmvn clean package -DskipTests'\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>            }\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>        }\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>        stage('通过SonarQube做代码质量检测') {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>            steps {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>                sh '\u002Fvar\u002Fjenkins_home\u002Fsonar-scanner\u002Fbin\u002Fsonar-scanner -Dsonar.source=.\u002F -Dsonar.projectname=${JOB_NAME} -Dsonar.projectKey=${JOB_NAME} -Dsonar.java.binaries=.\u002Ftarget\u002F -Dsonar.login=40306ae8ea69a4792df2ceb4d9d25fe8a6ab1701'\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>            }\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>        }\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>        stage('通过Docker制作自定义镜像') {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>            steps {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>                sh '''mv .\u002Ftarget\u002F*.jar .\u002Fdocker\u002F\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>                docker build -t ${JOB_NAME}:latest .\u002Fdocker\u002F'''\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>            }\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>        }\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>        stage('将自定义镜像推送到Harbor') {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>            steps {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>                sh '''docker login -u ${harborUser} -p ${harborPasswd} ${harborAddress}\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>                docker tag ${JOB_NAME}:latest  ${harborAddress}\u002F${harborRepo}\u002F${JOB_NAME}:latest\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>                docker push ${harborAddress}\u002F${harborRepo}\u002F${JOB_NAME}:latest '''\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>            }\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>        }\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>        stage('将yml文件传到k8s-master上') {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>            steps {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>                sshPublisher(publishers: [sshPublisherDesc(configName: 'k8s', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: '', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, removePrefix: '', sourceFiles: 'pipeline.yml')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>            }\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>        }\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>        stage('远程执行k8s-master的kubectl命令') {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>            steps {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>               sh '''ssh root@192.168.11.201 kubectl apply -f \u002Fusr\u002Flocal\u002Fk8s\u002Fpipeline.yml\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>                ssh root@192.168.11.201 kubectl rollout restart deployment pipeline -n test'''\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>            }\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>        }\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>    }\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>    post {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>        success {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>            dingtalk(\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>                robot: 'Jenkins-DingDing',\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>                type: 'MARKDOWN',\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>                title: \"success: ${JOB_NAME}\",\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>                text: [\"- 成功构建：${JOB_NAME}! \\n- 版本：latest \\n- 持续时间：${currentBuild.durationString}\" ]\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>            )\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>        }\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>        failure {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>            dingtalk(\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>                robot: 'Jenkins-DingDing',\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>                type: 'MARKDOWN',\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>                title: \"success: ${JOB_NAME}\",\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>                text: [\"- 构建失败：${JOB_NAME}! \\n- 版本：latest \\n- 持续时间：${currentBuild.durationString}\" ]\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>            )\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>        }\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>    }\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>}\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\u003C\u002Fdiv>\u003Cp>修改pipeline.yml，更改镜像版本\u003C\u002Fp>\u003Cdiv class=\"code-block\" data-lang=\"text\">\u003Cdiv class=\"code-head\">\u003Cdiv class=\"code-head-left\">\u003Cspan class=\"code-dots\">\u003C\u002Fspan>\u003Cspan class=\"code-lang\">text\u003C\u002Fspan>\u003C\u002Fdiv>\u003C\u002Fdiv>\u003Cpre class=\"shiki shiki-themes github-light github-dark\" style=\"background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan>apiVersion: apps\u002Fv1\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>kind: Deployment\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>metadata:\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>  namespace: test\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>  name: pipeline\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>  labels:\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>    app: pipeline\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>spec:\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>  replicas: 2\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>  selector:\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>    matchLabels:\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>      app: pipeline\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>  template:\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>    metadata:\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>      labels:\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>        app: pipeline    \u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>    spec:\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>      containers:\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>      - name: pipeline\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>        image: 192.168.11.102:80\u002Frepo\u002Fpipeline:latest   # 这里\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>        imagePullPolicy: Always\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>        ports:\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan>        - containerPort: 8080\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan># 省略其他内容…………\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\u003C\u002Fdiv>\u003Ch6 id=\"863-滚动更新\">8.6.3 滚动更新\u003Ca class=\"heading-anchor\" href=\"#863-滚动更新\" aria-hidden=\"true\">#\u003C\u002Fa>\u003C\u002Fh6>\u003Cp>因为pipeline没有改变时，每次不会重新加载，这样会导致Pod中的容器不会动态更新，这里需要使用kubectl的rollout restart命令滚动更新\u003C\u002Fp>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cufNpdHd-1663124776081)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月04日23时:15分:29秒)]\u003C\u002Fp>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GXL97I8l-1663124776081)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月04日23时:15分:44秒)]\u003C\u002Fp>\u003Ch3 id=\"9自动化测试环境部署\">9、自动化测试环境部署\u003Ca class=\"heading-anchor\" href=\"#9自动化测试环境部署\" aria-hidden=\"true\">#\u003C\u002Fa>\u003C\u002Fh3>\u003Ch4 id=\"91创建相关环境\">9.1、创建相关环境\u003Ca class=\"heading-anchor\" href=\"#91创建相关环境\" aria-hidden=\"true\">#\u003C\u002Fa>\u003C\u002Fh4>\u003Cul>\u003Cli>\u003Cp>在linux环境上创建一个文件夹用来存放python环境相关包\u003C\u002Fp>\u003C\u002Fli>\u003C\u002Ful>\u003Cp>命令mkdir python\u003C\u002Fp>\u003Cul>\u003Cli>\u003Cp>安装python运行环境，输入python3可进入编辑（python安装成功后在 usr\u002Flocal\u002Flib下）\u003C\u002Fp>\u003C\u002Fli>\u003C\u002Ful>\u003Cp>参考链接：https:\u002F\u002Fblog.csdn.net\u002Fqq_15821487\u002Farticle\u002Fdetails\u002F12221499\u003C\u002Fp>\u003Cul>\u003Cli>\u003Cp>安装基础的selenium包\u003C\u002Fp>\u003Cp>Python3.6后自带pip，可直接使用命令安装 python3 -m pip install selenium==3.141.0\u003C\u002Fp>\u003C\u002Fli>\u003Cli>\u003Cp>安装linux版本谷歌浏览器\u003C\u002Fp>\u003Cp>到官网下载rpm包上传到服务器里，在安装包路径下使用 yum localinstall 包名进行安装。yun localinstall能够自动解决安装依赖包问题。使用rpm -ivh &lt;包名&gt;可以进行安装，但是不能自动解决依赖包问题\u003C\u002Fp>\u003Cp>参考链接：https:\u002F\u002Fblog.csdn.net\u002Fweixin_45777235\u002Farticle\u002Fdetails\u002F122711735\u003C\u002Fp>\u003C\u002Fli>\u003Cli>\u003Cp>安装linux版本谷歌驱动\u003C\u002Fp>\u003Cp>对应谷歌对应的浏览器驱动：\u003C\u002Fp>\u003Cp>将需要的浏览器驱动下载，上传到服务器上，使用mv chromedriver \u002Fusr\u002Flocal\u002Fbin命令\u003C\u002Fp>\u003Cp>将驱动移动到该路径下 （如命令失败给文件加权限 chmod +777 local）\u003C\u002Fp>\u003Cp>参考链接：https:\u002F\u002Fblog.csdn.net\u002Fweixin_43249866\u002Farticle\u002Fdetails\u002F125998386\u003C\u002Fp>\u003C\u002Fli>\u003Cli>\u003Cp>写脚本验证python搭建好，可以进行自动化脚本运行\u003C\u002Fp>\u003C\u002Fli>\u003C\u002Ful>\u003Cp>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ViAvnktO-1663124776081)(https:\u002F\u002Fcyymacbookpro.oss-cn-shanghai.aliyuncs.com\u002FMacbookpro\u002F2022年09月04日23时:20分:00秒)]\u003C\u002Fp>\u003Cul>\u003Cli>\u003Cp>配置测试报告，上传htmlTestRunner.py文件使用unittest+htmlTestRunner框架生成报告。邮件自动发送报告写在python脚本中\u003C\u002Fp>\u003Cp>发送邮件可参考：https:\u002F\u002Fwww.jb51.net\u002Farticle\u002F229831.htm\u003C\u002Fp>\u003C\u002Fli>\u003C\u002Ful>\u003Cp>注意问题\u003C\u002Fp>\u003Cblockquote>\u003Cp>1、 linux环境下路径”\u002F\u002F”需要改成 ‘\u002F’\u003C\u002Fp>\u003Cp>2、安装软件需要切换到root用户下 su root\u003C\u002Fp>\u003Cp>3、使用yum localinstall &lt;包名&gt;进行安装chrome,能够自动解决安装依赖包问题\u003C\u002Fp>\u003Cp>4、python安装成果后在 usr\u002Flocal\u002Flib下\u003C\u002Fp>\u003C\u002Fblockquote>\u003Cp>\u003C\u002Fp>",[21,25,28,31,35,38,41,44,47,50,53,56,59,62,65,68,71,74,77,80,83,86,89,92,95,98,101,104,107,110,113,116,119,122],{"id":22,"text":23,"level":24},"1环境准备","1、环境准备",3,{"id":26,"text":27,"level":24},"2安装docker","2、安装docker",{"id":29,"text":30,"level":24},"3docker搭建基础软件服务环境","3、docker搭建基础软件服务环境",{"id":32,"text":33,"level":34},"31mysql","3.1、mysql",4,{"id":36,"text":37,"level":34},"32redis","3.2、redis",{"id":39,"text":40,"level":34},"33rabbitmq","3.3、Rabbitmq",{"id":42,"text":43,"level":34},"34jenkins","3.4、jenkins",{"id":45,"text":46,"level":34},"35nginx","3.5、nginx",{"id":48,"text":49,"level":24},"4jenkins持续集成持续交付","4、jenkins持续集成持续交付",{"id":51,"text":52,"level":34},"41jenkins初始化操作","4.1、jenkins初始化操作",{"id":54,"text":55,"level":34},"42jenkins入门配置","4.2、Jenkins入门配置",{"id":57,"text":58,"level":24},"5集成sonar-qube","5、集成Sonar Qube",{"id":60,"text":61,"level":34},"51sonar-qube介绍","5.1、Sonar Qube介绍",{"id":63,"text":64,"level":34},"52sonar-qube环境搭建","5.2、Sonar Qube环境搭建",{"id":66,"text":67,"level":34},"53sona的基本使用","5.3、sona的基本使用",{"id":69,"text":70,"level":24},"6harbor","6、harbor",{"id":72,"text":73,"level":34},"61安装docker-compose","6.1、安装docker-compose",{"id":75,"text":76,"level":34},"62安装harbor","6.2、安装harbor",{"id":78,"text":79,"level":34},"63jenkins配置本机docker","6.3、jenkins配置本机docker",{"id":81,"text":82,"level":34},"64jenkins集成harbor","6.4、jenkins集成harbor",{"id":84,"text":85,"level":34},"65目标服务器拉取harbor镜像","6.5、目标服务器拉取harbor镜像",{"id":87,"text":88,"level":24},"7jenkins流水线任务","7、jenkins流水线任务",{"id":90,"text":91,"level":34},"71-jenkins流水线任务介绍","7.1 Jenkins流水线任务介绍",{"id":93,"text":94,"level":34},"72-jenkins流水线任务","7.2 Jenkins流水线任务",{"id":96,"text":97,"level":34},"73pipeline部署","7.3、pipeline部署",{"id":99,"text":100,"level":24},"8搭建k8s集群平台","8、搭建k8s集群平台",{"id":102,"text":103,"level":34},"81k8s的介绍","8.1、k8s的介绍",{"id":105,"text":106,"level":34},"82-kubernetes架构","8.2 Kubernetes架构",{"id":108,"text":109,"level":34},"83-kubernetes安装","8.3、 Kubernetes安装",{"id":111,"text":112,"level":34},"84-kubernetes操作","8.4 Kubernetes操作",{"id":114,"text":115,"level":34},"85-jenkins集成kubernetes","8.5 Jenkins集成Kubernetes",{"id":117,"text":118,"level":34},"86-基于gitlab的webhooks","8.6、 基于GitLab的WebHooks",{"id":120,"text":121,"level":24},"9自动化测试环境部署","9、自动化测试环境部署",{"id":123,"text":124,"level":34},"91创建相关环境","9.1、创建相关环境","2026-07-15T05:36:21.574Z",15113,44,1,null,0,"repost","https:\u002F\u002Fblog.csdn.net\u002Fqq_40985788\u002Farticle\u002Fdetails\u002F126848764?spm=1001.2014.3001.5501","成就一亿技术人!",[],{"slug":136,"title":137},"ai-daily-2026-07-15","AI 日报 · 2026-07-15",{"slug":139,"title":140},"claude-code-x4t","Claude Code使用分享（下载，配置，使用）",[142,144,145],{"slug":139,"title":140,"readingTimeMinutes":143},6,{"slug":136,"title":137,"readingTimeMinutes":24},{"slug":146,"title":147,"readingTimeMinutes":24},"ai-daily-2026-07-12","AI 日报 · 2026-07-12",{},{"total":130,"items":150},[]]