关于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
配置构建后操作
posted on 2023-10-18 14:58 生活的样子就该是那样 阅读(75) 评论(0) 编辑 收藏 举报