DevOps持续集成-Jenkins(3)

文章目录

    • DevOps
      • DevOps概述
      • Jenkins实战3:实战1和实战2的加强版(新增SonarQube和Harbor)⭐
        • 环境准备⭐
        • 项目架构图
        • 对比Jenkins实战1和实战2,新增内容有哪些?
        • SonarQube教程
          • 采用Docker安装SonarQube (在Jenkins所在的服务器上安装)⭐
          • 访问SonarQube可视化界面⭐
          • 首次登陆SonarQube需要修改密码
          • 安装SonarQube中文插件 ⭐
          • SonarQube的简单使用⭐
            • 下载sonar-scanner(并上传到Jenkins所在的服务器上)
            • 安装sonar-scanner
            • SonarQube案例1:使用sonar-scanner进行代码质量检测⭐
          • Jenkins整合SonarQube进行代码质量检测⭐
            • 在Jenkins下载SonarQube Scanner插件⭐
            • 在Jenkins配置SonarQube(系统配置)⭐
            • 在Jenkins配置SonarQube(全局配置)⭐
            • 架构图第4步案例:给Jenkins的mytest任务配置SonarQube自动进行代码质量检测(重点⭐)
        • Harbor v2.4.2教程
          • 下载安装Harbor⭐
          • 访问Harbor⭐
          • 创建一个新的Harbor项目
          • 将本地镜像mytest推送到Harbor仓库中⭐
            • 修改daemon.json文件(添加insecure-registries配置⭐)
            • 给mytest镜像改名,使其可以push到Harbor镜像仓库中⭐
            • 开始推送到Harbor仓库⭐
          • 测试拉取Harbor镜像
          • Jenkins整合Harbor⭐
            • 让Jenkins容器内部可以使用Docker⭐
            • 架构图第5步案例:Jenkins制作自定义镜像并上传到Harbor⭐
            • 架构图第6-7步案例:通知目标服务器可以从Harbor上拉取镜像,并运行容器⭐

DevOps

DevOps概述

软件开发最初是由两个团队共同组成:(没有采用DevOps之前)

  • 开发团队:从头开始设计和整体系统的构建(编写代码)。需要系统不停的迭代更新。
  • 运维团队:将开发团队的代码进行测试通过后再部署上线。确保系统稳定运行。

没有采用DevOps的缺点:

  • 这看似两个目标不同的团队需要协同完成一个软件的开发。在开发团队指定好计划并完成编写代码后,需要把代码交给运维团队。运维团队向开发团队反馈需要修复的BUG以及一些需要返工的任务。这时开发团队需要经常等待运维团队的反馈。这无疑会延长整个软件开发的周期。

采用DevOps的优点?

  • DevOps的方式可以让公司能够更快地应对更新和市场发展变化,开发可以快速交付,部署也更加稳定。核心就在于简化Dev和Ops团队之间的流程,使整体软件开发过程更快速。说白了就是DevOps有利于快速完成项目,不会浪费时间)

整体的软件开发流程:

  • PLAN:开发团队根据客户的目标制定开发计划
  • CODE:根据PLAN开始编码过程,需要将不同版本的代码存储在一个库中。
  • BUILD:编码完成后,需要将代码构建并且运行。
  • TEST:成功构建项目后,需要测试代码是否存在BUG或错误。
  • DEPLOY:代码经过手动测试和自动化测试后,认定代码已经准备好部署并且交给运维团队。
  • OPERATE:运维团队将代码部署到生产环境中。
  • MONITOR:项目部署上线后,需要持续的监控产品。
  • INTEGRATE:然后将监控阶段收到的反馈发送回PLAN阶段,整体反复的流程就是DevOps的核心即持续集成、持续部署。

为了保证整体流程可以高效的完成,各个阶段都有比较常见的工具,如下图:

Jenkins实战3:实战1和实战2的加强版(新增SonarQube和Harbor)⭐

环境准备⭐
  • 该Jenkins实战3建立在完成Jenkins实战1和Jenkins实战2的内容的基础上!
项目架构图

在这里插入图片描述

对比Jenkins实战1和实战2,新增内容有哪些?
  • 新增内容有如下:
    • 1:Jenkins整合SonarQube实现代码质量检测。
    • 2:将Jenkins制作好的镜像推送到Harbor仓库。
SonarQube教程

在这里插入图片描述

采用Docker安装SonarQube (在Jenkins所在的服务器上安装)⭐

注意:由于新版的SonarQube不再支持MySQL,而是支持PostgreSQL。那么安装SonarQube时需要先安装PostgreSQL。

  • 1:安装Postgres数据库:
docker pull postgres
  • 2:安装SonarQube:(版本是8.9.9社区版)
docker pull sonarqube:8.9.9-community
  • 3:新建sonarqube目录:
mkdir -p /usr/local/docker/sonarqube_docker
  • 4:跳转到sonarqube目录:
cd /usr/local/docker/sonarqube_docker
  • 5:编写sonarqube的docker-compose文件:
vi docker-compose.yml

内容如下:

version: "3.1"
services:db:image: postgrescontainer_name: dbports:- 5432:5432networks:- sonarnetenvironment:POSTGRES_USER: sonarPOSTGRES_PASSWORD: sonarsonarqube:image: sonarqube:8.9.9-communitycontainer_name: sonarqubedepends_on:- dbports:- "9000:9000"networks:- sonarnetenvironment:SONAR_JDBC_URL: jdbc:postgresql://db:5432/sonarSONAR_JDBC_USERNAME: sonarSONAR_JDBC_PASSWORD: sonar
networks:sonarnet:driver: bridge
  • 6:修改/etc/sysctl.conf文件:
vi /etc/sysctl.conf

在该配置文件中,添加下面的内容:(直接复制下面的内容到配置文件中,保存退出即可!)

vm.max_map_count=262144
  • 7:让刚刚修改的配置生效:
[root@centos7-jenkins sonarqube_docker]# sysctl -p
vm.max_map_count = 262144
  • 8:执行docker-compose文件:
docker-compose up -d
访问SonarQube可视化界面⭐
  • 访问地址:sonarqube的ip+9000端口。

  • SonarQube的账号和密码都是admin !

在这里插入图片描述

首次登陆SonarQube需要修改密码
  • 我的SonarQube密码修改成admin123456

在这里插入图片描述

安装SonarQube中文插件 ⭐

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

SonarQube的简单使用⭐
下载sonar-scanner(并上传到Jenkins所在的服务器上)

sonar-scanner官网下载地址

在这里插入图片描述

  • 查看sonar-scanner-cli是否上传成功:
[root@centos7-jenkins ~]# ls
apache-maven-3.8.6-bin.tar.gz  jenkins anaconda-ks.cfg  jdk-8u333-linux-x64.tar.gz     sonar-scanner-cli-4.6.2.2472-linux.zip
安装sonar-scanner
  • 1:由于sonar-scanner-cli是zip格式的压缩文件,而Linux下载解压这种格式文件需要安装一个工具:
yum -y install unzip
  • 2:使用unzip解压刚刚上传的sonar-scanner包:
    • 注意:我们下载的sonar-scanner名字可能会不一样,所以这里需要更改!!
unzip sonar-scanner-cli-4.6.2.2472-linux.zip
  • 3:修改sonar-scanner解压出来的文件夹名字:
mv sonar-scanner-4.6.2.2472-linux sonar-scanner
SonarQube案例1:使用sonar-scanner进行代码质量检测⭐
  • 1:跳转Jenkins宿主机数据卷目录:
[root@centos7-jenkins ~]# cd /usr/local/docker/jenkins_docker/data
  • 2:把解压出来的sonar-scanner目录移动到Jenkins宿主机数据卷目录中:
[root@centos7-jenkins data]# mv /root/sonar-scanner ./
  • 3:在Jenkins宿主机数据卷目录下执行下面命令,修改sonar-scanner配置:
[root@centos7-jenkins data]# vi sonar-scanner/conf/sonar-scanner.properties

在这里插入图片描述

我们的配置文件内容如下:(记得下面的ip 192.168.184.80要换成你SonarQube的IP。)

#Configure here general information about the environment, such as SonarQube server connection details for example
#No information about specific project should appear here#----- Default SonarQube server
sonar.host.url=http://192.168.184.80:9000#----- Default source code encoding
sonar.sourceEncoding=UTF-8
  • 4:查看sonar-scanner工具:(所在位置为Jenkins宿主机数据卷的sonar-scanner文件夹中的bin目录下):
    • 跳转到sonar-scanner工具目录下:
[root@centos7-jenkins ~]# cd /usr/local/docker/jenkins_docker/data/sonar-scanner/bin/

可以看到下面的sonar-scanner就是我们需要的代码质量检测工具:

[root@centos7-jenkins bin]# ls
sonar-scanner  sonar-scanner-debug
  • 5:跳转到我们的Jenkins从gitlab上拉取的mytest项目目录中(该gitlab上的项目也就是我们创建的名为mytest的项目):
    • Jenkins的项目目录也就是在/usr/local/docker/jenkins_docker/data/workspace下。
[root@centos7-jenkins ~]# cd /usr/local/docker/jenkins_docker/data/workspace/mytest
  • 6:获取SonarQube的Token:
    • 可以看到我们生成的token是:fa58b2f8903333918bfa22cf0bc07f3ac0e92435

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

  • 7:查看当前所在目录:
[root@centos7-jenkins mytest]# pwd
/usr/local/docker/jenkins_docker/data/workspace/mytest
  • 8:利用sonar-scanner工具对Jenkins拉取的gitlab项目名为“mytest”的项目进行代码质量检测:⭐
    • /usr/local/docker/jenkins_docker/data/sonar-scanner/bin/sonar-scanner:上面所说的sonar-scanner工具所在的路径。(如果前面按照我们这样配置,则不需要更改!)
    • -Dsonar.source=./ :需要检测的代码所在的目录(由于上面我们已经切换到代码所在目录中,所在只需要指定./即可,如果前面按照我们这样操作,则不需要更改!)
    • -Dsonar.projectname=linux-mytest:随便指定一个名称作为sonar-scanner的项目名。
    • -Dsonar.login=fa58b2f8903333918bfa22cf0bc07f3ac0e92435:把刚刚复制的token粘贴上去(需要根据自己生成的token进行更改⭐)
    • -Dsonar.projectKey=linux-mytest :随便指定一个名称。
    • -Dsonar.java.binaries=./target/ :指定我们gitlab上的项目生成的二进制文件(也就是class类文件)所在目录,说白了也就是指定gitlab上的项目的target文件夹路径。
[root@centos7-jenkins mytest]# /usr/local/docker/jenkins_docker/data/sonar-scanner/bin/sonar-scanner -Dsonar.source=./ -Dsonar.projectname=linux-mytest -Dsonar.login=fa58b2f8903333918bfa22cf0bc07f3ac0e92435 -Dsonar.projectKey=linux-mytest -Dsonar.java.binaries=./target/

在这里插入图片描述

Jenkins整合SonarQube进行代码质量检测⭐
在Jenkins下载SonarQube Scanner插件⭐

在这里插入图片描述

在Jenkins配置SonarQube(系统配置)⭐

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

在Jenkins配置SonarQube(全局配置)⭐
  • 配置提示:
    • 1:SONAR_RUNNER_HOME的值:/var/jenkins_home/sonar-scanner

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

架构图第4步案例:给Jenkins的mytest任务配置SonarQube自动进行代码质量检测(重点⭐)
  • 配置提示:

    • Execute SonarQube Scanner下面的Analysis properties配置:
    sonar.projectname=${JOB_NAME}
    sonar.projectKey=${JOB_NAME}
    sonar.source=./
    sonar.java.binaries=target
    
  • 1:由于我们刚刚案例执行过了一次,所以要在Jenkins宿主机上先删除一个目录:

[root@centos7-jenkins ~]# rm -rf /usr/local/docker/jenkins_docker/data/workspace/mytest/.scannerwork/
  • 2:开始配置:

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

  • 3:测试构建(可以看到我们的SonarQube已经整合到Jenkins中了):

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

Harbor v2.4.2教程
下载安装Harbor⭐
  • 1:先下载好Harbor,然后通过xftp传到服务器上(这里我们还是放在Jenkins所在的服务器上,节约成本):

Harbor v2.4.2下载链接

  • 2:查看是否上传成功:(可以看到上传成功了)
[root@centos7-jenkins ~]# ls | grep harbor
harbor-offline-installer-v2.4.2.tgz
  • 3:将Harbor解压到/usr/local下:
tar -zxvf harbor-offline-installer-v2.4.2.tgz -C /usr/local
cd /usr/local/harbor/
  • 4:将harbor.yaml的模板文件复制一份:
    • Harbor启动时只会加载harbor.yml,而不会加载harbor.yml.tmpl
cp harbor.yml.tmpl harbor.yml
  • 5:修改harbor.yml:
vim harbor.yml

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

  • 6:执行Harbor的install脚本文件:(在这之前必须要安装了Docker和Docker Compose。)
    • 当前所在的路径:
[root@centos7-jenkins harbor]# pwd
/usr/local/harbor

开始执行:(然后会加载一大堆的东西,需要等一下)

[root@centos7-jenkins harbor]# ./install.sh
访问Harbor⭐
  • 访问链接:
    • harbor的ip地址:80端口

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

创建一个新的Harbor项目

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

将本地镜像mytest推送到Harbor仓库中⭐
  • 如何将本地镜像推送到Harbor仓库中,最重要的一点就是要将镜像进行改名,格式如下:(只有这样格式的镜像才能够被push到Harbor仓库)
    • 格式为:Harbor地址/Harbor项目名/镜像名:版本
修改daemon.json文件(添加insecure-registries配置⭐)
  • 1:进入编辑器:
vi /etc/docker/daemon.json

内容如下:

  • 只添加insecure-registries配置,对应的值为你当前的Harbor地址!!
{"registry-mirrors": ["https://u01jo9qv.mirror.aliyuncs.com","https://hub-mirror.c.163.com","https://mirror.baidubce.com"],"insecure-registries": ["192.168.184.80:80"]   
}
  • 2:重启Docker服务:
systemctl restart docker
给mytest镜像改名,使其可以push到Harbor镜像仓库中⭐
  • 1:改名之前,先查看一下mytest镜像:
[root@centos7-jenkins harbor]# docker images
REPOSITORY                      TAG               IMAGE ID       CREATED        SIZE
mytest                          v1.0.0            fc62ecfe296d   10 hours ago   661MB
  • 2:给mytest镜像进行改名:(注意:下面的镜像的IP地址一定要改成你当前Harbor的地址)
    • mytest:v1.0.0:旧镜像名称
    • 192.168.184.80:80/repo/mytest:v1.0.0:新镜像名称
docker tag mytest:v1.0.0 192.168.184.80:80/repo/mytest:v1.0.0
  • 3:再次查看mytest镜像:(可以看到旧镜像和新镜像的IMAGE ID都是一样的,可以说明这两个其实就是同一个镜像。只是名字不同罢了)
[root@centos7-jenkins harbor]# docker images
REPOSITORY                      TAG               IMAGE ID       CREATED        SIZE
mytest                          v1.0.0            fc62ecfe296d   11 hours ago   661MB
192.168.184.80:80/repo/mytest   v1.0.0            fc62ecfe296d   11 hours ago   661MB
开始推送到Harbor仓库⭐
  • 1:首先Docker要先登录Harbor仓库:(docker login):
    • 格式为:docker login -u 用户名 -p 密码 Harbor地址
    • 注意:我们Harbor默认的账号是admin,密码是Harbor12345,所以我们可以用这个账号密码去登录
    • 还有下面的Harbor地址别忘了改成你自己的Harbor地址。
docker login -u admin -p Harbor12345 192.168.184.80:80
  • 2:开始push:
[root@centos7-jenkins harbor]# docker push 192.168.184.80:80/repo/mytest:v1.0.0
The push refers to repository [192.168.184.80:80/repo/mytest]
5f70bf18a086: Pushed 
34589845b783: Pushed 
35c20f26d188: Pushed 
c3fe59dd9556: Pushed 
6ed1a81ba5b6: Pushed 
a3483ce177ce: Pushed 
ce6c8756685b: Pushed 
30339f20ced0: Pushed 
0eb22bfb707d: Pushed 
a2ae92ffcd29: Pushed 
v1.0.0: digest: sha256:b9504aee3cc90755bb237d9f91795b75f816558330657ffae4fd3ff92fdaee7d size: 2418
  • 3:查看是否成功Push到Harbor仓库:

在这里插入图片描述

测试拉取Harbor镜像
  • 1:先删除原来的mytest镜像:
[root@centos7-jenkins harbor]# docker images 
REPOSITORY                      TAG               IMAGE ID       CREATED        SIZE
192.168.184.80:80/repo/mytest   v1.0.0            fc62ecfe296d   25 hours ago   661MB
mytest                          v1.0.0            fc62ecfe296d   25 hours ago   661MB
[root@centos7-jenkins harbor]# docker rmi -f fc62ecfe296d
Untagged: 192.168.184.80:80/repo/mytest:v1.0.0
Untagged: 192.168.184.80:80/repo/mytest@sha256:b9504aee3cc90755bb237d9f91795b75f816558330657ffae4fd3ff92fdaee7d
Untagged: mytest:v1.0.0
Deleted: sha256:fc62ecfe296d996c03ac5ef9a0c073f5772aacf382e7f8215d18052d18707982
  • 2:拉取刚刚上传到Harbor仓库的mytest镜像:(注意:这个Harbor镜像被我们设置为公开类型,如果不是公开类型,则不能这样拉取!)
    • 80端口别忘了写。
[root@centos7-jenkins harbor]# docker pull 192.168.184.80:80/repo/mytest:v1.0.0
v1.0.0: Pulling from repo/mytest
7448db3b31eb: Already exists 
c36604fa7939: Already exists 
29e8ef0e3340: Already exists 
a0c934d2565d: Already exists 
a360a17c9cab: Already exists 
cfcc996af805: Already exists 
2cf014724202: Already exists 
4bc402a00dfe: Already exists 
bce9a3522658: Already exists 
4f4fb700ef54: Already exists 
Digest: sha256:b9504aee3cc90755bb237d9f91795b75f816558330657ffae4fd3ff92fdaee7d
Status: Downloaded newer image for 192.168.184.80:80/repo/mytest:v1.0.0
192.168.184.80:80/repo/mytest:v1.0.0
Jenkins整合Harbor⭐
让Jenkins容器内部可以使用Docker⭐

默认情况下,Jenkins容器内部是使用不了Docker的,我们这次就是为了解决这种情况。

解决方法有两个:(我们使用的是第二种)

第一种:在Jenkins容器内部安装一个Docker。(缺点是会占用很多的资源,浪费容器空间,不推荐使用)。

第二种:Jenkins容器内部使用宿主机的Docker,也就是说Jenkins容器和宿主机共同使用同一个Docker。(推荐!)

  • 1:切换目录到/var/run/:
[root@centos7-jenkins harbor]# cd /var/run/
  • 2:修改docker.sock文件的所属组:
[root@centos7-jenkins run]# chown root:root docker.sock
  • 3:修改docker.sock文件的权限:
[root@centos7-jenkins run]# chmod o+rw docker.sock
  • 4:切换到Jenkins的docker-compose.yml文件的所在目录上:
[root@centos7-jenkins ~]# cd /root/jenkins/
  • 5:如果启动了Jenkins的docker-compose文件,则执行下面的down命令:
[root@centos7-jenkins jenkins]# docker-compose down
  • 6:删除这个docker-compose文件:
[root@centos7-jenkins jenkins]# rm -rf docker-compose.yml
  • 7:重新编辑Jenkins的docker-compose.yml文件:(其实就是在原来的Jenkins的docker-compose文件多添加了一些volume罢了,所以干脆删除了重新编辑。)
[root@centos7-jenkins jenkins]# vi docker-compose.yml

新文件内容如下:

version: "3.1"
services:jenkins:image: jenkins/jenkins:2.359container_name: jenkinsports:- 9200:8080- 50000:50000volumes:- /usr/local/docker/jenkins_docker/data/:/var/jenkins_home/- /var/run/docker.sock:/var/run/docker.sock- /usr/bin/docker:/usr/bin/docker- /etc/docker/daemon.json:/etc/docker/daemon.json
  • 8:启动Jenkins的docker-compose:
docker-compose up -d
  • 9:进入Jenkins容器内部,测试现在是否可以使用Docker:(现在我们的Jenkins容器就可以使用Docker了)
[root@centos7-jenkins jenkins]# docker exec -it jenkins bash
[root@centos7-jenkins jenkins容器]# docker version
架构图第5步案例:Jenkins制作自定义镜像并上传到Harbor⭐
  • 1:修改我们的springboot项目:

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

  • 2:配置Jenkins:

    • 提示,Execute shell的内容:
      • 修改点1:下面的IP地址要改成你的Harbor的IP地址。
      • 修改点2:harbor账号密码要是和我的不一样则也需要更改。
    mv target/*.jar docker/
    docker build -t mytest:$tag docker/
    docker login -u admin -p Harbor12345 192.168.184.80:80
    docker tag mytest:$tag 192.168.184.80:80/repo/mytest:$tag
    docker push 192.168.184.80:80/repo/mytest:$tag
    

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

架构图第6-7步案例:通知目标服务器可以从Harbor上拉取镜像,并运行容器⭐
  • 1:在所有目标服务器上都放一份shell脚本文件:(原理是:Jenkins通知目标服务器去执行shell脚本文件,从而让目标服务器在Harbor上面拉取指定镜像。)
    • 原来的架构图上是把Dockerfile传到目标服务器,让目标服务器通过docker build构建镜像(缺点是当目标服务器有多台,那每一台目标服务器都需要build构建一次,n台服务器就是n次,这样十分浪费服务器资源)。
    • 现在的架构图是把镜像在Jenkins容器内构建,然后把镜像push到Harbor上,Jenkins通知所有目标服务器(不管有多少台),然后目标服务器就会执行下面的shell脚本,会从Harbor拉取指定镜像,这样一来,不管有多少台目标服务器都只是build构建一次,节省了很多资源。
vi /root/deploy.sh

内容如下:

harbor_addr=$1
harbor_repo=$2
project=$3
version=$4
host_port=$5
container_port=$6imageName=$harbor_addr/$harbor_repo/$project:$versioncontainerId=`docker ps -a | grep ${project} | awk '{print $1}'`
if [ "$containerId" != "" ] ; thendocker stop $containerIddocker rm $containerId
fitag=`docker images | grep ${project} | awk '{print $2}'`if [[ "$tag" =~ "$version" ]] ; thendocker rmi -f $imageName
fidocker login -u admin -p Harbor12345 $harbor_addrdocker pull $imageNamedocker run -d -p $host_port:$container_port --name $project $imageNameecho "SUCCESS"
  • 2:给deploy.sh权限:
chmod a+x /root/deploy.sh
  • 3:测试运行deploy.sh:(要更改对应的值)
    • shell脚本参数传值解释:
      • 配置文件的$1为:192.168.184.80:80 (harbor_addr。harbor的地址)
      • 配置文件的$2为:repo(harbor_repo。harbor的项目名)
      • 配置文件的$3为:mytest(project。拉取的镜像名)
      • 配置文件的$4为:v3.0.0(version。拉取的镜像版本)
      • 配置文件的$5为:8082(host_port。宿主机端口)
      • 配置文件的$6为:8082(container_port。容器的端口)
cd /root
[root@centos7-jenkins ~]# ./deploy.sh 192.168.184.80:80 repo mytest v3.0.0 8082 8082
3fd32cbb9557
3fd32cbb9557
Untagged: 192.168.184.80:80/repo/mytest:v3.0.0
Untagged: 192.168.184.80:80/repo/mytest@sha256:bd9556efbf06af2fba04b482e318111266a725cc2b10edf215e1190874df06b3
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-storeLogin Succeeded
v3.0.0: Pulling from repo/mytest
Digest: sha256:bd9556efbf06af2fba04b482e318111266a725cc2b10edf215e1190874df06b3
Status: Downloaded newer image for 192.168.184.80:80/repo/mytest:v3.0.0
192.168.184.80:80/repo/mytest:v3.0.0
2f73780159ee473a62e0d9e43874c8abcc7e173ac23ee0adfe162c442187e0f4
SUCCESS
  • 4:查看项目镜像容器是否启动:
[root@centos7-jenkins ~]# docker ps | grep mytest
3fd32cbb9557   192.168.184.80:80/repo/mytest:v3.0.0   "/bin/sh -c 'java -j…"   38 seconds ago   Up 37 seconds          0.0.0.0:8082->8082/tcp, :::8082->8082/tcp                                                  mytest
  • 5:测试访问项目:

在这里插入图片描述

  • 6:把所有目标服务器的deploy.sh都放到/usr/bin下:
[root@centos7-jenkins ~]# mv /root/deploy.sh /usr/bin/
  • 7:配置两个端口的字符串参数(宿主机端口和容器端口):

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

  • 8:配置Jenkins构建后操作:

    • 提示:

      • Exec command的内容:
      deploy.sh 192.168.184.80:80 repo ${JOB_NAME} $tag $host_port $container_port
      

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

  • 9:测试构建:
    在这里插入图片描述
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/118729.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux-防火墙

目录 一、防火墙概念 1.软件防火墙 2.iptables默认规则 3.iptables的五链 4.iptables动作 5.四表五链 6.iptables实例 一、防火墙概念 linux下防火墙一般分为软件防火墙、硬件防火墙 硬件防火墙:在硬件的级别实现防火墙过滤功能,性能高&#xf…

centos服务器搭建安装Gitlab教程使用教程

1、更新服务器: sudo yum update -y && sudo yum upgrade -y 2、下载Gitlab的RPM包 https://packages.gitlab.com/gitlab/gitlab-cece表示开源el表示centos 选64位el8对应CentOS8 本教程以centos8为例,在服务器中,下载centos8的…

基于Android 10系统的瑞芯微RK3399K烧写镜像实录

基于Android 10系统的瑞芯微RK3399K烧写镜像实录 1. 前言2. 官网及相关资料3. 烧写固件所需软件4. 直接烧写单一固件步骤5. 固件文件6. Windows下烧写准备6.1 安装 RK USB 驱动6.2 连接设备 7. 烧写固件7.1 烧写统一固件 update.img7.2 烧写分区映像 8. Linux下烧写8.1 upgrade…

STM32 HAL库串口使用printf

STM32 HAL库串口使用printf 背景配置说明在usart.h中添加在usart.c中添加在工程中选中微库: 测试 背景 在我们使用CubeMX生成好STM32 HAL库工程之后,我们想使用printf函数来打印一些信息,配置如下: 配置说明 在usart.h中添加 …

水电站与数据可视化:洞察未来能源趋势的窗口

在信息时代的浪潮中,数据可视化正成为推动能源领域发展的重要工具。今天,我们将带您一起探索水电站与数据可视化的结合,如何成为洞察未来能源趋势的窗口。水电站作为传统能源领域的重要组成部分,它的运行与管理涉及大量的数据。然…

03 vi编辑器

vi编辑器的三种模式: 不同的模式下机键动作解释的意义是不一样的 编辑模式 插入模式 末行模式 文件的打开和关闭保存 移动光标

【强烈推荐】视频转gif、图片拼gif,嘎嘎好用,免费免费真的免费,亲测有效,无效过来打我

问题描述 最近遇到一个需求是需要将视频生成gif,这个看上去不是很难,所以有了以下的解决办法 解决办法 首先想到的当然是自己写一个,用了两套代码: from moviepy.editor import *# 读取视频文件 video_clip VideoFileClip(&quo…

Kafka - 3.x Kafka命令行操作

文章目录 OverViewTopic主题命令行操作重要参数帮助文档实操 生产者命令行操作重要参数帮助文档实操 消费者命令行操作重要参数帮助文档实操 OverView Topic主题命令行操作 重要参数 参数描述--bootstrap-server连接Kafka Broker的主机名和端口号--topic操作的主题名称--crea…

webpack 解决:TypeError: merge is not a function 的问题

1、问题描述: 其一、存在的问题为: TypeError: merge is not a function 中文为: 类型错误:merge 不是函数 其二、问题描述为: 想执行 npm run dev 命令,运行起项目时,控制台报错 TypeErro…

高级深入--day39

(实战项目三)新浪网分类资讯爬虫 爬取新浪网导航页所有下所有大类、小类、小类里的子链接,以及子链接页面的新闻内容。 效果演示图: items.py import scrapy import sys reload(sys) sys.setdefaultencoding("utf-8")class SinaItem(scrapy.I…

SAD notes

ESKF 总结 prediction 更新误差先验 F F F通过3.42来算 得到 这里有点绕的一点是: 误差状态的 F F F牵涉到名义状态, 而名义状态又需要在时间上推进更新 其中, F中的名义状态的推进通过公式3.41得到, (名义状态不考虑误差, 这一点从3.41d, 3.41e可以看出, 误差状态只考虑…

React-Redux总结含购物车案例

React-Redux总结含购物车案例 reduc简介 redux是react全家桶的一员,它为react给i共可预测化的状态管理机制。redux是将整个应用状态存储到一个地方,成为store,里面存放着一颗树状态(state,tree),组件可以派发dispatch行为action给store,而不是直接通知其…

Spring Authorization Server 1.1 扩展 OAuth2 密码模式与 Spring Cloud Gateway 整合实战

目录 前言无图无真相创建数据库授权服务器maven 依赖application.yml授权服务器配置AuthorizationServierConfigDefaultSecutiryConfig 密码模式扩展PasswordAuthenticationTokenPasswordAuthenticationConverterPasswordAuthenticationProvider JWT 自定义字段自定义认证响应认…

SpringCloud 微服务全栈体系(四)

第六章 Nacos 配置管理 Nacos 除了可以做注册中心,同样可以做配置管理来使用。 一、统一配置管理 当微服务部署的实例越来越多,达到数十、数百时,逐个修改微服务配置就会让人抓狂,而且很容易出错。我们需要一种统一配置管理方案…

ubuntu执行普通用户或root用户执行apt-get update时报错Couldn‘t create temporary file /tmp/...

apt-get update无法更新,报错: Couldnt create temporary file /tmp/apt.conf.GSzv74 for passing config to,,, 这是由于/tmp目录没有权限导致的,解决办法: chmod 777 /tmp

Redis 配置文件(redis.conf)中文注释及说明

文章目录 一、概述二、觉见基础配置1.1 导入另一个配置文件1.2 添加Redis扩展1.3 绑定Redis服务在那些网卡上,也就是远程可以通过那个的IP地址访问。1.2 指定Redis服务监听端口1.2 最大分配内容大小1.2 后台服务方式运行1.2 日志记录文件1.2 添加扩展 三、完整配置文…

Photoshop(PS)安装教程(图文教程超详细)

目录 一.简介 二.安装步骤 软件:PS版本:2023语言:简体中文大小:3.20G系统要求:Win10(1903)及以上版本,64位操作系统硬件要求:CPU2.0GHz 内存8G(或更高,不支…

Open3D(C++) 最小二乘拟合平面(直接求解法)

目录 一、算法原理二、代码实现三、结果展示本文由CSDN点云侠原创,原文链接。 一、算法原理 平面方程的一般表达式为: A x + B y + C

力扣每日一题74:搜索二维矩阵

给你一个满足下述两条属性的 m x n 整数矩阵: 每行中的整数从左到右按非严格递增顺序排列。每行的第一个整数大于前一行的最后一个整数。 给你一个整数 target ,如果 target 在矩阵中,返回 true ;否则,返回 false 。…

Zabbix安装与部署

前言 Zabbix是一个开源的网络监控和系统监控解决方案,用于监控服务器、网络设备、应用程序和服务。它基于客户端-服务器体系结构,使用多种监控选项来监控不同类型的设备和应用程序。Zabbix支持数据收集、处理和存储,以及报警和可视化等功能。…