关于devops系统的搭建
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
效果:
4.查看初始的用户的用户名和密码
docker exec -it gitlab cat /etc/gitlab/initial_root_password
5.登录并修改密码
用户名为:root 密码为上一步查询到的密码
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
3.2使用
准备好GitLab仓库中的项目,并且通过Jenkins配置实现当前项目的DevOps流程。(Idea创建之后推送到远程即可)
1.构建Maven工程发布到GitlLab、Gitee、GitHub均可
2.点击Jenkins左侧新建任务(选择自由风格的项目)
3.配置源码拉取地址
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文件
将jdk、maven,通过数据卷映射到Jenkins容器内部
配置完成后需要用 docker-compose up -d
重新加载容器
可进入容器内部验证是否映射进容器中
docker exec -it jenkins bash
在Jenkins中对jdk和maven进行配置
6.配置Jenkins任务构建代码
7.配置完后点立即构建,查看控制台输出
可在此处查看构建成功的jar包
构建成功:
成功后便可以进行发布测试
8.此处需要Publish Over SSH(如果未安装,可在插件管理中进行安装)
配置Publish Over SSH
配置Publish Over SSH连接测试环境、生产环境
配置完成后对任务进行配置
再次进行构建:
显示如上信息,在服务器中看到文件,便表示构建成功,如果出现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端口
为了防止各种奇奇怪怪的问题,一下两个配置尽量打开:
同时需要给你连接的用户增加docker权限。
7.1.3 追加Jenkins构建后操作脚本命令
3.3 持续交付/部署
程序代码在经过多次集成操作到达最终可以交付,持续交付整体流程和持续集成类似,不过需要选取指定的发行版本
1.在Jenkins中下载Git Parameter插件
2.在任务中进行配置(Gerneral/参数化构建过程/选择Git参数)
3.在gitLab上给项目添加tag版本
4.任务构建时,采用Shell方式构建,拉取指定tag版本
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
重新启动需要一定时间,可以查看容器日志,如果看到如下内容代表启动成功
4.访问Sonar Qube首页
默认用户名和密码为admin
修改密码进入页面如图
安装中文插件
安装成功重启即可
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
便可以在页面中看到分析结果
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插件
2.在SonarQube中开启Sonar Qube的权限验证
在Sonar Qube中生成一个令牌,获取Sonar Qube的令牌
复制后在Jenkins中配置Sonar Qube信息
点击全局:
点击create
在Jenkins中的全局工具配置中配置SonarQube Scanner
将Sonar-scanner添加到Jenkins数据卷中并全局配置
配置任务的Sonar-canner
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
2.基础使用
Harbor作为镜像仓库,主要的交互方式就是将镜像上传到Harbor,以及从Harbor上下载拉取指定版本的镜像。
在传输镜像前,可以先使用Harbor提供的权限管理,将项目设置为私有项目,并对不同用户设置不同角色,从而更方便管理镜像。
2.1添加用户构建项目
创建用户
构建项目
点击进入项目,给项目增加成员
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
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
配置构建后操作
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?