devops

2023-11-12

1、环境准备

  • 使用的虚拟机环境centos7.8

Jenkins: 10.21.90.111

k8sMaster : 10.21.90.113

k8sNode: 10.21.90.114

  • 同步主机时区为亚洲,并同步时间

    [root@linux-node ~]# echo "ZONE=Asia/Shanghai" >> /etc/sysconfig/clock         
    [root@linux-node ~]# rm -f /etc/localtime
    #链接到上海时区文件       
    [root@linux-node ~]# ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
    
  • 关闭防火墙和selinux

    [root@localhost ~]# systemctl stop firewalld
    [root@localhost ~]# systemctl disable firewalld
    Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
    Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
    [root@localhost ~]# setenforce 0
    [root@localhost ~]# sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
    
  • 设置yum源

    wget -O /etc/yum.repos.d/CentOS-Base.repo  http://mirrors.aliyun.com/repo/Centos-7.repo
    wget -O /etc/yum.repos.d/epel.repo  http://mirrors.aliyun.com/repo/epel-7.repo
    yum clean all
    yum makecache
    
  • 安装jdk

2、安装docker

curl -sSL https://get.daocloud.io/docker | sh

3、docker搭建基础软件服务环境

也可以直接编辑docker-compose.yml 直接使用docker-compose进行环境搭建

Docker-compose.yml基本语法如下

version: “3.8”
volumes:
data:
config:
plugin:
networks:
es:
services:
elasticsearch:
image: elasticsearch:7.14.0
ports:

 - "9200:9200"
       - "9300:9300"
   networks:
       - "es"
       environment:
             - "discovery.type=single-node"
                   - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
           volumes:
                   - data:/Users/chenya/soft/soft/dockerVolume/esData/data
                         - config:/Users/chenya/soft/soft/dockerVolume/esData/config
                         - plugin:/Users/chenya/soft/soft/dockerVolume/esData/plugins

kibana:
image: kibana:7.14.0
ports:
- “5601:5601”
networks:
- “es”
volumes:
- ./kibana.yml:/Users/chenya/soft/soft/dockerVolume/esData/kibana.yml

3.1、mysql

https://blog.csdn.net/u013189488/article/details/125077423

3.2、redis

docker pull redis:3.2

docker run --name redis  -p 6379:6379  --restart=always -d <容器id>

3.3、Rabbitmq

docker pull rabbitmq
docker run --name rabbitmq -p 15672:15672 -p 5672:5672 -d  --restart=always <容器id> 

3.4、jenkins

docker pull jenkins/jenkins
docker run -p 80808080 -p 50005000 --name jenkinsdxc -v /usr/jenkins_data:/var/jenkins_home  <容器id>

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jxShDxT8-1663124776057)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月01日11时:36分:25秒)]

jenkins基础环境搭建完了之后需要安装一系列插件 git node jdk maven

需要配置服务器秘钥

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Nb0Uul4n-1663124776057)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月01日11时:38分:30秒)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fPog6hGG-1663124776058)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月01日11时:41分:11秒)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pv5W8AR7-1663124776058)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月01日11时:40分:06秒)]

3.5、nginx

https://blog.educy.top/archives/docker%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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-t2kH14Zd-1663124776058)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月01日11时:41分:38秒)]

4、jenkins持续集成持续交付

4.1、jenkins初始化操作

  • 查看密码登录Jenkins,并登录下载插件

    docker exec -it jenkins cat /var/jenkins_home/secrets/initialAdminPassword
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-spmju92B-1663124776058)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月04日13时:17分:19秒)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SVKbS8DM-1663124776058)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月04日13时:17分:41秒)]

  • 选择需要安装的插件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mMNWNMqp-1663124776058)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月04日13时:18分:25秒)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4VB1GWPr-1663124776059)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月04日13时:18分:37秒)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nwmzX22w-1663124776059)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月04日13时:18分:50秒)]

  • 下载完毕设置信息进入首页

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rlp6tl4U-1663124776059)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月04日13时:19分:19秒)]

4.2、Jenkins入门配置

由于Jenkins需要从Git拉取代码、需要本地构建、甚至需要直接发布自定义镜像到Docker仓库,所以Jenkins需要配置大量内容。

4.2.0、全局配置

  • maven的全局配置

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vrUQZsfy-1663124776059)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月04日13时:35分:49秒)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EYbPuAYs-1663124776059)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月04日13时:37分:17秒)]

  • jdk的全局配置

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-k3W6c7uk-1663124776059)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月04日13时:37分:58秒)]

  • node的全局配置

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3oQdhC3h-1663124776060)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月04日13时:38分:26秒)]

  • ssh Server的全局配置<用来传输文件>

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tQKdKuOE-1663124776060)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月04日13时:39分:37秒)]

4.2.1、构建任务

准备好GitLab仓库中的项目,并且通过Jenkins配置项目的实现当前项目的DevOps基本流程。

  • 构建Maven工程发布到GitLab(Gitee、Github均可)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xZZseGBO-1663124776060)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月04日13时:50分:41秒)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BiQS15Ln-1663124776060)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月04日13时:21分:11秒)]

  • Jenkins点击左侧导航新建任务

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JgGbRq2U-1663124776060)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月04日13时:22分:16秒)]

4.2.2、配置源代码拉取地址

Jenkins需要将Git上存放的源码存储到Jenkins服务所在磁盘的本地

  • 配置源代码拉取地址

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vj24czAq-1663124776060)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月04日13时:31分:56秒)]

  • Jenkins立即构建

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XtiGUtKu-1663124776060)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月04日13时:45分:34秒)]

4.2.3、基于Parameter构建任务

Tag: 相当于每次发布一个新版本的时候都给项目打上一个tag ,jenkins就可以根据这个tag进行构建,当发现该版本有bug需要回滚的时候,我们再重新构建上一个tag版本即可

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4CmSaGIJ-1663124776061)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月04日13时:54分:26秒)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Zn0pn7ZV-1663124776061)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月04日13时:55分:45秒)]

  • 查看构建工程的日志

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ndImQJF6-1663124776061)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月04日13时:57分:33秒)]

  • 查看控制台docker镜像以及容器

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cKOxdSmP-1663124776061)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月04日13时:59分:01秒)]

  • 测试接口

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fghEd8QB-1663124776062)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月04日13时:59分:35秒)]

4.2.4、根据tag进行回滚

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6AXApx13-1663124776062)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月04日14时:01分:31秒)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ap7WE0vl-1663124776062)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月04日14时:02分:10秒)]

5、集成Sonar Qube

5.1、Sonar Qube介绍

Sonar Qube是一个开源的代码分析平台,支持Java、Python、PHP、JavaScript、CSS等25种以上的语言,可以检测出重复代码、代码漏洞、代码规范和安全性漏洞的问题。

Sonar Qube可以与多种软件整合进行代码扫描,比如Maven,Gradle,Git,Jenkins等,并且会将代码检测结果推送回Sonar Qube并且在系统提供的UI界面上显示出来

5.2、Sonar Qube环境搭建

5.2.1、 Sonar Qube安装

Sonar Qube在7.9版本中已经放弃了对MySQL的支持,并且建议在商业环境中采用PostgreSQL,那么安装Sonar Qube时需要依赖PostgreSQL。

并且这里会安装Sonar Qube的长期支持版本8.9

  • 拉取镜像
docker pull postgres
docker pull sonarqube:8.9.3-community

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Mal5nvSt-1663124776062)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月04日14时:15分:56秒)]

  • 编写docker-compose.yml文件
version: "3.1"
services:
  db:
    image: postgres
    container_name: db
    ports:
      - 5432:5432
    networks:
      - sonarnet
    environment:
      POSTGRES_USER: sonar
      POSTGRES_PASSWORD: sonar
  sonarqube:
    image: sonarqube:8.9.3-community
    container_name: sonarqube
    depends_on:
      - db
    ports:
      - "9000:9000"
    networks:
      - sonarnet
    environment:
      SONAR_JDBC_URL: jdbc:postgresql://db:5432/sonar
      SONAR_JDBC_USERNAME: sonar
      SONAR_JDBC_PASSWORD: sonar
networks:
  sonarnet:
    driver: bridge
  • 基于docker-compose.yml构建镜像

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RRRhGTS1-1663124776062)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月04日14时:20分:09秒)]

  • 查看sona日志

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UHFYrdMc-1663124776062)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月04日14时:22分:38秒)]

可以看到需要修改最大虚拟内存

  • 修改主机最大虚拟内存
vim /etc/sysctl.conf

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hQFXjp2c-1663124776063)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月04日14时:25分:48秒)]

sysctl -p   查看此时的最大虚拟内存
[root@localhost sona]# sysctl -p 
vm.max_map_count = 262144
  • 访问sona主页

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Mo5cxgeJ-1663124776063)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月04日14时:28分:38秒)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WQzCeXrz-1663124776063)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月04日14时:29分:45秒)]

  • 安装中文插件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-T8SqPHwf-1663124776063)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月04日14时:32分:03秒)]

5.3、sona的基本使用

Sonar Qube的使用方式很多,Maven可以整合,也可以采用sonar-scanner的方式,再查看Sonar Qube的检测效果

5.3.1、Maven实现代码检测

  • 修改Maven的settings.xml文件配置Sonar Qube信息

    <profile>
        <id>sonar</id>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
        <properties>
            <sonar.login>admin</sonar.login>
            <sonar.password>123456789</sonar.password>
            <sonar.host.url>http://192.168.11.11:9000</sonar.host.url>
        </properties>
    </profile>
    
  • 在代码位置执行命令:mvn sonar:sonar

  • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-c5H18hEn-1663124776063)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月04日15时:02分:36秒)]

  • 查看Sonar Qube界面检测结果

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7pUosv0B-1663124776063)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月04日15时:02分:59秒)]

5.3.2、Sonar-scanner实现代码检测

  • 下载Sonar-scanner:https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/

    下载4.6.x版本即可,要求Linux版本

  • 解压并配置sonar服务端信息

    • 由于是zip压缩包,需要安装unzip解压插件

    • yum -y install unzip
      
    • 解压压缩包

      unzip sonar-scanner-cli/sonar-scanner-cli-4.6.0.2311-linux.zip
      
    • 配置sonarQube服务端地址,修改conf下的sonar-scanner.properties

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-f2Y9bWDY-1663124776064)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月04日15时:19分:45秒)]

  • 执行命令检测代码

# 在项目所在目录执行以下命令
/opt/data/jenkins_data/jenkins_home/sonar-scanner/bin/sonar-scanner -Dsonar.sources=./ -Dsonar.projectname=mytest  -Dsonar.login=3aa66c73523dc3955fdb04ada420b0a1365fd4c4  -Dsonar.projectKey=mytest  -Dsonar.java.binaries=./target/
[root@localhost TestProject]# /opt/data/jenkins_data/jenkins_home/sonar-scanner/bin/sonar-scanner -Dsonar.sources=./ -Dsonar.projectname=mytest  -Dsonar.login=3aa66c73523dc3955fdb04ada420b0a1365fd4c4  -Dsonar.projectKey=mytest  -Dsonar.java.binaries=./target/
INFO: Scanner configuration file: /opt/data/jenkins_data/jenkins_home/sonar-scanner/conf/sonar-scanner.properties
INFO: Project root configuration file: NONE
INFO: SonarScanner 4.6.1.2450
INFO: Java 11.0.3 AdoptOpenJDK (64-bit)
INFO: Linux 3.10.0-1160.76.1.el7.x86_64 amd64
INFO: User cache: /root/.sonar/cache
INFO: Scanner configuration file: /opt/data/jenkins_data/jenkins_home/sonar-scanner/conf/sonar-scanner.properties
INFO: Project root configuration file: NONE
INFO: Analyzing on SonarQube server 8.9.3
INFO: Default locale: "en_US", source code encoding: "UTF-8"
INFO: Load global settings
INFO: Load global settings (done) | time=89ms
INFO: Server id: 243B8A4D-AYMHLlWCpKRcCxeen58c
INFO: User cache: /root/.sonar/cache
INFO: Load/download plugins
INFO: Load plugins index
INFO: Load plugins index (done) | time=48ms
INFO: Plugin [l10nzh] defines 'l10nen' as base plugin. This metadata can be removed from manifest of l10n plugins since version 5.2.
INFO: Load/download plugins (done) | time=124ms
INFO: Process project properties
INFO: Process project properties (done) | time=8ms
INFO: Execute project builders
INFO: Execute project builders (done) | time=1ms
INFO: Project key: mytest
INFO: Base dir: /opt/data/jenkins_data/jenkins_home/workspace/TestProject
INFO: Working dir: /opt/data/jenkins_data/jenkins_home/workspace/TestProject/.scannerwork
INFO: Load project settings for component key: 'mytest'
INFO: Load quality profiles
INFO: Load quality profiles (done) | time=60ms
INFO: Load active rules
INFO: Load active rules (done) | time=1060ms
INFO: Indexing files...
INFO: Project configuration:
INFO: 9 files indexed
INFO: 8 files ignored because of scm ignore settings
INFO: Quality profile for java: Sonar way
INFO: Quality profile for xml: Sonar way
INFO: ------------- Run sensors on module mytest
INFO: Load metrics repository
INFO: Load metrics repository (done) | time=23ms
INFO: Sensor JavaSquidSensor [java]
INFO: Configured Java source version (sonar.java.source): none
INFO: JavaClasspath initialization
INFO: JavaClasspath initialization (done) | time=9ms
INFO: JavaTestClasspath initialization
INFO: JavaTestClasspath initialization (done) | time=0ms
INFO: Java Main Files AST scan
INFO: 3 source files to be analyzed
INFO: Load project repositories
INFO: Load project repositories (done) | time=8ms
INFO: 3/3 source files have been analyzed
WARN: Dependencies/libraries 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.
WARN: Unresolved imports/types have been detected during analysis. Enable DEBUG mode to see them.
INFO: Java Main Files AST scan (done) | time=1270ms
INFO: Java Test Files AST scan
INFO: 0 source files to be analyzed
INFO: 0/0 source files have been analyzed
INFO: Java Test Files AST scan (done) | time=1ms
INFO: Java Generated Files AST scan
INFO: 0 source files to be analyzed
INFO: 0/0 source files have been analyzed
INFO: Java Generated Files AST scan (done) | time=0ms
INFO: Sensor JavaSquidSensor [java] (done) | time=1659ms
INFO: Sensor CSS Rules [cssfamily]
INFO: No CSS, PHP, HTML or VueJS files are found in the project. CSS analysis is skipped.
INFO: Sensor CSS Rules [cssfamily] (done) | time=1ms
INFO: Sensor JaCoCo XML Report Importer [jacoco]
INFO: 'sonar.coverage.jacoco.xmlReportPaths' is not defined. Using default locations: target/site/jacoco/jacoco.xml,target/site/jacoco-it/jacoco.xml,build/reports/jacoco/test/jacocoTestReport.xml
INFO: No report imported, no coverage information will be imported by JaCoCo XML Report Importer
INFO: Sensor JaCoCo XML Report Importer [jacoco] (done) | time=3ms
INFO: Sensor C# Project Type Information [csharp]
INFO: Sensor C# Project Type Information [csharp] (done) | time=1ms
INFO: Sensor C# Properties [csharp]
INFO: Sensor C# Properties [csharp] (done) | time=1ms
INFO: Sensor SurefireSensor [java]
INFO: parsing [/opt/data/jenkins_data/jenkins_home/workspace/TestProject/target/surefire-reports]
INFO: Sensor SurefireSensor [java] (done) | time=3ms
INFO: Sensor JavaXmlSensor [java]
INFO: 1 source file to be analyzed
INFO: 1/1 source file has been analyzed
INFO: Sensor JavaXmlSensor [java] (done) | time=218ms
INFO: Sensor HTML [web]
INFO: Sensor HTML [web] (done) | time=5ms
INFO: Sensor XML Sensor [xml]
INFO: 1 source file to be analyzed
INFO: 1/1 source file has been analyzed
INFO: Sensor XML Sensor [xml] (done) | time=167ms
INFO: Sensor VB.NET Project Type Information [vbnet]
INFO: Sensor VB.NET Project Type Information [vbnet] (done) | time=1ms
INFO: Sensor VB.NET Properties [vbnet]
INFO: Sensor VB.NET Properties [vbnet] (done) | time=1ms
INFO: ------------- Run sensors on project
INFO: Sensor Zero Coverage Sensor
INFO: Sensor Zero Coverage Sensor (done) | time=10ms
INFO: Sensor Java CPD Block Indexer
INFO: Sensor Java CPD Block Indexer (done) | time=17ms
INFO: SCM Publisher SCM provider for this project is: git
INFO: SCM Publisher 4 source files to be analyzed
INFO: SCM Publisher 4/4 source files have been analyzed (done) | time=167ms
INFO: CPD Executor 3 files had no CPD blocks
INFO: CPD Executor Calculating CPD for 0 files
INFO: CPD Executor CPD calculation finished (done) | time=0ms
INFO: Analysis report generated in 74ms, dir size=101 KB
INFO: Analysis report compressed in 33ms, zip size=18 KB
INFO: Analysis report uploaded in 1136ms
INFO: ANALYSIS SUCCESSFUL, you can browse http://10.21.90.111:9000/dashboard?id=mytest
INFO: Note that you will be able to access the updated dashboard once the server has processed the submitted analysis report
INFO: More about the report processing at http://10.21.90.111:9000/api/ce/task?id=AYMHZFLNEMGepM7duLdg
INFO: Analysis total time: 6.437 s
INFO: ------------------------------------------------------------------------
INFO: EXECUTION SUCCESS
INFO: ------------------------------------------------------------------------
INFO: Total time: 7.536s
INFO: Final Memory: 8M/44M
INFO: ------------------------------------------------------------------------
[root@localhost TestProject]# 
  • 查看代码监测效果

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cjsK42Up-1663124776064)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月04日15时:27分:38秒)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-at4haZsW-1663124776064)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月04日15时:28分:06秒)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JywRUxbU-1663124776064)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月04日15时:28分:23秒)]

5.3.3、jenkins整合sonar

5.3.3.1、下载sonar-scanner插件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qLK2wqPd-1663124776064)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月04日15时:31分:11秒)]

5.3.3.2、配置sonar秘钥以及地址

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-P08hldRC-1663124776064)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月04日15时:37分:43秒)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vW6aLnVD-1663124776065)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月04日15时:37分:11秒)]

5.3.3.3、配置全局sonar路径

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uRg7wUOT-1663124776065)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月04日15时:42分:33秒)]

5.3.3.3、流水线中追加代码扫描
sonar.projectname=${JOB_NAME}
sonar.projectKey=${JOB_NAME}
sonar.source=./
sonar.java.binaries=target

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZxT05OR9-1663124776065)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月04日15时:46分:33秒)]

5.3.3.4、代码构建

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Z1PLfwUW-1663124776065)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月04日15时:51分:29秒)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-232b0EAy-1663124776065)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月04日15时:52分:20秒)]

INFO: Scanner configuration file: /var/jenkins_home/sonar-scanner/conf/sonar-scanner.properties
INFO: Project root configuration file: NONE
INFO: SonarScanner 4.6.1.2450
INFO: Java 11.0.3 AdoptOpenJDK (64-bit)
INFO: Linux 3.10.0-1160.76.1.el7.x86_64 amd64
INFO: User cache: /var/jenkins_home/.sonar/cache
INFO: Scanner configuration file: /var/jenkins_home/sonar-scanner/conf/sonar-scanner.properties
INFO: Project root configuration file: NONE
INFO: Analyzing on SonarQube server 8.9.3
INFO: Default locale: "en", source code encoding: "UTF-8"
INFO: Load global settings
INFO: Load global settings (done) | time=91ms
INFO: Server id: 243B8A4D-AYMHLlWCpKRcCxeen58c
INFO: User cache: /var/jenkins_home/.sonar/cache
INFO: Load/download plugins
INFO: Load plugins index
INFO: Load plugins index (done) | time=51ms
INFO: Plugin [l10nzh] defines 'l10nen' as base plugin. This metadata can be removed from manifest of l10n plugins since version 5.2.
INFO: Load/download plugins (done) | time=122ms
INFO: Process project properties
INFO: Process project properties (done) | time=1ms
INFO: Execute project builders
INFO: Execute project builders (done) | time=2ms
INFO: Project key: TestProject
INFO: Base dir: /var/jenkins_home/workspace/TestProject
INFO: Working dir: /var/jenkins_home/workspace/TestProject/.scannerwork
INFO: Load project settings for component key: 'TestProject'
INFO: Auto-configuring with CI 'Jenkins'
INFO: Load quality profiles
INFO: Load quality profiles (done) | time=70ms
INFO: Auto-configuring with CI 'Jenkins'
INFO: Load active rules
INFO: Load active rules (done) | time=1169ms
INFO: Indexing files...
INFO: Project configuration:
INFO: 9 files indexed
INFO: 8 files ignored because of scm ignore settings
INFO: Quality profile for java: Sonar way
INFO: Quality profile for xml: Sonar way
INFO: ------------- Run sensors on module TestProject
INFO: Load metrics repository
INFO: Load metrics repository (done) | time=33ms
INFO: Sensor JavaSquidSensor [java]
INFO: Configured Java source version (sonar.java.source): none
INFO: JavaClasspath initialization
INFO: JavaClasspath initialization (done) | time=8ms
INFO: JavaTestClasspath initialization
INFO: JavaTestClasspath initialization (done) | time=0ms
INFO: Java Main Files AST scan
INFO: 3 source files to be analyzed
INFO: Load project repositories
INFO: Load project repositories (done) | time=7ms
INFO: 3/3 source files have been analyzed
WARN: Dependencies/libraries 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.
WARN: Unresolved imports/types have been detected during analysis. Enable DEBUG mode to see them.
INFO: Java Main Files AST scan (done) | time=983ms
INFO: Java Test Files AST scan
INFO: 0 source files to be analyzed
INFO: 0/0 source files have been analyzed
INFO: Java Test Files AST scan (done) | time=0ms
INFO: Java Generated Files AST scan
INFO: 0 source files to be analyzed
INFO: 0/0 source files have been analyzed
INFO: Java Generated Files AST scan (done) | time=0ms
INFO: Sensor JavaSquidSensor [java] (done) | time=1330ms
INFO: Sensor CSS Rules [cssfamily]
INFO: No CSS, PHP, HTML or VueJS files are found in the project. CSS analysis is skipped.
INFO: Sensor CSS Rules [cssfamily] (done) | time=0ms
INFO: Sensor JaCoCo XML Report Importer [jacoco]
INFO: 'sonar.coverage.jacoco.xmlReportPaths' is not defined. Using default locations: target/site/jacoco/jacoco.xml,target/site/jacoco-it/jacoco.xml,build/reports/jacoco/test/jacocoTestReport.xml
INFO: No report imported, no coverage information will be imported by JaCoCo XML Report Importer
INFO: Sensor JaCoCo XML Report Importer [jacoco] (done) | time=3ms
INFO: Sensor C# Project Type Information [csharp]
INFO: Sensor C# Project Type Information [csharp] (done) | time=1ms
INFO: Sensor C# Properties [csharp]
INFO: Sensor C# Properties [csharp] (done) | time=1ms
INFO: Sensor SurefireSensor [java]
INFO: parsing [/var/jenkins_home/workspace/TestProject/target/surefire-reports]
INFO: Sensor SurefireSensor [java] (done) | time=1ms
INFO: Sensor JavaXmlSensor [java]
INFO: 1 source file to be analyzed
INFO: 1/1 source file has been analyzed
INFO: Sensor JavaXmlSensor [java] (done) | time=186ms
INFO: Sensor HTML [web]
INFO: Sensor HTML [web] (done) | time=3ms
INFO: Sensor XML Sensor [xml]
INFO: 1 source file to be analyzed
INFO: 1/1 source file has been analyzed
INFO: Sensor XML Sensor [xml] (done) | time=126ms
INFO: Sensor VB.NET Project Type Information [vbnet]
INFO: Sensor VB.NET Project Type Information [vbnet] (done) | time=1ms
INFO: Sensor VB.NET Properties [vbnet]
INFO: Sensor VB.NET Properties [vbnet] (done) | time=1ms
INFO: ------------- Run sensors on project
INFO: Sensor Zero Coverage Sensor
INFO: Sensor Zero Coverage Sensor (done) | time=8ms
INFO: Sensor Java CPD Block Indexer
INFO: Sensor Java CPD Block Indexer (done) | time=15ms
INFO: SCM Publisher SCM provider for this project is: git
INFO: SCM Publisher 4 source files to be analyzed
INFO: SCM Publisher 4/4 source files have been analyzed (done) | time=86ms
INFO: CPD Executor 3 files had no CPD blocks
INFO: CPD Executor Calculating CPD for 0 files
INFO: CPD Executor CPD calculation finished (done) | time=0ms
INFO: Analysis report generated in 67ms, dir size=101 KB
INFO: Analysis report compressed in 33ms, zip size=18 KB
INFO: Analysis report uploaded in 444ms
INFO: ANALYSIS SUCCESSFUL, you can browse http://10.21.90.111:9000/dashboard?id=TestProject
INFO: Note that you will be able to access the updated dashboard once the server has processed the submitted analysis report
INFO: More about the report processing at http://10.21.90.111:9000/api/ce/task?id=AYMHfOJgEMGepM7duLds
INFO: Analysis total time: 5.303 s
INFO: ------------------------------------------------------------------------
INFO: EXECUTION SUCCESS
INFO: ------------------------------------------------------------------------
INFO: Total time: 6.395s
INFO: Final Memory: 8M/44M
INFO: ------------------------------------------------------------------------
SSH: Connecting from host [7c6d0b3479dd]
SSH: Connecting with configuration [10.21.90.111] ...
SSH: Creating session: username [root], hostname [10.21.90.111], port [22]
SSH: Connecting session ...
SSH: Connected
SSH: Opening SFTP channel ...
SSH: SFTP channel open
SSH: Connecting SFTP channel ...
SSH: Connected
SSH: cd [/]
SSH: OK
SSH: cd [/]
SSH: OK
SSH: cd [opt/data/tempJar/test]
SSH: OK
SSH: cd [docker]
SSH: OK
SSH: put [Dockerfile]
SSH: OK
SSH: put [docker-compose.yml]
SSH: OK
SSH: cd [/]
SSH: OK
SSH: cd [opt/data/tempJar/test]
SSH: OK
SSH: cd [target]
SSH: OK
SSH: put [test.jar]
SSH: OK
SSH: Opening exec channel ...
SSH: EXEC: channel open
SSH: EXEC: STDOUT/STDERR from command [docker rm -f  hello-world1.0.0
docker rmi  hello-world:v1.0.0
pid=`ps -ef | grep test.jar.jar | grep -v grep | awk '{print $2}'`
echo "旧的进程id: $pid"
if [ -n "$pid" ]
then
kill -9 $pid
fi
cd /opt/data/tempJar/test/target
mv test.jar  /opt/data/tempJar/test/docker
cd  /opt/data/tempJar/test/docker
docker-compose down
docker-compose up -d --build
npid=`ps -ef | grep SpringbootHelloWorld-0.0.1-SNAPSHOT.jar | grep -v grep | awk '{print $2}'`
echo "新的进程 $npid:$?"
echo "启动成功!"] ...
SSH: EXEC: connected
hello-world1.0.0
Untagged: hello-world:v1.0.0
Deleted: sha256:32a33a140320c2b60f8fc84c1e993a61acc279f2b0d692702222314d88c808d6
Deleted: sha256:f2a568e1a3911ef3fcbca1367f1d41f6962d54d6f51c62ab2370c16ce86280b6
Deleted: sha256:e731c7d62db0747e0ded60e79506c7f23d71c482ad252aa16372b7b3aa4ab93e
Deleted: sha256:0d6121f16fa8a198eecb4d73be24e0673a46022401dd4ab8bc8873b66a77461e
旧的进程id: 
Removing network docker_default
Creating network "docker_default" with the default driver
Building demo
Step 1/4 : FROM adoptopenjdk/openjdk8
 ---> 540dce7c8eb7
Step 2/4 : COPY test.jar /usr/local
 ---> 9d9156866239
Step 3/4 : WORKDIR /usr/local
 ---> Running in e48558ffdfe1
Removing intermediate container e48558ffdfe1
 ---> 24800bc4c809
Step 4/4 : CMD java -jar  test.jar
 ---> Running in ca619af9cd72
Removing intermediate container ca619af9cd72
 ---> 64bf8a27c101
Successfully built 64bf8a27c101
Successfully tagged hello-world:v1.0.0
Creating hello-world1.0.0 ... 
[1B新的进程 :0
启动成功!
SSH: EXEC: completed after 5,204 ms
SSH: Disconnecting configuration [10.21.90.111] ...
SSH: Transferred 3 file(s)
Finished: SUCCESS

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fOvOif1k-1663124776065)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月04日15时:55分:02秒)]

6、harbor

6.1、安装docker-compose

curl -L "https://github.com/docker/compose/releases/download/1.23.2/docker-compose-$(uname -s)-$(uname -m)" -o/usr/local/bin/docker-compose

给docker-compose赋予权限

chmod +x /usr/local/bin/docker-compose

检查运行docker-compose --version,如下:

[root@localhost ~]# docker-compose --version
docker-compose version 1.23.2, build 1110ad01

6.2、安装harbor

  • 在github上下载相应的安装包

​ http://github.com/goharbor/harbor/releases

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KAxYfzzE-1663124776065)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月03日12时:22分:37秒)]

  • 解压完毕进入目录修改编辑配置文件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hegacbME-1663124776065)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月03日12时:06分:56秒)]

​ [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Rg7HYNPE-1663124776066)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月03日12时:26分:38秒)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cboyO0Qi-1663124776067)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月03日12时:29分:19秒)]

  • 运行 ./install.sh

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wek3xwxl-1663124776067)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月03日12时:28分:53秒)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ND7IXPjs-1663124776067)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月03日12时:32分:41秒)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Wfhe84yp-1663124776067)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月03日12时:31分:04秒)]

  • 常用的管理命令<都需要在harbor目录下进行>

停止服务: docker-compose stop
开始服务: docker-compose start
重启服务:docker-compose restart
停止服务并删除容器:docker-compose down
启动服务并运行容器:docker-compose up

6.3、jenkins配置本机docker

6.3.1、修改docker.sock权限

cd /var/run
  
chmod o+rw docker.sock

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Xjl2SUlv-1663124776067)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月03日12时:38分:25秒)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PlLNLOIM-1663124776067)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月03日12时:39分:13秒)]

6.3.2、配置docker私服

vim /etc/docker

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PJ7O7IA4-1663124776067)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月04日16时:38分:28秒)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vG4l15Nn-1663124776068)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月04日16时:38分:56秒)]

6.4、jenkins集成harbor

我们将最开始构建完推送到服务器的步骤删除 重新再下面追加执行shell 在代码扫描完成之后就直接构建镜像打包发布到harbor私服

mv target/*.jar docker/
docker build -t hello-world:$tag docker/
docker login -u admin -p admin 10.21.90.111:8089
docker tag hello-world:$tag 10.21.90.111:8089/repo/hello-world:$tag
docker push 10.21.90.111:8089/repo/hello-world:$tag

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-f7lcn2h4-1663124776068)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月04日16时:20分:00秒)]

[TestProject] $ /bin/sh -xe /tmp/jenkins11098697136826807761.sh
+ mv target/test.jar docker/
+ docker build -t hello-world:4.0.0 docker/
Sending build context to Docker daemon  17.57MB

Step 1/4 : FROM adoptopenjdk/openjdk8
 ---> 540dce7c8eb7
Step 2/4 : COPY test.jar /usr/local
 ---> ec4d13f05a1f
Step 3/4 : WORKDIR /usr/local
 ---> Running in 895e1bf527aa
Removing intermediate container 895e1bf527aa
 ---> f06297821a35
Step 4/4 : CMD java -jar  test.jar
 ---> Running in 7349658fc174
Removing intermediate container 7349658fc174
 ---> 891f70d1f0c9
Successfully built 891f70d1f0c9
Successfully tagged hello-world:4.0.0
+ docker login -u admin -p admin 10.21.90.111:8089
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
WARNING! Your password will be stored unencrypted in /var/jenkins_home/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded
+ docker tag hello-world:4.0.0 10.21.90.111:8089/repo/hello-world:4.0.0
+ docker push 10.21.90.111:8089/repo/hello-world:4.0.0
The push refers to repository [10.21.90.111:8089/repo/hello-world]
4b2ccce3f91c: Preparing
d4d0d8f1f520: Preparing
808fbdd57a2b: Preparing
b40ed86654e5: Preparing
4b2ccce3f91c: Pushed
808fbdd57a2b: Pushed
b40ed86654e5: Pushed
d4d0d8f1f520: Pushed
4.0.0: digest: sha256:c74299fa0816845750b4d46e16b0b2678f447d6ec8955cdc82e08ee1f7c3e518 size: 1166
Finished: SUCCESS

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ke8NZRXS-1663124776068)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月04日16时:35分:48秒)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hxr9FglB-1663124776068)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月04日16时:36分:24秒)]

注意:截止以上步骤 只是将jenkins构建好的镜像推送到了harbor 后续我们需要jenkins通知目标服务器拉取harbor中的镜像并启动

6.5、目标服务器拉取harbor镜像

6.5.1、编写脚本文件

mkdir /opt/data/deploy
vim deploy.sh
horbar_addr=$1
horbar_repo=$2
project=$3
version=$4
container_port=$5
host_port=$6

imageName=$horbar_addr/$horbar_repo/$project:$version

echo $imageName

containerId=`docker ps -a | grep ${project} | awk '{print $1}'`

echo $containerId

if [ "$containerId" != "" ] ; then
    docker stop $containerId
    docker rm $containerId
    echo "Delete Container Success"
fi

tag=`docker images | grep ${project} | awk '{print $2}'`

echo $tag

if [[ "$tag" =~ "$version" ]] ; then
    docker rmi  $imageName
    echo "Delete Image Success"
fi

docker login -u admin  -p admin  $horbar_addr

docker pull $imageName

docker run -d -p $host_port:$container_port --name $project $imageName

echo "Start Container Success"
echo $project

设置权限并执行

chmod a+x deploy.sh

将脚本文件拷贝到/usr/bin路径下 这样保证在任何位置都可以执行该脚本

[root@localhost deploy]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@localhost deploy]# cp deploy.sh  /usr/bin/

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-R6xQxrLn-1663124776068)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月04日18时:36分:18秒)]

6.5.2、配置构建后的操作

  • 首先追加一个port参数用来记录容器启动时候占用的端口

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-A5dU914v-1663124776068)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月04日17时:05分:05秒)]

  • 增加构建后的步骤

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MhKMJsX5-1663124776068)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月04日18时:37分:21秒)]

INFO: Analysis total time: 3.951 s
INFO: ------------------------------------------------------------------------
INFO: EXECUTION SUCCESS
INFO: ------------------------------------------------------------------------
INFO: Total time: 4.953s
INFO: Final Memory: 8M/40M
INFO: ------------------------------------------------------------------------
[hello-world] $ /bin/sh -xe /tmp/jenkins4897409162283685501.sh
+ mv target/test.jar docker/
+ docker build -t hello-world:4.0.0 docker/
Sending build context to Docker daemon  17.57MB

Step 1/4 : FROM adoptopenjdk/openjdk8
 ---> 540dce7c8eb7
Step 2/4 : COPY test.jar /usr/local
 ---> 937aca11ae87
Step 3/4 : WORKDIR /usr/local
 ---> Running in cc41c3a71efb
Removing intermediate container cc41c3a71efb
 ---> ce9d957a6346
Step 4/4 : CMD java -jar  test.jar
 ---> Running in 76d1deddd448
Removing intermediate container 76d1deddd448
 ---> 92a250115b57
Successfully built 92a250115b57
Successfully tagged hello-world:4.0.0
+ docker login -u admin -p admin 10.21.90.111:8089
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
WARNING! Your password will be stored unencrypted in /var/jenkins_home/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded
+ docker tag hello-world:4.0.0 10.21.90.111:8089/repo/hello-world:4.0.0
+ docker push 10.21.90.111:8089/repo/hello-world:4.0.0
The push refers to repository [10.21.90.111:8089/repo/hello-world]
d86574eb4574: Preparing
d4d0d8f1f520: Preparing
808fbdd57a2b: Preparing
b40ed86654e5: Preparing
d4d0d8f1f520: Layer already exists
808fbdd57a2b: Layer already exists
b40ed86654e5: Layer already exists
d86574eb4574: Pushed
4.0.0: digest: sha256:c87530204514713b00c0afa877808ab4937136570dc6ed6550a5ed049e4b57f4 size: 1166
SSH: Connecting from host [7c6d0b3479dd]
SSH: Connecting with configuration [10.21.90.111] ...
SSH: EXEC: completed after 11,608 ms
SSH: Disconnecting configuration [10.21.90.111] ...
SSH: Transferred 0 file(s)
Finished: SUCCESS

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5JOfsmDM-1663124776068)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月04日18时:37分:46秒)]

7、jenkins流水线任务

7.1 Jenkins流水线任务介绍

之前采用Jenkins的自由风格构建的项目,每个步骤流程都要通过不同的方式设置,并且构建过程中整体流程是不可见的,无法确认每个流程花费的时间,并且问题不方便定位问题。

Jenkins的Pipeline可以让项目的发布整体流程可视化,明确执行的阶段,可以快速的定位问题。并且整个项目的生命周期可以通过一个Jenkinsfile文件管理,而且Jenkinsfile文件是可以放在项目中维护。

所以Pipeline相对自由风格或者其他的项目风格更容易操作。

7.2 Jenkins流水线任务

7.2.1 构建Jenkins流水线任务

  • 生成Groovy脚本

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jSZvNs68-1663124776068)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月04日18时:44分:49秒)]

  • 构建后查看视图

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-H3pIBCUI-1663124776069)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月04日18时:45分:39秒)]

7.2.2、测试案例

pipeline {
    agent any

    // 存放所有任务的合集
    stages {
        stage('拉取Git代码') {
            steps {
                echo '拉取Git代码'
            }
        }

        stage('检测代码质量') {
            steps {
                echo '检测代码质量'
            }
        }

        stage('构建代码') {
            steps {
                echo '构建代码'
            }
        }

        stage('制作自定义镜像并发布Harbor') {
            steps {
                echo '制作自定义镜像并发布Harbor'
            }
        }

        stage('基于Harbor部署工程') {
            steps {
                echo '基于Harbor部署工程'
            }
        }
    }
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9pN7QPBZ-1663124776069)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月04日19时:24分:09秒)]

7.2.3、Jenkinsfile

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NWCYadun-1663124776069)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月04日19时:30分:24秒)]

7.3、pipeline部署

7.3.1、生成checkout流水线语法

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-O3J86LzB-1663124776069)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月04日19时:37分:57秒)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-L0tEtyZl-1663124776069)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月04日19时:38分:59秒)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-L5myDfnu-1663124776069)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月04日19时:40分:34秒)]

7.3.2、maven构建

步骤基本都是一致的 先生成对应的流水线语法 然后将其复制到Git Jenkinsfile文件中进行脚本替换即可

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-z3jtdOdF-1663124776069)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月04日19时:48分:16秒)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lnpEf2W7-1663124776069)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月04日19时:48分:36秒)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Lh3BVjDH-1663124776070)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月04日19时:49分:40秒)]

7.3.3、pipeline代码审查sonar

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zNN43GXn-1663124776070)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月04日19时:56分:24秒)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-F419FLLM-1663124776070)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月04日19时:56分:53秒)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NP8yB1H9-1663124776070)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月04日19时:57分:14秒)]

7.3.4、pipeline制作自定义Docker镜像

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HRRuJSHv-1663124776070)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月04日20时:01分:56秒)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-O4IbSo4i-1663124776070)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月04日20时:02分:16秒)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kpasGuoU-1663124776070)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月04日20时:02分:36秒)]

7.3.5、将pineline镜像推送到harbor私服

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FCJMKhYC-1663124776071)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月04日20时:17分:18秒)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DLgGhZ4m-1663124776071)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月04日20时:17分:43秒)]

7.3.6、通知目标服务器拉取镜像并启动

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WcVINlrx-1663124776071)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月04日20时:28分:49秒)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kRFHJVMv-1663124776071)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月04日20时:32分:25秒)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UiS5okP5-1663124776071)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月04日20时:34分:17秒)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KKnvGrtk-1663124776071)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月04日20时:33分:10秒)]

7.3.7、jenkins构建部署通知钉钉

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MdNa8edp-1663124776071)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月04日20时:37分:19秒)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wRgetxqv-1663124776072)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月04日20时:56分:29秒)]

7.3.8、测试流水线

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-T3ylTwxm-1663124776072)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月04日21时:07分:22秒)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VszqA7SQ-1663124776072)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月04日21时:09分:57秒)]

该小节相关脚本

pipeline {
    agent any

    environment {
         harborUser = 'admin'
         harborPasswd = 'admin'
         harborAddress = '10.21.90.111:8089'
         harborRepo = 'repo'
    }

    // 存放所有任务的合集
    stages {
        stage('拉取Git代码') {
            steps {
                checkout([$class: 'GitSCM', branches: [[name: '${tag}']], extensions: [], userRemoteConfigs: [[credentialsId: '715f601c-6bb5-41c3-9416-fc917a11d91e', url: 'http://124.70.156.177:30080/ChenYa/springboothelloworld.git']]])
            }
        }
        stage('maven构建') {
            steps {
                sh '/var/jenkins_home/tools/hudson.tasks.Maven_MavenInstallation/maven36/bin/mvn clean package -DskipTests'
            }
        }
        stage('检测代码质量') {
            steps {
                sh '/var/jenkins_home/sonar-scanner/bin/sonar-scanner -Dsonar.source=./  -Dsonar.projectname=${JOB_NAME} -Dsonar.projectKey=${JOB_NAME} -Dsonar.java.binaries=./target -Dsonar.login=b0a66f164cd150009d28b2ab4ee6be28ced5fcb8'
            }
        }
        stage('基于Dockerfile制作自定义镜像并发布') {
            steps {
                sh '''mv ./target/*.jar ./docker/
docker build -t  ${JOB_NAME}:${tag} ./docker/'''
            }
        }
        stage('将镜像推送到harbor') {
            steps {
                sh '''docker login -u ${harborUser}  -p ${harborPasswd} ${harborAddress}
docker tag  ${JOB_NAME}:${tag} ${harborAddress}/${harborRepo}/${JOB_NAME}:${tag} 
docker push  ${harborAddress}/${harborRepo}/${JOB_NAME}:${tag}'''
            }
        }

        stage('通过publish Over SSH通知目标服务器') {
            steps {
                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)])
            }
        }
    }
    post {
        success {
            dingtalk (
                robot: 'jenkins_DingDing',
                type:'MARKDOWN',
                title: "success: ${JOB_NAME}",
                text: ["- 成功构建:${JOB_NAME}项目!\n- 版本:${tag}\n- 持续时间:${currentBuild.durationString}\n- 任务:#${JOB_NAME}"]
            )
        }
        failure {
            dingtalk (
                robot: 'jenkins_DingDing',
                type:'MARKDOWN',
                title: "fail: ${JOB_NAME}",
                text: ["- 失败构建:${JOB_NAME}项目!\n- 版本:${tag}\n- 持续时间:${currentBuild.durationString}\n- 任务:#${JOB_NAME}"]
            )
        }
    }

}

8、搭建k8s集群平台

安装文档 版本为1.19

https://kuboard.cn/install/history-k8s/install-k8s-1.19.x.html

8.1、k8s的介绍

Kubernetes是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效(powerful),Kubernetes提供了应用部署,规划,更新,维护的一种机制。

Kubernetes一个核心的特点就是能够自主的管理容器来保证云平台中的容器按照用户的期望状态运行着,管理员可以加载一个微型服务,让规划器来找到合适的位置,同时,Kubernetes也系统提升工具以及人性化方面,让用户能够方便的部署自己的应用。

Kubernetes主要能帮助我们完成:

  • 服务发现和负载均衡

    Kubernetes 可以使用 DNS 名称或自己的 IP 地址公开容器,如果进入容器的流量很大, Kubernetes 可以负载均衡并分配网络流量,从而使部署稳定。

  • 存储编排

    Kubernetes 允许你自动挂载你选择的存储系统,比如本地存储,类似Docker的数据卷。

  • 自动部署和回滚

    你可以使用 Kubernetes 描述已部署容器的所需状态,它可以以受控的速率将实际状态 更改为期望状态。Kubernetes 会自动帮你根据情况部署创建新容器,并删除现有容器给新容器提供资源。

  • 自动完成装箱计算

    Kubernetes 允许你设置每个容器的资源,比如CPU和内存。

  • 自我修复

    Kubernetes 重新启动失败的容器、替换容器、杀死不响应用户定义的容器,并运行状况检查的容器。

  • 秘钥与配置管理

    Kubernetes 允许你存储和管理敏感信息,例如密码、OAuth 令牌和 ssh 密钥。你可以在不重建容器镜像的情况下部署和更新密钥和应用程序配置,也无需在堆栈配置中暴露密钥。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MgoBMsXS-1663124776072)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月04日21时:37分:42秒)]

8.2 Kubernetes架构

Kubernetes 搭建需要至少两个节点,一个Master负责管理,一个Slave搭建在工作服务器上负责分配。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uSGFwM29-1663124776072)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月04日21时:39分:04秒)]

从图中可以看到各个组件的基本功能:

  • API Server:作为K8s通讯的核心组件,K8s内部交互以及接收发送指令的组件。
  • controller-manager:作为K8s的核心组件,主要做资源调度,根据集群情况分配资源
  • etcd:一个key-value的数据库,存储存储集群的状态信息
  • scheduler:负责调度每个工作节点
  • cloud-controller-manager:负责调度其他云服务产品
  • kubelet:管理Pods上面的容器。
  • kube-proxy:负责处理其他Slave或客户端的请求。
  • Pod:可以理解为就是运行的容器

8.3、 Kubernetes安装

这里会采用https://kuboard.cn/提供的方式安装K8s,安装单Master节点

  • 要求使用Centos7.8版本:https://vault.centos.org/7.8.2003/isos/x86_64/CentOS-7-x86_64-Minimal-2003.iso
  • 至少2台 2核4G 的服务器

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GS5gZTMV-1663124776073)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月04日21时:40分:44秒)]

准备好服务器后开始安装

  • 重新设置hostname,不允许为localhost

    # 修改 hostname,名字不允许使用下划线、小数点、大写字母,不能叫master
    hostnamectl set-hostname your-new-host-name
    # 查看修改结果
    hostnamectl status
    # 设置 hostname 解析
    echo "127.0.0.1   $(hostname)" >> /etc/hosts
    
  • 要求2台服务之间可以相互通讯并且关闭防火墙

[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# systemctl disable firewalld
  • 安装软件

    # 阿里云 docker hub 镜像
    export REGISTRY_MIRROR=https://registry.cn-hangzhou.aliyuncs.com
    curl -sSL https://kuboard.cn/install-script/v1.19.x/install_kubelet.sh | sh -s 1.19.5
    

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EQH1wqvi-1663124776073)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月04日22时:07分:05秒)]

首先初始化Master节点

关于初始化时用到的环境变量

  • APISERVER_NAME 不能是 master 的 hostname
  • APISERVER_NAME 必须全为小写字母、数字、小数点,不能包含减号
  • POD_SUBNET 所使用的网段不能与 master节点/worker节点 所在的网段重叠。该字段的取值为一个 CIDR 值,如果您对 CIDR 这个概念还不熟悉,请仍然执行 export POD_SUBNET=10.100.0.0/16 命令,不做修改
  • 设置ip,域名,网段并执行初始化操作
# 只在 master 节点执行
# 替换 x.x.x.x 为 master 节点实际 IP(请使用内网 IP)
# export 命令只在当前 shell 会话中有效,开启新的 shell 窗口后,如果要继续安装过程,请重新执行此处的 export 命令
export MASTER_IP=10.21.90.113
# 替换 apiserver.demo 为 您想要的 dnsName
export APISERVER_NAME=apiserver.demo
# Kubernetes 容器组所在的网段,该网段安装完成后,由 kubernetes 创建,事先并不存在于您的物理网络中
export POD_SUBNET=10.100.0.1/16
echo "${MASTER_IP}    ${APISERVER_NAME}" >> /etc/hosts
curl -sSL https://kuboard.cn/install-script/v1.19.x/init_master.sh | sh -s 1.19.5

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DjulTNp5-1663124776073)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月04日22时:08分:58秒)]

  • 检查master状态
# 只在 master 节点执行

# 执行如下命令,等待 3-10 分钟,直到所有的容器组处于 Running 状态
watch kubectl get pod -n kube-system -o wide

# 查看 master 节点初h

kubectl get nodes -o wide

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0MqFg9Pu-1663124776073)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月04日22时:11分:23秒)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-K6byUWa9-1663124776073)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月04日22时:12分:01秒)]

Ps:如果出现NotReady的情况执行(最新版本的BUG,1.19一般没有)

docker pull quay.io/coreos/flannel:v0.10.0-amd64 
mkdir -p /etc/cni/net.d/
cat <<EOF> /etc/cni/net.d/10-flannel.conf
{"name":"cbr0","type":"flannel","delegate": {"isDefaultGateway": true}}
EOF
mkdir /usr/share/oci-umount/oci-umount.d -p
mkdir /run/flannel/
cat <<EOF> /run/flannel/subnet.env
FLANNEL_NETWORK=172.100.0.0/16
FLANNEL_SUBNET=172.100.1.0/24
FLANNEL_MTU=1450
FLANNEL_IPMASQ=true
EOF
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/v0.9.1/Documentation/kube-flannel.yml

安装网络服务插件

export POD_SUBNET=10.100.0.0/16
kubectl apply -f https://kuboard.cn/install-script/v1.22.x/calico-operator.yaml
wget https://kuboard.cn/install-script/v1.22.x/calico-custom-resources.yaml
sed -i "s#192.168.0.0/16#${POD_SUBNET}#" calico-custom-resources.yaml
kubectl apply -f calico-custom-resources.yaml

初始化worker节点

  • 获取Join命令参数,在Master节点执行
# 只在 master 节点执行
kubeadm token create --print-join-command
  • 在worker节点初始化
# 只在 worker 节点执行
# 替换 x.x.x.x 为 master 节点的内网 IP
export MASTER_IP=10.21.90.113
# 替换 apiserver.demo 为初始化 master 节点时所使用的 APISERVER_NAME
export APISERVER_NAME=apiserver.demo
echo "${MASTER_IP}    ${APISERVER_NAME}" >> /etc/hosts

# 替换为 master 节点上 kubeadm token create 命令的输出
kubeadm join apiserver.demo:6443 --token 8ydoon.82k0u0i59tfmfxz7     --discovery-token-ca-cert-hash sha256:74843341f86e51a94b12b7502d45019f56a989f0dbd059e2ac7ecd9fbfe18d53

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VTUJWq9X-1663124776073)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月04日22时:16分:02秒)]

  • 检查最终运行效果
# 只在 master 节点执行
kubectl get nodes -o wide

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-w5TmygTj-1663124776073)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月04日22时:16分:51秒)]

Ps:如果出现NotReady的情况执行(最新版本的BUG,1.19一般没有)

docker pull quay.io/coreos/flannel:v0.10.0-amd64 
mkdir -p /etc/cni/net.d/
cat <<EOF> /etc/cni/net.d/10-flannel.conf
{"name":"cbr0","type":"flannel","delegate": {"isDefaultGateway": true}}
EOF
mkdir /usr/share/oci-umount/oci-umount.d -p
mkdir /run/flannel/
cat <<EOF> /run/flannel/subnet.env
FLANNEL_NETWORK=172.100.0.0/16
FLANNEL_SUBNET=172.100.1.0/24
FLANNEL_MTU=1450
FLANNEL_IPMASQ=true
EOF
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/v0.9.1/Documentation/kube-flannel.yml
  • 输出结果如下所示:
[root@k8smaster ~]# kubectl get nodes

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SbJhK3oE-1663124776074)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月04日22时:18分:47秒)]

安装Kuboard管理K8s集群

  • 安装Kuboard
kubectl apply -f https://addons.kuboard.cn/kuboard/kuboard-v3.yaml
# 您也可以使用下面的指令,唯一的区别是,该指令使用华为云的镜像仓库替代 docker hub 分发 Kuboard 所需要的镜像
# kubectl apply -f https://addons.kuboard.cn/kuboard/kuboard-v3-swr.yaml
  • 查看启动情况
watch kubectl get pods -n kuboard

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9iSoGfWo-1663124776074)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月04日22时:25分:08秒)]

  • 在浏览器中打开链接 http://10.21.90.113:30080

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kd1FEsWc-1663124776074)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月04日22时:29分:14秒)]

8.4 Kubernetes操作

首先我们要了解Kubernetes在运行我们的资源时,关联到了哪些内容

  • 资源的构建方式:

    • 采用kubectl的命令方式
    • yaml文件方式
8.4.1 Namespace
  • 命名空间:主要是为了对Kubernetes中运行的资源进行过隔离, 但是网络是互通的,类似Docker的容器,可以将多个资源配置到一个NameSpace中。而NameSpace可以对不同环境进行资源隔离,默认情况下Kubernetes提供了default命名空间,在构建资源时,如果不指定资源,默认采用default资源。
    命令方式:

    # 查看现有的全部命名空间
    kubectl get ns
    
    # 构建命名空间
    kubectl create ns 命名空间名称
    
    # 删除现有命名空间, 并且会删除空间下的全部资源
    kubectl delete ns 命名空间名称
    

    yaml文件方式:(构建资源时,设置命名空间)

    apiVersion: v1
    kind: Namespace
    metadata:
      name: test
    
8.4.2 Pod
  • Pod:Kubernetes运行的一组容器,Pod是Kubernetes的最小单位,但是对于Docker而然,Pod中会运行多个Docker容器

    • 命令方式:

      # 查看所有运行的pod
      kubectl get pods -A
      
      # 查看指定Namespace下的Pod
      kubectl get pod [-n 命名空间]  #(默认default)
      
      # 创建Pod
      kubectl run pod名称 --image=镜像名称
      
      # 查看Pod详细信息
      kubectl describe pod pod名称
      
      # 删除pod
      kubectl delete pod pod名称 [-n 命名空间]  #(默认default)
      
      # 查看pod输出的日志
      kubectl logs -f pod名称
      
      # 进去pod容器内部
      kubectl exec -it pod名称 -- bash
      
      # 查看kubernetes给Pod分配的ip信息,并且通过ip和容器的端口,可以直接访问
      kubectl get pod -owide
      
    • yaml方式(推荐)

      apiVersion: v1
      kind: Pod
      metadata:
        labels:
          run: 运行的pod名称
        name: pod名称
        namespace: 命名空间
      spec:
        containers:
        - image: 镜像名称
          name: 容器名称
      
      # 启动Pod:kubectl apply -f yaml文件名称
      # 删除Pod:kubectl delete -f yaml文件名称
      
    • Pod中运行多个容器

      apiVersion: v1
      kind: Pod
      metadata:
        labels:
          run: 运行的pod名称
        name: pod名称
        namespace: 命名空间
      spec:
        containers:
        - image: 镜像名称
          name: 容器名称
        - image: 镜像名称
          name: 容器名称
      …………    
      

      启动后可以查看到

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AldJarUb-1663124776074)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月04日22时:54分:02秒)]

8.4.3 Deployment

部署时,可以通过Deployment管理和编排Pod

Deployment部署实现

  • 命令方式

    # 基于Deployment启动容器
    kubectl create deployment deployment名称 --image=镜像名称
    # 用deployment启动的容器会在被删除后自动再次创建,达到故障漂移的效果
    # 需要使用deploy的方式删除deploy
    # 查看现在的deployment
    kubectl get deployment
    
    # 删除deployment
    kubectl delete deployment deployment名称
    
    # 基于Deployment启动容器并设置Pod集群数
    kubectl create deployment deployment名称 --image=镜像名称 --replicas 集群个数
    
  • 配置文件方式

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx-deployment
      labels:
        app: nginx
    spec:
      replicas: 3
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
           image: nginx
           ports:
           - containerPort: 80
    

    正常使用kubectl运行yaml即可

弹性伸缩功能

# 基于scale实现弹性伸缩
kubectl scale deploy/Deployment名称 --replicas 集群个数
# 或者修改yaml文件
kubectl edit deploy Deployment名称

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3NHTPKeh-1663124776074)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月04日22时:57分:23秒)]

灰度发布

Deploy可以在部署新版本数

据时,成功启动一个pod,才会下线一个老版本的Pod

kubectl set image deployment/Deployment名称 容器名=镜像:版本
8.4.4 Service

可以将多个Pod对外暴露一个Service,让客户端可以通过Service访问到这一组Pod,并且可以实现负载均衡

ClusterIP方式:

ClusterIP是集群内部Pod之间的访问方式

  • 命令实现效果

    # 通过生成service映射一个Deployment下的所有pod中的某一个端口的容器
    kubectl expose deployment Deployment名称 --port=Service端口号 --target-port=Pod内容器端口
    
    kubectl expose  nginx-deployment --port=8888 --target-port=80 -n test
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fPtw2aRn-1663124776074)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月05日11时:41分:10秒)]

    之后通过kubectl get service查看Service提供的ip,即可访问

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lEPL5sNR-1663124776074)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月05日11时:41分:58秒)]

    也可以通过Deployment名称.namespace名称.svc作为域名访问

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qPQcjel6-1663124776075)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月04日22时:58分:25秒)]

NodePort方式

ClusterIP的方式只能在Pod内部实现访问,但是一般需要对外暴露网关,所以需要NodePort的方式Pod外暴露访问

  • 命令实现方式

    # 通过生成service映射一个Deployment下的所有pod中的某一个端口的容器
    kubectl expose deployment Deployment名称 --port=Service端口号 --target-port=Pod内容器端口 --type=NodePort
    

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-m37iKKxw-1663124776075)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月04日22时:59分:00秒)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JA0zzbeh-1663124776075)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月04日22时:59分:35秒)]

Service也可以通过yaml文件实现

apiVersion: v1
kind: Service
metadata:
  labels
    app: nginx
  name: nginx
  spec:
    selector:
      app: nginx
    ports:
    - port: 8888
     protocol: TCP
     targetPort: 80

通过apply启动就也可以创建Service

测试效果-Deployment部署,通过Service暴露

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx-deployment
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx-deployment
  template:
    metadata:
      labels:
        app: nginx-deployment
    spec:
      containers:
      - name: nginx-deployment
        image: nginx
        ports:
        - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  labels:
    app: nginx-service
  name: nginx-service
spec:
  selector:
    app: nginx-deployment
  ports:
  - port: 8888
    protocol: TCP
    targetPort: 80
  type: NodePort

可以查看到暴露的信息

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cwB9RHey-1663124776075)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月04日22时:59分:50秒)]

8.4.5 Ingress

Kubernetes推荐将Ingress作为所有Service的入口,提供统一的入口,避免多个服务之间需要记录大量的IP或者域名,毕竟IP可能改变,服务太多域名记录不方便。

Ingress底层其实就是一个Nginx, 可以在Kuboard上直接点击安装

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Q9BHWabN-1663124776075)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月04日23时:00分:16秒)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-US5KJYik-1663124776075)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月04日23时:01分:04秒)]

因为副本数默认为1,但是k8s整体集群就2个节点,所以显示下面即为安装成功

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-V0T1LwpW-1663124776075)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月04日23时:01分:18秒)]

可以将Ingress接收到的请求转发到不同的Service中。

推荐使用yaml文件方式

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: nginx-ingress
spec:
  ingressClassName: ingress
  rules:
  - host: nginx.mashibing.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: nginx-service
            port:
              number: 8888

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jQ9Qk5Zx-1663124776076)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月04日23时:01分:44秒)]

Kuboard安装的Ingress有admission的校验配置,需要先删除配置再启动

找到指定的ingress的校验信息,删除即可

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-X5nztV0J-1663124776076)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月04日23时:02分:06秒)]

# 查看校验webhook的配置
kubectl get -A ValidatingWebhookConfiguration

# 删除指定的校验
kubectl delete ValidatingWebhookConfiguration ingress-nginx-admission-my-ingress-controller

配置本地hosts文件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7yJttVED-1663124776076)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月04日23时:02分:38秒)]

记下来既可以访问在Service中暴露的Nginx信息

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-u1aEqP5J-1663124776076)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月04日23时:03分:15秒)]

8.5 Jenkins集成Kubernetes

8.5.1 准备部署的yml文件
apiVersion: apps/v1
kind: Deployment
metadata:
  namespace: test
  name: pipeline
  labels:
    app: pipeline
spec:
  replicas: 2
  selector:
    matchLabels:
      app: pipeline
  template:
    metadata:
      labels:
        app: pipeline
    spec:
      containers:
        - name: pipeline
          image: 10.21.90.111:8089/repo/pipeline:5.0.0
          imagePullPolicy: Always
          ports:
            - containerPort: 9091
---
apiVersion: v1
kind: Service
metadata:
  namespace: test
  labels:
    app: pipeline
  name: pipeline
spec:
  selector:
    app: pipeline
  ports:
    - port: 8081
      targetPort: 9091
  type: NodePort
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  namespace: test
  name: pipeline
spec:
  ingressClassName: ingress
  rules:
    - host: mashibing.pipeline.com
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: pipeline
                port:
                  number: 8081
8.5.2 Harbor私服配置

在尝试用kubernetes的yml文件启动pipeline服务时,会出现Kubernetes无法拉取镜像的问题,这里需要在kubernetes所在的Linux中配置Harbor服务信息,并且保证Kubernetes可以拉取Harbor上的镜像

  • 设置Master和Worker的私服地址信息

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-v2JVK4gW-1663124776076)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月05日15时:37分:59秒)]

  • 在Kuboard上设置私服密文信息

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZFMvBf5y-1663124776076)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月05日15时:39分:22秒)]

    按照复制指令的位置测试认证,效果如下

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NWT6XOzE-1663124776076)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月05日15时:40分:50秒)]

10.5.3 测试使用效果

执行kubectl命令,基于yml启动服务,并且基于部署后服务的提示信息以及Ingress的设置,直接访问

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-q9zRx998-1663124776077)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月04日23时:06分:35秒)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xXBuinNo-1663124776077)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月05日15时:41分:54秒)]

10.5.3 Jenkins远程调用
  • 将pipeline.yml配置到Gitlab中

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Rbphd34n-1663124776077)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月05日15时:43分:07秒)]

  • 配置Jenkins的目标服务器,可以将yml文件传输到K8s的Master上

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wfTA0qsr-1663124776077)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月05日15时:50分:27秒)]

  • 修改Jenkinsfile,重新设置流水线任务脚本,并测试效果

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-p55FWLRf-1663124776078)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月04日23时:11分:09秒)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pMEETSH4-1663124776078)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月04日23时:11分:34秒)]

  • 设置Jenkins无密码登录k8s-master

    将Jenkins中公钥信息复制到k8s-master的~/.ssh/authorized_keysz中,保证远程连接无密码

    进入到jenkins容器内部生成ssh

    ssh-keygen -t rsa
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-S1LRmjdK-1663124776079)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月05日16时:07分:14秒)]

    将上述的id_rsa.pub中的key复制到master主机的 ~.ssh/ 中的authorized_keys

  • 设置执行kubectl的脚本到Jenkinsfile

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-s3jdbEtZ-1663124776079)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月05日15时:58分:09秒)]

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dVK66rTo-1663124776079)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月05日15时:56分:51秒)]

  • 执行查看效果

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FrUaZ7ym-1663124776079)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月05日16时:00分:56秒)]

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VRXunLJz-1663124776079)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月05日16时:01分:30秒)]

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1wqBE64x-1663124776079)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月05日16时:02分:06秒)]

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aPQYtGML-1663124776079)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月05日16时:20分:33秒)]

    然后在流水线中配置执行pineline.yml的脚本

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zbwl9V04-1663124776080)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月05日16时:25分:09秒)]

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FNYEzlpl-1663124776080)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月05日16时:39分:20秒)]

    可以查看到yml文件是由变化的, 这样k8s就会重新加载

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZTAMXpxc-1663124776080)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月05日16时:40分:30秒)]

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aLSHvrup-1663124776080)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月05日16时:41分:28秒)]

  • 查看效果

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mcSMAzyr-1663124776080)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月05日16时:38分:16秒)]

Ps:这种方式更适应与CD操作,将项目将基于某个版本部署到指定的目标服务器

8.6、 基于GitLab的WebHooks

这里要实现自动化的一个CI操作,也就是开发人员Push代码到Git仓库后,Jenkins会自动的构建项目,将最新的提交点代码构建并进行打包部署,这里区别去上述的CD操作,CD操作需要基于某个版本进行部署,而这里每次都是将最新的提交点集成到主干上并测试。

8.6.1 WebHooks通知

首先在jenkins上安装这两个插件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sLU1DEzb-1663124776080)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月05日17时:01分:27秒)]

开启Jenkins的自动构建

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4KCJHnHQ-1663124776081)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月05日17时:03分:24秒)]

设置Gitlab的Webhooks

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-U1kFIVws-1663124776081)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月04日23时:14分:16秒)]

需要关闭Jenkins的Gitlab认证

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hiXU2NT7-1663124776081)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月04日23时:14分:42秒)]

再次测试Gitlab

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-70fXQ41w-1663124776081)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月04日23时:15分:01秒)]

8.6.2 修改配置

修改Jenkinsfile实现基于最新提交点实现持续集成效果,将之前引用${tag}的全部去掉

// 所有的脚本命令都放在pipeline中
pipeline{
	// 指定任务再哪个集群节点中执行
	agent any

	// 声明全局变量,方便后面使用
	environment {
		harborUser = 'admin'
        harborPasswd = 'Harbor12345'
        harborAddress = '192.168.11.102:80'
        harborRepo = 'repo'
	}

    stages {
        stage('拉取git仓库代码') {
            steps {
                checkout([$class: 'GitSCM', branches: [[name: '*/master']], extensions: [], userRemoteConfigs: [[url: 'http://192.168.11.101:8929/root/mytest.git']]])
            }
        }
        stage('通过maven构建项目') {
            steps {
                sh '/var/jenkins_home/maven/bin/mvn clean package -DskipTests'
            }
        }
        stage('通过SonarQube做代码质量检测') {
            steps {
                sh '/var/jenkins_home/sonar-scanner/bin/sonar-scanner -Dsonar.source=./ -Dsonar.projectname=${JOB_NAME} -Dsonar.projectKey=${JOB_NAME} -Dsonar.java.binaries=./target/ -Dsonar.login=40306ae8ea69a4792df2ceb4d9d25fe8a6ab1701'
            }
        }
        stage('通过Docker制作自定义镜像') {
            steps {
                sh '''mv ./target/*.jar ./docker/
                docker build -t ${JOB_NAME}:latest ./docker/'''
            }
        }
        stage('将自定义镜像推送到Harbor') {
            steps {
                sh '''docker login -u ${harborUser} -p ${harborPasswd} ${harborAddress}
                docker tag ${JOB_NAME}:latest  ${harborAddress}/${harborRepo}/${JOB_NAME}:latest
                docker push ${harborAddress}/${harborRepo}/${JOB_NAME}:latest '''
            }
        }
        stage('将yml文件传到k8s-master上') {
            steps {
                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)])
            }
        }
        stage('远程执行k8s-master的kubectl命令') {
            steps {
               sh '''ssh root@192.168.11.201 kubectl apply -f /usr/local/k8s/pipeline.yml
                ssh root@192.168.11.201 kubectl rollout restart deployment pipeline -n test'''
            }
        }

    }
    post {
        success {
            dingtalk(
                robot: 'Jenkins-DingDing',
                type: 'MARKDOWN',
                title: "success: ${JOB_NAME}",
                text: ["- 成功构建:${JOB_NAME}! \n- 版本:latest \n- 持续时间:${currentBuild.durationString}" ]
            )
        }
        failure {
            dingtalk(
                robot: 'Jenkins-DingDing',
                type: 'MARKDOWN',
                title: "success: ${JOB_NAME}",
                text: ["- 构建失败:${JOB_NAME}! \n- 版本:latest \n- 持续时间:${currentBuild.durationString}" ]
            )
        }
    }
}

修改pipeline.yml,更改镜像版本

apiVersion: apps/v1
kind: Deployment
metadata:
  namespace: test
  name: pipeline
  labels:
    app: pipeline
spec:
  replicas: 2
  selector:
    matchLabels:
      app: pipeline
  template:
    metadata:
      labels:
        app: pipeline    
    spec:
      containers:
      - name: pipeline
        image: 192.168.11.102:80/repo/pipeline:latest   # 这里
        imagePullPolicy: Always
        ports:
        - containerPort: 8080
# 省略其他内容…………
8.6.3 滚动更新

因为pipeline没有改变时,每次不会重新加载,这样会导致Pod中的容器不会动态更新,这里需要使用kubectl的rollout restart命令滚动更新

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cufNpdHd-1663124776081)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月04日23时:15分:29秒)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GXL97I8l-1663124776081)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月04日23时:15分:44秒)]

9、自动化测试环境部署

9.1、创建相关环境

  • 在linux环境上创建一个文件夹用来存放python环境相关包

命令mkdir python

  • 安装python运行环境,输入python3可进入编辑(python安装成功后在 usr/local/lib下)

参考链接:https://blog.csdn.net/qq_15821487/article/details/12221499

  • 安装基础的selenium包

    Python3.6后自带pip,可直接使用命令安装 python3 -m pip install selenium==3.141.0

  • 安装linux版本谷歌浏览器

    到官网下载rpm包上传到服务器里,在安装包路径下使用 yum localinstall 包名进行安装。yun localinstall能够自动解决安装依赖包问题。使用rpm -ivh <包名>可以进行安装,但是不能自动解决依赖包问题

    参考链接:https://blog.csdn.net/weixin_45777235/article/details/122711735

  • 安装linux版本谷歌驱动

    对应谷歌对应的浏览器驱动:

    将需要的浏览器驱动下载,上传到服务器上,使用mv chromedriver /usr/local/bin命令

    将驱动移动到该路径下 (如命令失败给文件加权限 chmod +777 local)

    参考链接:https://blog.csdn.net/weixin_43249866/article/details/125998386

  • 写脚本验证python搭建好,可以进行自动化脚本运行

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ViAvnktO-1663124776081)(https://cyymacbookpro.oss-cn-shanghai.aliyuncs.com/Macbookpro/2022年09月04日23时:20分:00秒)]

  • 配置测试报告,上传htmlTestRunner.py文件使用unittest+htmlTestRunner框架生成报告。邮件自动发送报告写在python脚本中

    发送邮件可参考:https://www.jb51.net/article/229831.htm

注意问题

1、 linux环境下路径”//”需要改成 ‘/’

2、安装软件需要切换到root用户下 su root

3、使用yum localinstall <包名>进行安装chrome,能够自动解决安装依赖包问题

4、python安装成果后在 usr/local/lib下

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

devops 的相关文章

随机推荐

  • java Excel文件上传 解析入库

    ApiOperation 上传文件 RequestMapping value uploadFile method RequestMethod POST public BusinessResult uploadFile RequestPara
  • 贪心算法之背包问题

    贪心算法之背包问题 背包问题是算法的经典问题 分为部分背包和0 1背包 主要区别如下 部分背包 某件物品是一堆 可以带走其一部分 0 1背包 对于某件物品 要么被带走 选择了它 要么不被带走 没有选择它 不存在只带走一部分的情况 部分背包问
  • Linux下的命令学习--dd命令

    Linux dd 命令用于读取 转换并输出数据 dd 可从标准输入或文件中读取数据 根据指定的格式来转换数据 再输出到文件 设备或标准输出 使用方法 dd if xx of xx bs xx count xx skip xx seek xx
  • AcWing 482. 合唱队形

    N位同学站成一排 音乐老师要请其中的 N K 位同学出列 使得剩下的K位同学排成合唱队形 合唱队形是指这样的一种队形 设K位同学从左到右依次编号为1 2 K 他们的身高分别为T1 T2 TKT1 T2 TK 则他们的身高满足T1 lt
  • c语言中e的n次方怎么打,C语言中N次方怎么打

    满意答案 lawq0364t 2020 05 11 采纳率 52 等级 7 已帮助 2761人 有两个函数可以实现 double pow double x double y double pow10 int p 下面是这两个函数的使用方法
  • Codeium的使用

    官网 CodeiumCodeium offers best in class AI code completion search all for free It supports over 40 languages and integrat
  • 连续型随机变量密度函数与累积密度函数

    1 连续性随机变量的概率密度函数 注意 f x 是非负的可积函数 以及在负无穷到正无穷区间内的累积概率为1 累积概率的取值区间是从负无穷到正无穷 但是概率密度函数的取值并不是从负无穷到正无穷 尤其是在实际问题中 比如说报童模型中的报纸订购量
  • Python异常值预警

    coding utf 8 基于3sigma的异常值检测 import numpy as np import pandas as pd import matplotlib pyplot as plt 导入绘图库 n 3 n sigma cat
  • Hive---分区表和分桶表

    分区表和分桶表区别如下 1 分区使用的是表外字段 需要指定字段类型 分桶使用的是表内字段 已经知道字段类型 不需要再指定 2 分区通过关键字partitioned by partition name string 声明 分桶表通过关键字cl
  • 「硬见小百科」10分钟详细图解MOS管的结构原理

    什么是MOS管 MOS管是金属 metal 氧化物 oxide 半导体 semiconductor 场效应晶体管 或者称是金属 绝缘体 insulator 半导体 MOS管的source和drain是可以对调的 他们都是在P型backgat
  • AndroidSweetSheet类库的使用

    普通的弹框多以dialog的形式弹出 这个类库是以布局的形式弹出来的 以下是作者的源类库中的包定义 SweetSheet class 代码中主要使用的类 在初始化时候需要传入依附的父布局 以后弹出的view就是要加入到这个view中的 Sw
  • 微信小程序wx.getLocation()报错以及解决方法

    问题介绍 使用wx getLocation 来获取当前地理位置的经纬度 主要代码如下 wx getLocation success function res 经度 let lat res longitude 纬度 let lng res l
  • RK3568 GPIO 按键事件响应

    目录 adb shell getevent查看事件 设备树添加事件驱动 cat查看事件详细内容 author daisy skye的博客 CSDN博客 嵌入式 Qt Linux领域博主 adb shell getevent查看事件 130
  • 【Java基础】计算机程序语言发展史

    程序语言发展史 第一代 机器语言 指令以二进制代码形式存在 第二代 汇编语言 使用助记符表示一条机器指令 第三代 高级语言 C Pascal Fortran等面向过程的语言 C 面向过程 面向对象 Java 跨平台的纯面向对象的语言 NET
  • nginx配置文件之“location ~ .*\. (js

    nginx里面的location配置语法 location url 选项参数匹配 表示精准匹配 表示uri以某个常规字符串开头 理解为匹配 url路径即可 nginx不对url做编码 因此请求为 static 20 aa 可以被规则 sta
  • Proteus仿真STM32的课设实例4——stm32简易测频率

    本教程是基于STM32的嵌入式仿真大作业 源文件链接 https pan baidu com s 1fU4isp7UXTtUFHwpt76zzw pwd 9x7t 提取码 9x7t 使用 Proteus 仿真32单片机 实现了可以测量正弦波
  • 不想dto套dto可以这样写

    之前都是要新建个dto文件的 偶然看到别人这样写 简单记录一下 Data public class GdtDailyBalanceContent List
  • 编程教育是孩子计算机启蒙的好伙伴

    网络上关于 少儿编程 的利好资讯铺天盖地 印证着这一行业的欣欣向荣 国际上 很多发达国家早已把编程教育纳入小学课程表 重视儿童学习编程成为教育的主流 格物斯坦小坦克认为 由此看来从小就培养孩子学习编程 真的有必要 其实 大多数家长对编程可能
  • 没有公网IP,怎么实现外网访问内网视频监控

    以海康威视监控为例 先在内网部署好监控系统 通过本地浏览器输入监控设备管理地址 登录管理后台 在管理后台可成功查看摄像头视频画面即内网监控系统搭建成功 找到配置界面查看设备端口信息 记下HTTP访问端口80 默认网址访问端口 及服务数据传输
  • devops

    1 环境准备 使用的虚拟机环境centos7 8 Jenkins 10 21 90 111 k8sMaster 10 21 90 113 k8sNode 10 21 90 114 同步主机时区为亚洲 并同步时间 root linux nod