首页 > 其他分享 >关于devops系统的搭建

关于devops系统的搭建

时间:2023-10-18 15:15:20浏览次数:39  
标签:镜像 compose devops 关于 jenkins Sonar Jenkins docker 搭建

1.Docker的安装

1.下载Docker依赖组件

yum -y install yum-utils de2023-09-12 13:54:03 星期二vice-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

6.docker-compose安装
下载Docker/Compose:https://github.com/docker/compose

将下载好的docker-compose-Linux-x86_64文件移动到Linux操作系统:……

设置docker-compose-Linux-x86_64文件权限,并移动到$PATH目录中

# 设置文件权限
chmod a+x docker-compose-Linux-x86_64
# 移动到/usr/bin目录下,并重命名为docker-compose
mv docker-compose-Linux-x86_64 /usr/bin/docker-compose

2.git以及gitlab安装

1.git 安装 yum install git
2.安装gitlab

# 查看镜像
docker search gitlab

# 拉取镜像
docker pull gitlab/gitlab-ce

3.docker-compose 启动 gitlab
3.1准备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.11.11:8929'//写自己的ip
        gitlab_rails['gitlab_shell_ssh_port'] = 2224
    ports:
      - '8929:8929'
      - '2224:2224'
    volumes:
      - './config:/etc/gitlab'
      - './logs:/var/log/gitlab'
      - './data:/var/opt/gitlab'

3.2启动容器
在指定文件夹下:

# 启动容器
docker-compose up -d

访问http://192.168.11.11:8929
效果:
image
4.查看初始的用户的用户名和密码

docker exec -it gitlab cat /etc/gitlab/initial_root_password

5.登录并修改密码
用户名为:root 密码为上一步查询到的密码
image
image

3.Jenkins

3.1安装

1.拉取镜像

docker pull jenkins/jenkins

2.编写对应的docker-compose.yml

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

3.设置数据卷data目录的权限,否则会包没有对应权限

chmod -R a+w data/

4.设置Jenkins的下载地址
重新启动Jenkins容器后,由于Jenkins需要下载大量内容,但是由于默认下载地址下载速度较慢,需要重新设置下载地址为国内镜像站
复制一段即可。

# 修改数据卷中的hudson.model.UpdateCenter.xml文件
<?xml version='1.1' encoding='UTF-8'?>
<sites>
  <site>
    <id>default</id>
    <url>https://updates.jenkins.io/update-center.json</url>
  </site>
</sites>
# 将下载地址替换为http://mirror.esuni.jp/jenkins/updates/update-center.json
<?xml version='1.1' encoding='UTF-8'?>
<sites>
  <site>
    <id>default</id>
    <url>http://mirror.esuni.jp/jenkins/updates/update-center.json</url>
  </site>
</sites>
# 清华大学的插件源也可以https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json 建议这个

5.再次重启Jenkins容器,访问JenKins
6.查看JenKins登录密码,并登录JenKins然后安装对应插件

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

输入管理员密码 - 选择插件来安装 - 选择对应的插件进行安装
推荐安装:
①Git Parameter
②Publish Over SSH
直接搜索即可
然后等待插件安装成功进入首页。(可能会出现下载失败的插件,重新下载即可)
7.创建管理员用户,设置Jenkins URL
image

3.2使用

准备好GitLab仓库中的项目,并且通过Jenkins配置实现当前项目的DevOps流程。(Idea创建之后推送到远程即可)
1.构建Maven工程发布到GitlLab、Gitee、GitHub均可

2.点击Jenkins左侧新建任务(选择自由风格的项目)

3.配置源码拉取地址
image
4.构建项目,点击立即构建,在构建历史中,点击标题,可以查看控制输出来确定是否构建成功。

5.配置Maven构建代码
准备jdk,maven压缩包
jdk:https://www.oracle.com/cn/java/technologies/downloads/#java8-linux
maven:https://maven.apache.org/download.cgi
解压压缩包,在maven的setting.xml中配置

<!-- 阿里云镜像地址 -->
<mirror>  
    <id>alimaven</id>  
    <name>aliyun maven</name>  
    <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
    <mirrorOf>central</mirrorOf>          
</mirror>
<!-- JDK1.8编译插件 -->
<profile>
    <id>jdk-1.8</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>

Jenkins配置JDK&Maven并保存
在之前的docker-compose中更改 docker-compose.yml文件
image
将jdk、maven,通过数据卷映射到Jenkins容器内部
配置完成后需要用 docker-compose up -d 重新加载容器
可进入容器内部验证是否映射进容器中

docker exec -it jenkins bash

在Jenkins中对jdk和maven进行配置
image
6.配置Jenkins任务构建代码
image
image
image
7.配置完后点立即构建,查看控制台输出
可在此处查看构建成功的jar包
image
构建成功:
image
成功后便可以进行发布测试
8.此处需要Publish Over SSH(如果未安装,可在插件管理中进行安装)
配置Publish Over SSH
配置Publish Over SSH连接测试环境、生产环境
image
配置完成后对任务进行配置
image
image
再次进行构建:
image
显示如上信息,在服务器中看到文件,便表示构建成功,如果出现transfer 0 可能由于权限导致,进入服务器更改权限即可chomd r+w -R 目录

7.CI/CD操作
基于Jenkins拉取GitLab的SpringBoot代码进行构建发布到测试环境实现持续集成
基于Jenkins拉取GitLab指定发行版本的SpringBoot进行构建发布到生产环境实现CD(持续部署)

为了让程序代码可以自动推送到测试环境基于Docker服务运行,需要添加Docker配置和脚本文件让程序可以在集成到主干的同时运行起来。

7.1 持续集成
7.1.1 添加Dockerfile文件

FROM adoptopenjdk/openjdk8
COPY helloWorld.jar /usr/local
WORKDIR /usr/local
CMD java -jar helloWorld.jar

7.1.2 添加docker-compose.yml文件

version: '3.1'
services:
  helloworld:
    build: ./
    image: helloWorld:v1.0.0
    container_name: demo
    ports:
      - 8888:8080 #把docker中的8080端口映射到主机的8888端口

为了防止各种奇奇怪怪的问题,一下两个配置尽量打开:
image
image
同时需要给你连接的用户增加docker权限。
7.1.3 追加Jenkins构建后操作脚本命令
image

3.3 持续交付/部署

程序代码在经过多次集成操作到达最终可以交付,持续交付整体流程和持续集成类似,不过需要选取指定的发行版本
1.在Jenkins中下载Git Parameter插件
image
2.在任务中进行配置(Gerneral/参数化构建过程/选择Git参数)
image
3.在gitLab上给项目添加tag版本
image
4.任务构建时,采用Shell方式构建,拉取指定tag版本
image

4.Sonar Qube

4.1 Sonar Qube介绍与按照

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

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

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

1.拉取PostgreSQL 镜像

docker pull postgres
docker pull sonarqube:8.9.3-community

2.编写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

3.设置sysctl.conf文件信息,并启动容器

vi /etc/sysctl.conf

设置vm.max_map_count=262411,至少是这个数

#执行命令进行刷新
sysctl -p
#启动容器
docker-compose up -d

重新启动需要一定时间,可以查看容器日志,如果看到如下内容代表启动成功
image

4.访问Sonar Qube首页
默认用户名和密码为admin
image
修改密码进入页面如图
image
安装中文插件
image
image
安装成功重启即可

4.2sonarQube基本使用(windows maven)

整合Maven实现代码检测:
修改本地Maven的setting.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>

在代码所在位置的cmd执行命令mvn sonar:sonar
便可以在页面中看到分析结果
image

4.3sonarQube基本使用(linux)

1.下载对应版本Sonar-scanner: https://docs.sonarqube.org/latest/analysis/scan/sonarscanner/
2.解压

# 安装uzip解压插件
yum -y install unzip
# 解压压缩包
unzip sonar-scanner-cli/

3.配置sonarQube服务端地址,修改conf下的sonar-scanner.properties

#Configure here general information about the environment, such as SonarQube server connection details for example
#No information about specific project should appear here
sonar.login=admin

sonar.password=123456
#----- Default SonarQube server
sonar.host.url=http://localhost:9000

#----- Default source code encoding
sonar.sourceEncoding=UTF-8

4.在代码目录下执行命令检测代码(需要有源代码)

# 在项目所在目录执行以下命令
~/sonar-scanner/bin/sonar-scanner -Dsonar.sources=./ -Dsonar.projectname=demo -Dsonar.projectKey=java -Dsonar.java.binaries=target/

4.4Jenkins集成Sonar Qube

Jenkins集成Sonar Qube实现代码扫描需要下载整合插件
1.安装SonarQube Scanner插件
image
2.在SonarQube中开启Sonar Qube的权限验证
image
在Sonar Qube中生成一个令牌,获取Sonar Qube的令牌
image
复制后在Jenkins中配置Sonar Qube信息
image
点击全局:
image
image
点击create
image
在Jenkins中的全局工具配置中配置SonarQube Scanner
将Sonar-scanner添加到Jenkins数据卷中并全局配置
配置任务的Sonar-canner
image
image

5.Harbor(镜像仓库)

前面我们在部署时,主要流程如下:

Jenkins推送jar包到服务器
通过脚本命令让目标服务器对当前jar进行部署
但是这种方式在项目比较多的时候,每个服务器都需要将jar包制作成自定义镜像,然后再通过docker进行启动,重复操作较多,降低部署效率。

Harbor:私有的Docker镜像仓库。我们可以让Jenkins统一将项目打包并制作成Docker镜像发布到Harbor仓库中。然后我们只需要通知目标服务,让目标服务统一去Harbor仓库上拉取镜像并在本地部署即可。

1.安装(通过原生的方式安装)

1.下载Harbor安装包
https://github.com/goharbor/harbor/releases/download/v2.3.4/harbor-offline-installer-v2.3.4.tgz

2.传送到linux上并解压

# 通过xftp或其他方式将压缩包传送到linux上
# 解压
tar -zxvf harbor-offline-installer-v2.3.4.tgz -C /usr/local/

3.修改Harbor配置文件
设置harbor地址,注释https,查看密码

# 备份原有配置
cp harbor.yml.tmpl harbor.yml

4.启动Harbor并登录Harbor

# 启动Harbor
./install.sh

image

2.基础使用

Harbor作为镜像仓库,主要的交互方式就是将镜像上传到Harbor,以及从Harbor上下载拉取指定版本的镜像。
在传输镜像前,可以先使用Harbor提供的权限管理,将项目设置为私有项目,并对不同用户设置不同角色,从而更方便管理镜像。

2.1添加用户构建项目

创建用户
image
构建项目
image
点击进入项目,给项目增加成员
image

2.2发布镜像到Harbor

1.修改镜像名称

docker tag helloworld:v1.0.0 192.168.1.105:90/repository/helloworld:v1.0.0

2.修改daemon.json,支持Docker仓库,并重启Docker

vi /etc/docker/daemon.json

添加如下内容

{
        "registry-mirrors": ["https://pee6w651.mirror.aliyuncs.com"],
        "insecure-registries": ["192.168.1.105:80"]
}

重启dockersystemctl restart docker
3.设置登录仓库信息

docker login 192.168.1.105:80

输入用户名,密码即可(端口号不能省略)
4.推送镜像到Harbor

docker push 192.168.1.105:80/repository/helloworld:v1.0.0

image

2.3拉取镜像

docker pull 192.168.1.105:80/repository/helloworld:v1.0.0

扩展

Jenkins容器使用宿主机Docker并编写构建脚本
构建镜像和发布镜像到harbor都需要使用到docker命令。而在Jenkins容器内部安装Docker官方推荐直接采用宿主机带的Docker即可。
1.设置宿主机docker.sock权限

sudo chown root:root /var/run/docker.sock
sudo chmod o+rw /var/run/docker.sock

2.添加数据卷

version: "3.1"
services:
  jenkins:
    image: jenkins/jenkins
    container_name: jenkins
    ports:
      - 8080:8080
      - 50000:50000
    volumes:
      - ./data/:/var/jenkins_home/
      - /data/docker/jdk1.8.0_381/:/var/java/
      - /data/docker/apache-maven-3.9.4/:/var/maven/
      - /usr/bin/docker:usr/bin/docker
      - /var/run/docker.sock:/var/run/docker.sock
      - /etc/docker/daemon.json:/etc/docker/daemon.json
    user: root

3.编写构建脚本
部署项目需要通过Publish Over SSH插件,让目标服务器执行命令。为了方便一次性实现拉取镜像和启动的命令,推荐采用脚本文件的方式。
添加脚本文件到目标服务器,再通过Publish Over SSH插件让目标服务器执行脚本即可。
编写脚本文件,添加到目标服务器:
deploy.sh:

harbor_url=$1
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

docker login -u DevOps -p P@ssw0rd $harbor_url

docker pull $imageName

docker run -d -p $port:$port --name $project_name $imageName

echo "Start Container Success"
echo $project_name

4.设置脚本权限

chmod a+x deploy.sh

配置构建后操作

标签:镜像,compose,devops,关于,jenkins,Sonar,Jenkins,docker,搭建
From: https://www.cnblogs.com/rhy2103/p/17696057.html

相关文章

  • Qt/C/C++ 项目工程架构搭建设计经验
    摘要  独立负责一个Qt项目和经过前辈的教导后的一些架构搭建感悟,其中的各种理念对其他语言开发的项目也能有一定的互通,能带来更舒适的开发体验,谨代表个人开发的经验之谈,有需要的小伙伴酌情获取,辩证思考。也欢迎小伙伴们在评论区纠错补充。  关键词:C/C++、Qt、搭建框架、更......
  • 关于 K 维空间中整点之间曼哈顿距离最短路径计数问题
    约定\(K\)维空间中,整点的坐标以\(K\)个整数表示,形如\[Point\left(X_1,X_2,\cdots,X_k\right)\]定义两个点的曼哈顿距离为每一维坐标差的绝对值之和,记为\[MD\left(A,B\right)=\sum_{i=1}^{K}\left|{X_{i_A}-X_{i_B}}\right|\]定义两个点\(A\),\(B\)相邻当且仅当......
  • 关于一款软硬一体的RTSP/Onvif协议视频平台EasyNVR安防视频监控平台的介绍
    EasyNVR是一种网络视频录像机(NetworkVideoRecorder),属于软硬一体的产品,支持RTSP/ONVIF协议接入,体积小巧,通电连网即可成功运行,部署操作简单,低功耗,支持7x24小时不间断运行,省去自建视频服务器的高额费用,专属视频服务,免除了与其他硬件的相互影响,可云端运维。作为一种专业的视频监......
  • 关于 git 的问题整理
    有关git的问题是越来越多,总是靠脑子记不住,还是写个随笔吧==git推送或获取提示报错Failedtoconnecttogithub.comport443:Timedout还是OpenSSLSSL_read:Connectionwasaborted,errno10053问题好像是网络问题解决思路如下:1关闭防火墙;有的时候其实电脑git的配置没......
  • 直播软件搭建,利用原生JS实现回到顶部以及吸顶效果
    直播软件搭建,利用原生JS实现回到顶部以及吸顶效果  <style>    .box1{      width:1200px;      height:800px;            margin:0auto;    }    .box2{      width:1200px; ......
  • 图文结合丨Prometheus+Grafana+GreatSQL性能监控系统搭建指南(下)
    一、环境介绍本文环境,以及本文所采用数据库为GreatSQL8.0.32-24$cat/etc/system-releaseRedHatEnterpriseLinuxServerrelease7.9(Maipo)$uname-aLinuxgip3.10.0-1160.el7.x86_64#1SMPTueAug1814:50:17EDT2020x86_64x86_64x86_64GNU/Linux$ldd--......
  • 轻松掌握组件启动之MongoDB(番外篇):高可用复制集架构环境搭建-mtools
    引言在前两章节中,我们详细讲解了如何手动配置启动MongoDB。然而,现在有许多不同的工具可以帮助我们更方便地启动和创建MongoDB数据库。因此,今天我将介绍一个名为mtools的开源项目,它可以帮助我们更轻松地启动MongoDB。mtools介绍官方文档地址:mtoolsmtools是一个基于Python实现的......
  • ubuntu下qt环境搭建
    Ubuntu20.04环境下安装Qtlibrary5.9.71. 下载前的准备工作a) 安装依赖库,虚拟机联网,在命令窗口输入sudoapt-getinstalllibfontconfig1-devlibfreetype6-devlibx11-devlibxcursor-devlibxext-devlibxfixes-devlibxft-devlibxi-devlibxrandr-devlibxrender-dev回车......
  • 关于STM32 HAL库版本IAP升级跳转一直进入HAL_Delay()函数;只需要在升级 程序中加入如下
    __set_FAULTMASK(1);/*setvectortable/SCB->VTOR=FLASH_BASE|0x1F800;///USERCODEEND1*//*MCUConfiguration--------------------------------------------------------//Resetofallperipherals,InitializestheFlashinterfaceandtheSystick......
  • DevOps2023现状报告|注重文化、以用户为中心是成功的关键
    GoogleCloudDORA团队的一份新研究报告强调了企业文化和关注用户作为成功软件交付支柱的重要性。 2023DevOps状况报告分析了过去9年来通过此类最大规模调查收集的全球36,000多名IT专业人员的数据。今年的报告是继2022年调查之后发布的,该调查发现越来越多的人采用工......