173.CI/CD(一):gitlab配置,jenkins的安装配置,jenkins实现基础的CI/CD,Sonarqube代码质量检测,Harbor镜像仓库

本文详细介绍了如何搭建和配置一个完整的容器化持续集成和持续部署(CI/CD)流程,包括gitlab、jenkins、jenkins实现基础的CI/CD、SonarQube代码质量检测和Harbor镜像仓库的使用。文章涵盖了从基础概念到实践操作的各个环节,旨在帮助读者理解和实施有效的CI/CD流程。
摘要由CSDN通过智能技术生成

目录

一、容器化持续集成的基础概念

1.敏捷开发,持续集成,持续交付,DevOps区别

2.为什么需要持续集成

3.如何设计持续集成流水线

4.什么是持续部署

(1)概念

(2)要素

(3)常见自动化部署方法

(4)如何测试部署的效果

5.项目进度把控

6.Gitflow和Trunk Base两种分支模型

(1)Gitflow

(2)Trunk Base:主干开发分支模型

二、gitlab配置

1.虚拟机中安装docker和docker compose

2.关闭防火墙

3.拉取gitlab镜像

4.登录gitlab,并设置密码

三、安装maven和jdk

1.安装jdk11,别用jdk8,后面会有很多坑

2.上传maven的jar包,并做解压

四、Jenkins

1.下载jenkins,并配置基础插件

 2.在jenkins中配置jdk和maven

(1)将jdk和maven复制到docker的data目录下

(2)在页面上配置jdk

 (3)配置ssh server

 五、jenkins实现基础的CI/CD

1.编写一个项目

(1)创建项目

(2)写好对应的类,并测试一下

2.配置gitlab,并提交代码

(1)启动gitlab

(2) 新建一个项目,并将代码提交

3.jenkins拉取gitlab中的代码

4.在jenkins处进行maven构建项目

5.将构建好的jar包发送到目标服务器

 6.将目标服务器上的jar包以docker的形式运行

7.基于参数构建,设置不同的版本

六、SonarQube代码质量检测

1.SonarQube的下载和安装

2.下载一个中文插件

3.通过maven的方式实现代码质量检测(不推荐)

4.通过sonar-scanner进行代码质量检测(推荐) 

5.jenkins中整合sonarqube

七、Harbor镜像仓库

1.harbor的安装和配置

2.harbor的基本操作

3.jenkins容器内部使用docker

4.jenkins实现制作自定义镜像并推送harbor

 5.目标服务器拉取harbor镜像


一、容器化持续集成的基础概念

1.敏捷开发,持续集成,持续交付,DevOps区别

敏捷开发:计划+代码+构建

持续集成:敏捷开发+测试

持续交付:持续集成+发布

DevOps:持续交付+部署+运维

2.为什么需要持续集成

统一的git:集成代码

持续构建:功能集成在一起,保证不出错

自动化测试:一个模块的功能能够正常工作

联调测试环境:不同模块能够正常工作

3.如何设计持续集成流水线

4.什么是持续部署

(1)概念

自动化的将一个或多个软件又快又稳定的、可重复的联合部署到目标机器,以便功能正常运行。

(2)要素

  • 自动化部署:ansible
  • 应用与配置分离,一次构建,多处运行:spring cloud config
  • 提供应用健康监测的接口:spring cloud actuator

(3)常见自动化部署方法

 CI:持续集成,将代码通过jenkins将包导出到制品库

CD:持续交付,jenkins构建工作流,运用ansible将其推送到不同的环境,加密数据通过vault保证安全

(4)如何测试部署的效果

*1)蓝绿发布

将代码发布后,大部分用户还是继续使用老版本,少部分用户用新版本,发现使用没问题,再慢慢都切到新版本来 

*2)金丝雀发布

 蓝绿发布是两个完全不同的版本,金丝雀发布是在一套环境中,只是一部分机器变成新部署的情况,然后发现没问题再慢慢替代

*3)功能开关

开发人员提供一个远程的终止开关,可以再部署到正式环境后发现问题随时关闭或者打开该功能

5.项目进度把控

(1)什么是Jira

我们使用Jira来进行项目进度把控,Jira有点类似于禅道。

Jira从上到下分级:

  • 版本
  • 该版本下得功能模块
  • 每个模块的开发任务类型:工作量,复杂度,风险性
  • 具体的开发任务:开发进度,开发的bug

(2)idea中集成Jira

*1)先下载

 *2)设置jira的配置 

*3)可视化的jira

6.Gitflow和Trunk Base两种分支模型

(1)Gitflow

Gitflow = Master + develop + feature + release + hot fix

  • master:始终保持生产部署状态
  • develop:最新的,可发布的变更,也叫集成分支
  • release:发布分支,但是功能少于master,分支命名:release-*
  • feature:功能分支,每一个具体开发在此,但是最终结果要合并到develop
  • hot fix:补丁分支,用于修复一些问题,最后要合并到develop或者master

Gitflow适用于对稳定性要求高的场景,开源项目,少量资深研发多数普通开发的情况

(2)Trunk Base:主干开发分支模型

所有人共享一个Repository,修改好之后就直接给到Release版本,然后发布。

可以通过开关的方式决定是否开放某些功能。

适用于互联网,软件本身迭代非常快,团队资深研发比较多

二、gitlab配置

注:我们gitlab所在的虚拟机为:192.168.200.160

1.虚拟机中安装docker和docker compose

这里提供两种方式安装docker

方法一:

#卸载旧的docker
yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine

#安装需要的安装包
yum install -y yum-utils

#设置镜像的仓库
yum-config-manager \
    --add-repo \
    http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

#更新软件包索引
yum makecache fast

#安装docker相关的
yum install docker-ce docker-ce-cli containerd.io

#启动docker
systemctl start docker
# 设置开机自动启动
systemctl enable docker
docker version

#安装docker compose
curl -L https://github.com/docker/compose/releases/download/1.24.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

#设置权限
chmod +x /usr/local/bin/docker-compose

#查看版本
docker-compose version

方法二:

##docker
#1.下载Docker依赖组件
yum -y install yum-utils device-mapper-persistent-data lvm2

#2.设置下载Docker的镜像源为阿里云
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

#3.安装Docker服务
yum -y install docker-ce

#4.安装成功后,启动Docker并设置开机自启
# 启动Docker服务
systemctl start docker
# 设置开机自动启动
systemctl enable docker

#5.查看版本
docker version

##docker-compose
#1.下载Docker/Compose:https://github.com/docker/compose
#2.将下载好的[docker-compose-Linux-x86_64]()文件移动到Linux操作系统

#3.设置文件权限
chmod a+x docker-compose-Linux-x86_64

# 移动到/usr/bin目录下,并重命名为docker-compose
mv docker-compose-Linux-x86_64 /usr/bin/docker-compose

#查看
echo $PATH

#测试安装成功
docker-compose version

2.关闭防火墙

systemctl stop firewalld

3.拉取gitlab镜像

#创建目录
cd /usr/local/
mkdir docker
cd docker/
mkdir gitlab_docker
cd gitlab_docker/

#创建一个空文件
vi docker-compose.yml

#查看gitlab的版本
docker search gitlab

#拉取版本
docker pull gitlab/gitlab-ce:latest

#编写docker-compose.yml文件
vim docker-compose.yml
###################################################
version: '3.1'
services:
  gitlab:
    image: 'gitlab/gitlab-ce:latest'
    container_name: gitlab
    restart: always
    environment:
      GITLAB_OMNIBUS_CONFIG: |
        external_url 'http://192.168.200.160:8929'
        gitlab_rails['gitlab_shell_ssh_port'] = 2224
    ports:
      - '8929:8929'
      - '2224:2224'
    volumes:
      - './config:/etc/gitlab'
      - './logs:/var/log/gitlab'
      - './data:/var/opt/gitlab'
###################################################

#运行docker-compose
docker-compose up -d

#查看启动日志
docker-compose logs -f

4.登录gitlab,并设置密码

查看一下页面:

注:如果你打开页面显示错误,可能是还没启动好,这个启动时间比较长

http://192.168.200.160:8929/

#查看gitlab的账户密码
docker exec -it gitlab bash
cat /etc/gitlab/initial_root_password

账户名:root

密码:复制上面查找到的内容

登录进去之后修改密码:

 

三、安装maven和jdk

注:我们此处的虚拟机为192.168.200.161

1.安装jdk11,别用jdk8,后面会有很多坑

#下载jdk11
curl -O https://download.java.net/java/GA/jdk11/13/GPL/openjdk-11.0.1_linux-x64_bin.tar.gz

#jdk1.8下载
#yum install java-1.8.0-openjdk* -y

#解压jdk
tar zxvf openjdk-11.0.1_linux-x64_bin.tar.gz
mv jdk-11.0.1 /usr/local/
cd /usr/local/
mv jdk-11.0.1/ jdk/


vi /etc/profile.d/jdk11.sh
##############################################
export JAVA_HOME=/usr/local/jdk
export PATH=$PATH:$JAVA_HOME/bin
##############################################

source /etc/profile.d/jdk11.sh

java -version

2.上传maven的jar包,并做解压

cd /usr/local/

#安装
tar -zxvf apache-maven-3.6.3-bin.tar.gz -C /usr/local/

#修改一下名字
mv apache-maven-3.6.3/ maven/

#设置maven的配置文件
cd maven/conf/
vim settings.xml 

#注意,如果是jdk1.8的话,<profile>和<activeProfile>需要变更一下
         <profile>    
            <id>jdk8</id>    
            <activation>    
               <activeByDefault>true</activeByDefault>    
               <jdk>1.8</jdk>    
            </activation>    
            <properties>    
                    <maven.compiler.source>1.8</maven.compiler.source>    
                    <maven.compiler.target>1.8</maven.compiler.target>    
                    <maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>    
                </properties>    
        </profile>

###############################################################################
#配置maven的阿里云仓库地址,大概是在159行的位置
<mirror>
    <id>nexus-aliyun</id>
    <mirrorOf>*</mirrorOf>
    <name>Nexus aliyun</name>
    <url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>

#配置maven的jdk11编译插件配置setting.xml,大概是在253行
         <profile>    
            <id>jdk11</id>    
            <activation>    
               <activeByDefault>true</activeByDefault>    
               <jdk>11</jdk>    
            </activation>    
            <properties>    
                    <maven.compiler.source>11</maven.compiler.source>    
                    <maven.compiler.target>11</maven.compiler.target>    
                    <maven.compiler.compilerVersion>11</maven.compiler.compilerVersion>    
                </properties>    
        </profile>

#配置activeProfile,大概在275行
  <activeProfiles>
        <activeProfile>jdk11</activeProfile>
  </activeProfiles>
###############################################################################

vi /etc/profile
#######################################################
export MAVEN_HOME=/usr/local/maven
export PATH=$PATH:$MAVEN_HOME/bin
#######################################################

source /etc/profile
mvn -version

四、Jenkins

官网:Jenkins

1.下载jenkins,并配置基础插件

#拉取镜像
docker pull jenkins/jenkins:2.346.3-2-lts

#设置docker-compose配置文件
cd /usr/local/
mkdir docker
cd docker/
mkdir jenkins_docker
cd jenkins_docker/
vim docker-compose.yml

########################################################
version: "3.1"
services:
  jenkins:
    image: jenkins/jenkins:2.346.3-2-lts
    container_name: jenkins
    ports:
      - 8080:8080
      - 50000:50000
    volumes:
      - ./data/:/var/jenkins_home/
########################################################


#运行docker-compose
docker-compose up -d
#重启
docker-compose restart

#查看运行日志
docker logs -f jenkins

#第一次启动失败,因为没有设置权限,给data目录设置权限
chmod -R a+w data/


#因为官方数据源下载很慢,我们替换数据源
cd data/
vim hudson.model.UpdateCenter.xml 
#########################################################################
#我们这里提供2个数据源,随便选一个就行
http://mirror.esuni.jp/jenkins/updates/update-center.json
https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
#########################################################################

在我们查看日志的时候,会有一个密码,记一下,登录的时候用。

查看页面:http://192.168.200.161:8080/

进来之后输入密码,选择插件安装,然后点击安装,按照顺序往下走。

 

需要下载3个软件,然后重启一下 

 

 2.在jenkins中配置jdk和maven

(1)将jdk和maven复制到docker的data目录下

#将jdk和maven的包复制到data目录下
cd /usr/local/docker/jenkins_docker/data/
mv /usr/local/jdk/ ./
mv /usr/local/maven/ ./

#因为我们在docker-compose中设置了数据卷,所以我们去到docker内部查看一下
#也是可以看到复制的jdk和maven目录的
docker exec -it jenkins bash
cd /var/jenkins_home/
ls

(2)在页面上配置jdk

#jdk11
/var/jenkins_home/jdk

#maven
/var/jenkins_home/maven

 

 

 (3)配置ssh server

该步骤用于配置目标服务器,该目标服务器中需要有docker,我们默认使用当前161的虚拟机

cd /usr/local/
mkdir test

 

 五、jenkins实现基础的CI/CD

1.编写一个项目

(1)创建项目

 

进去之后配置一下maven

(2)写好对应的类,并测试一下

TestController:

package com.xupeng.mytest.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class TestController {
    @GetMapping("/test")
    public String test(){
        return "hello";
    }
}

 启动后进入:localhost:8080/test,测试通过

2.配置gitlab,并提交代码

先启动192.168.200.160虚拟机

(1)启动gitlab

# 启动Docker服务
systemctl start docker
# 设置开机自动启动
systemctl enable docker

cd /usr/local/docker/gitlab_docker/

#运行docker-compose
docker-compose up -d

#查看启动日志
docker-compose logs -f

启动后登录页面:http://192.168.200.160:8929/

(2) 新建一个项目,并将代码提交

*1)建好项目

 

 *2)在idea中将代码提交

选择mytest这个文件夹: 

 

3.jenkins拉取gitlab中的代码

 

验证代码是否成功拉取:

来到161的虚拟机,我们发现是可以看到对应的代码的:

docker exec -it jenkins bash
cd ~
cd workspace/mytest
ls

4.在jenkins处进行maven构建项目

clean install package -DskipTests

 保存后再次点击构建:

 再次验证代码是否构建成功,我们会发现多了一个target文件夹:

docker exec -it jenkins bash
cd ~
cd workspace/mytest
ls

5.将构建好的jar包发送到目标服务器

 

target/*.jar

 6.将目标服务器上的jar包以docker的形式运行

(1)修改原来的项目

pom.xml:

构建的时候设置一个finalName

    <build>
        <finalName>mytest</finalName>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

Dockerfile:

注意:如果FROM里面的镜像拉取不下来,可以换一个:

adoptopenjdk/openjdk11:jdk-11.0.8_10-alpine
FROM openjdk:11-jre
COPY mytest.jar /usr/local/
WORKDIR /usr/local/
CMD java -jar mytest.jar

docker-compose.yml:

version: '3.1'
services:
  mytest:
    build:
      context: ./
      dockerfile: Dockerfile
    image: mytest:v1.0.0
    container_name: mytest
    ports:
    - 8081:8080

(2)来到jenkins重新构建一下

(3)查看是否构建成功

161虚拟机:

docker exec -it jenkins bash
cd ~
cd workspace/mytest/
ls

 (4)修改jenkins的configure

sorce file里面加了:docker/*

target/*.jar docker/*
cd /usr/local/test/docker
mv ../target/*.jar ./
docker-compose down
docker-compose up -d --build
docker image prune -f

我们再build一下,然后http://192.168.200.162:8081/test

然后我们变更test方法里面的返回数据,在重新build一下,就可以刷新了 

7.基于参数构建,设置不同的版本

(1)设置git parameter 

git checkout $tag

 配置好之后gitlab设置tag:

我们设置2个版本,分别是v1.0.0和v2.0.0: 

修改代码:改一下版本号

 我们发布的时候如果选择v1.0.0就是之前的,如果选择v2.0.0就是修改之后的

六、SonarQube代码质量检测

跑完第五步,我们已经能正常的上传代码,通过jenkins去拉取代码并编译,然后将编译后的代码提交到目标服务器,并直接启动了。

我们还需要增加代码质量检测。

1.SonarQube的下载和安装

先去官网看最新的稳定版本,我们就下载该版本。

现在SonarQube已经不支持mysql了,需要一个postgres数据库,

Download | SonarQube

#拉取postgres数据库镜像
docker pull postgres

#拉取sonarqube镜像
docker pull sonarqube:8.9.9-community

#设置sonarqube
cd /usr/local/docker/
mkdir sonarqube_docker
cd sonarqube_docker/
vim 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
###################################################

#启动
docker-compose up -d

#查看日志,会发现有报错
# max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
docker logs -f sonarqube 

#配置虚拟机大小
vi /etc/sysctl.conf

########################
vm.max_map_count=262144
########################

#刷新一下配置
sysctl -p

#重新启动
docker-compose up -d

登录sonarqube:http://192.168.200.161:9000/

账户和密码都是admin 。登录后重置一下密码

2.下载一个中文插件

 下载好之后有一个弹窗,重启即可。

3.通过maven的方式实现代码质量检测(不推荐)

(1)来到maven的config.setting配置文件,添加如下配置

	<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.200.161:9000</sonar.host.url>
		</properties>
	</profile>

(2)idea中的terminal中输入

#对代码进行质量检测
cls
mvn -v
mvn sonar:sonar


 (3)查看质量检测结果

刷新一下sonarqube首页,就会多了一个代码检测报告 

4.通过sonar-scanner进行代码质量检测(推荐) 

*1)下载安装,并设置配置文件

#因为下载下来是zip,我们先下载一下解压缩的支持
cd /
yum -y install unzip


#上传好压缩包之后解压
unzip sonar-scanner-cli-4.6.1.2450-linux.zip 

#改个名
mv sonar-scanner-4.6.1.2450-linux/ sonar-scanner

#移动到jenkins的data目录下
cd /usr/local/docker/jenkins_docker/data
mv /sonar-scanner ./

#设置一下配置文件
cd /usr/local/docker/jenkins_docker/data/sonar-scanner/conf
vim sonar-scanner.properties

################################################
sonar.host.url=http://192.168.200.161:9000
sonar.sourceEncoding=UTF-8
################################################

#启动
cd /usr/local/docker/sonarqube_docker/
docker-compose up -d

*2)给用户设置一个token,用来唯一标识用户

*3)执行代码检测

#进入代码目录
cd /usr/local/docker/jenkins_docker/data/workspace/mytest/

#启动sonar-scanner
/usr/local/docker/jenkins_docker/data/sonar-scanner/bin/sonar-scanner -Dsonar.source=./ -Dsonar.projectname=mytest-linux -Dsonar.login=6b35ae055567be4a0179b5204a968653d7d8feac -Dsonar.projectKey=mytest-linux -Dsonar.java.binaries=./target/

 

5.jenkins中整合sonarqube

(1)jenkins下载sonarqube

 假设你的网络不好下载不下来,也可以通过上传的方式完成:

 (2)配置sonarqude

 如果点击add的时候没效果,就先保存,然后重新进来看:

 

 (3)将sonarqube配置进jenkins

 找到任务下面的配置:

 在build下面maven的后面追加sonar:

sonar.projectname=${JOB_NAME}
sonar.projectKey=${JOB_NAME}
sonar.source=./
sonar.java.binaries=./target/

然后重新编译,这个时候会报错:

(4)解决遇到的bug问题

我们会看到之前测试sonar的时候生成了一个隐藏文件夹:.scannerwork

将他删除掉即可

cd /usr/local/docker/jenkins_docker/data/workspace/mytest/
ls -a
rm -rf .scannerwork/

 jenkins重新构建即可。

七、Harbor镜像仓库

我们之前是jenkins把war包发送给目标服务器,然后目标服务器通过docker-compose构建docker。

当目标服务器有多个的时候,每个都会构建一次,不好。

我们希望在jenkins的harbor里面构建好,给一个通知给到目标服务器,然后目标服务器自己去harbor里面去拉取

1.harbor的安装和配置

#解压
tar -zxvf harbor-offline-installer-v2.3.4.tgz -C /usr/local/

#复制配置文件
cd /usr/local/harbor/
cp harbor.yml.tmpl harbor.yml

#编辑配置文件
#####################################
#修改hostname
hostname: 192.168.200.161

#修改http下得port
port: 80

#将https下面的所有的都注释掉,包括https本身
#记录一下harbor_admin_password的密码
#####################################

#运行harbor
./install.sh 

查看页面:http://192.168.200.161:80/

用户名:admin

密码:Harbor12345

2.harbor的基本操作

(1)新建一个项目

(2)配置一下私有库

vi /etc/docker/daemon.json

############################################################
{
        "insecure-registries":["192.168.200.161:80"]
}
############################################################

(3)先在jenkins虚拟机中随便起一个tomcat服务

#下载镜像
docker pull tomcat
docker images
 
#启动
#-d:以后台运行  -p:暴露端口 外网端口:tomcat内部端口  --name:命名
docker run -d -p 3355:8080 --name tomcat01 tomcat
 
#此时你运行一下是会报错的
 
#需要拷贝一下
docker exec -it tomcat01 /bin/bash
cp -r webapps.dist/* webapps

http://192.168.200.161:3355/

(4)将tomcat推送到harbor仓库中

#找到tomcat的imageId
docker images

#tomcat的imageId:6ce88d2075b4 
#harbor的ip:端口/仓库名称/image的名称:版本号
docker tag 6ce88d2075b4 192.168.200.161:80/repo/mytomcat:v1.0.0
docker images

#重启docker
systemctl restart docker

#登录harbor
#如果登录不上去,可以重启一下harbor
docker login -u admin -p Harbor12345 192.168.200.161:80

#将tomcat推送到harbor仓库中
docker push 192.168.200.161:80/repo/mytomcat:v1.0.0

 (5)目标服务拉取镜像

来到目标服务器192.168.200.162

*1)配置daemon.json,并拉取

vi /etc/docker/daemon.json

############################################################
{
        "insecure-registries":["192.168.200.161:80"]
}
############################################################

#重启一下docker
systemctl restart docker.service


#拉取镜像
docker pull 192.168.200.161:80/repo/mytomcat:v1.0.0

3.jenkins容器内部使用docker

我们重新操作jenkins服务器:192.168.200.161

要想jenkins内部使用docker,推荐将docker.sock文件变成root:root,且所有人都能操作,这样,jenkins就可以直接操作docker了。确保让jenkins使用虚拟机里面的docker,而不是自己下载一个docker

#将docker.sock变成root组下得root用户文件
cd /var/run/
chown root:root docker.sock

#其他用户也有读写权限
chmod o+rw docker.sock

#修改docker-compose配置文件
cd /usr/local/docker/jenkins_docker/
vim docker-compose.yml

#############################################################
version: "3.1"
services:
  jenkins:
    image: jenkins/jenkins:2.346.3-2-lts
    container_name: jenkins
    ports:
      - 8080:8080
      - 50000:50000
    volumes:
      - ./data/:/var/jenkins_home/
      - /usr/bin/docker:/usr/bin/docker
      - /var/run/docker.sock:/var/run/docker.sock
      - /etc/docker/daemon.json:/etc/docker/daemon.json
#############################################################

#重启jenkins
docker-compose up -d

#看看jenkins里面好不好用docker
docker exec -it jenkins bash
docker version
exit

4.jenkins实现制作自定义镜像并推送harbor

(1)删除原本推送到目标服务器并在目标服务器构建的步骤

 在build阶段的sonar后面追加一个execute shell

 (2)修改代码,并追加版本

gitlab中增加v3.0.0

将文字显示为v3.0 .0

(3)将docker镜像在jenkins生成

mv target/*.jar docker/
docker build -t mytest3:$tag docker/
docker login -u admin -p Harbor12345 192.168.200.161:80
docker tag mytest3:$tag 192.168.200.161:80/repo/mytest3:$tag
docker push192.168.200.161:80/repo/mytest3:$tag

 5.目标服务器拉取harbor镜像

(1)目标服务器拉取镜像的校验逻辑

  1. 告知目标服务器拉取哪个镜像
  2. 判断目标服务器是否正在运行容器,如果是,则把正在运行的容器删除
  3. 如果目标服务器已经存在当前镜像,如果是,则删除
  4. 目标服务器拉取harbor上的镜像
  5. 将拉取下来的镜像运行成容器

其次,目标服务器还需要知道的信息有:

  • harbor地址/harbor仓库/镜像名:镜像版本
  • 端口号

(2)目标服务器脚本

我们来到192.168.200.162服务器:

vim deploy.sh

############################################################
#harbor的地址
harbor_url=$1
#harbor仓库名
harbor_project_name=$2
#镜像名称
project_name=$3
#版本号
tag=$4
#暴露端口
port=$5

imageName=$harbor_url/$harbor_project_name/$project_name:$tag

#根据名称过滤查找出一行容器数据,然后再获取第一列的数据,即对应的标识
containerId=`docker ps -a | grep ${project_name} | awk '{print $1}'`
#如果当前容器已经存在,先停掉当前容器,再删除
if [ "$containerId" != "" ] ; then
    docker stop $containerId
    docker rm $containerId
    echo "Delete Container Success"
fi

#根据名称过来找出镜像,并打印出第三列
imageId=`docker images | grep ${project_name} | awk '{print $3}'`
#如果当前镜像存在,删除
if [ "$imageId" != "" ] ; then
    docker rmi -f $imageId
    echo "Delete Image Success"
fi

#登录harbor
docker login -u admin -p Harbor12345 $harbor_url

#拉取
docker pull $imageName

#运行
docker run -d -p $port:$port --name $project_name $imageName

echo "Start Container Success"
echo $project_name
############################################################

#配置权限
chmod a+x deploy.sh

#将该文件放到PATH下,这样任何位置都能运行
echo $PATH
mv deploy.sh /usr/bin/

(3)jenkins中配置目标服务器相关信息

*1)先配置一个字符串参数 

*2)设置一个post-build actions

deploy.sh 192.168.200.161:80 repo mytest3 $tag $port

#
#deploy.sh 192.168.200.161:80 repo mytest3 $tag 8082

 *3)对于实际端口和暴露端口不一样的情况

修改目标脚本服务器,新增一个参数,比如叫hostport=8081。然后入参那个地方,port变化一下,一个containport=8080,一个hostport=8081

docker run -d -p $containport:$hostport --name $project_name $imageName

然后再jenkins的配置里面的general里再新增一个hostport入参

然后Post-build Actions,新增一个入参

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鹏哥哥啊Aaaa

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值