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: postgres
    container_name: db
    ports:
      - 5432:5432
    networks:
      - sonarnet
    environment:
      POSTGRES_USER: sonar
      POSTGRES_PASSWORD: sonar
  sonarqube:
    image: sonarqube:8.9.9-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
  • 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.359
    container_name: jenkins
    ports:
      - 9200:8080
      - 50000:50000
    volumes:
      - /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=$6

imageName=$harbor_addr/$harbor_repo/$project:$version

containerId=`docker ps -a | grep ${project} | awk '{print $1}'`
if [ "$containerId" != "" ] ; then
    docker stop $containerId
    docker rm $containerId
fi

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

if [[ "$tag" =~ "$version" ]] ; then
    docker rmi -f $imageName
fi

docker login -u admin -p Harbor12345 $harbor_addr

docker pull $imageName

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

echo "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-store

Login 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:测试构建:
    在这里插入图片描述
    在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

生成树协议:监控 STP 端口和交换机

什么是生成树协议 生成树协议 (STP) 用于网络交换机,以防止循环和广播风暴。在局域网 (LAN) 中,两条或多条冗余路径可以连接到同一网段。当交换机或网桥从所有可用端口传输帧时,这些帧开始在网…

基于单片机设计的智能窗帘控制系统

一、前言 智能家居技术在近年来取得了巨大的发展,并逐渐成为人们日常生活中的一部分。智能家居系统带来了便利、舒适和高效的生活体验,拥有广泛的应用领域,其中之一就是智能窗帘控制系统。 传统窗帘需要手动操作,打开或关闭窗帘…

华硕天选1天选2天选3天选4天选air原厂预装出厂系统恢复安装教程方法

华硕天选1天选2天选3天选4天选air原厂预装出厂系统恢复安装教程方法 第一:自备原装swm/esd/wim/iso等格式系统文件,以上这几种格式文件安装恢复非常简单,使用PE工具即可完成恢复安装,还有一种安装方法就是华硕zip工厂恢复模式 1.首先需要自…

Adaptive AUTOSAR RTA-VRTE工具链介绍

ETAS Adaptive AUTOSAR RTA-VRTE是一种面向服务架构的中间件方案,提供了自适应AutoSAR平台,为应用层软件提供了运行环境. RTA-VRTE start kit的构建系统在主机VM内执行,可以创建AUTOSAR自适应应用程序并将其部署到一个或多个目标ECU虚拟机.

【VPX610】 青翼科技基于6U VPX总线架构的高性能实时信号处理平台

板卡概述 VPX610是一款基于6U VPX架构的高性能实时信号处理平台,该平台采用2片TI的KeyStone系列多核DSP TMS320C6678作为主处理单元,采用1片Xilinx的Virtex-7系列FPGA XC7VX690T作为协处理单元,具有2个FMC子卡接口,各个处理节点之…

linux-文件系统

目录 一、文件系统 1.分区 2.文件系统分类 3.文件系统创建工具 4.查看文件系统的属性 5.挂载 6.buffer和cache 一、文件系统 1.分区 1-4个主分区 第五个序号开始,是逻辑分区 2.文件系统分类 vfs文件系统 ------------- virtualenv file System&#xff0…

智慧社区燃气管网监测系统

燃气易燃易爆,一旦操作不当或疏忽大意,极易引发燃气安全事故,造成严重后果,2023年10月24日,在吉林某小区,发生了燃气使用不当产生的爆炸导致了1人死亡,1人重伤,15人轻伤,…

【嵌入式开源库】timeslice的使用,完全解耦的时间片轮询框架构

完全解耦的时间片轮询框架构 简介项目代码timeslice.htimeslice.clist.hlist.c 创建工程移植代码实验函数说明timeslice_task_inittimeslice_task_addtimeslice_tak_deltimeslice_get_task_num 结尾 简介 timeslice是一个时间片轮询框架,他是一个完全解耦的时间片轮…

电脑视频怎么转音频mp3

如果你在电脑上观看视频时喜欢上某个片段的背景音乐,且想将喜欢的背景音乐制作为手机铃声。我是建议你将此视频转换为 MP3 格式,因为 MP3 几乎与所有设备相兼容,让你可以在不同设备上不受限制地去聆听它。那该如何转换呢?无需担心…

LinkedList概念+MyLinkedList的实现

文章目录 LinkedList笔记一、 LinkedList1.概念2.LinkedList的构造方法3.LinkedList的遍历 二、MyLinkedList的实现1.定义内部类2.打印链表、求链表长度、判断是否包含关键字3. 头插法和尾插法4.在任意位置插入5.删除结点6.清空链表 LinkedList笔记 一、 LinkedList 1.概念 L…

将两个有序顺序表合并为一个新的有序顺序表,并由函数返回结果顺序表

将两个有序顺序表合并为一个新的有序顺序表,并由函数返回结果顺序表 算法思路: 这个其实就是一个归并排序,我们这里两顺序表为升序,要合并成一个升序表 用i和j分别标记顺序表A和顺序表B的元素,然后新表是C 每次从A和…

HarmonyOS 自定义抽奖转盘开发(ArkTS)

介绍 本篇 Codelab 是基于画布组件、显式动画,实现的一个自定义抽奖圆形转盘。包含如下功能: 1. 通过画布组件 Canvas,画出抽奖圆形转盘。 2. 通过显式动画启动抽奖功能。 3. 通过自定义弹窗弹出抽中的奖品。 相关概念 ● Stack组件…

web自动化测试框架介绍

一、目的 web自动化测试作为软件自动化测试领域中绕不过去的一个“香饽饽”,通常都会作为广大测试从业者的首选学习对象,相较于C/S架构的自动化来说,B/S有着其无法忽视的诸多优势,从行业发展趋、研发模式特点、测试工具支持&…

PMP考试是如何提高项目管理能力的?

通过获得PMP认证,项目管理人员可以提高其项目管理能力,并在行业中取得更高的职业发展。PMP如何提高项目管理能力,具体体现在以下几个方面: 1. 标准化方法: PMP认证基于《项目管理知识体系指南》(PMBOK),该…

如何设计实时聊天系统的架构

1. 系统的要求和目标 1.1 功能要求 对话:系统应支持用户之间的一对一和群组对话。确认消息:系统应支持消息传递确认,如已发送、已送达、已读。共享:系统应支持媒体文件的共享,例如图像、视频和音频。聊天存储&#x…

IT行业哪个方向比较好就业?

IT行业哪个方向比较好就业? IT行业哪个方向比较好就业?引言IT技术发展背景及历程IT行业的就业方向有哪些?1. 软件开发2. 网络安全3. 数据分析4. 人工智能和机器学习5. 云计算6. 物联网(IoT)7. 软件测试与质量保障8. 区块链 分享在IT行业的就…

mac系统u盘启动盘制作教程,更新至macOS Sonoma 14

mac系统怎么制作装系统的u盘,如果您要在多台电脑上安装 macOS,而又不想每次都下载安装器,这时可引导安装器就会很有用。一起来看苹果电脑u盘启动盘制作教程吧。 Macos系统安装包合集包揽macos 10.15,macos 11和苹果最新系统等多个版本 1、A…

tomcat的负载均衡、动静分离(nginx联动)

动静分离: 访问静态页面和动态页面分开 实现动态和静态页面负载均衡 实验5台虚拟机 一、动态负载均衡 3台虚拟机模拟: 代理服务器:30 tomcat动态页面:21、22 代理服务器: proxy_pass http://tomcat; proxy_set_h…

【JavaEE】网络编程---UDP数据报套接字编程

一、UDP数据报套接字编程 1.1 DatagramSocket API DatagramSocket 是UDP Socket,用于发送和接收UDP数据报。 DatagramSocket 构造方法: DatagramSocket 方法: 1.2 DatagramPacket API DatagramPacket是UDP Socket发送和接收的数据报。…

调试-Debug

0.1 Debug环境介绍 Microsoft Visual Studio 2022中: Debug版本的可执行程序称为调试版本,包含调试信息,不作任何优化,便于程序员进行调试。 Release版本的可执行程序称为发布版本,进行了各种优化,不可调…