参考:https://blog.csdn.net/DZP_dream/article/details/107004191
作为一名java方向的小白,初次学习DevOps,经过几天的研究,终于实现了持续集成部署功能,这里作一个简单的记录,文中如果有某些地方有错误,还请各位指出
机器环境:Vmware、Centos 7
安装docker相关工具包
#
$ sudo yum install -y yum-utils
#设置镜像源
$ sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
#阿里的镜像源
yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#如果配置错了镜像源,可以在 /etc/yum.repos.d,中删除没有用的镜像源
docker引擎:
yum install -y docker-ce docker-ce-cli containerd.io
注意: linux8 会提示contains-io版本问题:
#升级contains-io后即可解决
yum install -y https://mirrors.aliyun.com/docker-ce/linux/centos/7/x86_64/edge/Packages/containerd.io-1.2.13-3.2.el7.x86_64.rpm
查看版本信息:
[root@iZ2ze8nyz28va3cc6eeq3mZ ~]# docker -v
Docker version 19.03.9, build 9d988398e7
启动docker:
systemctl start docker
为了镜像文件下载更快,配置阿里镜像加速器
进入阿里云容器镜像服务(这里使用我自己的来演示)
镜像加速器
复制相应代码
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://oslol88t.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
#修改后的文件在/etc/docker/daemon.json,可以通过这个文件来直接修改
{
"registry-mirrors": ["https://vbv2dz2y.mirror.aliyuncs.com"]
}
这里使用源码安装
安装git环境所需要的依赖包
yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel perl-devel gcc-c++
下载最新的源码包
下载地址:https://github.com/git/git/archive/v2.29.0-rc0.tar.gz
# 可以使用命令wget https://github.com/git/git/archive/v2.29.0-rc0.tar.gz直接下载到linux上,也可以使用本机下载好后上传到linux
#新建一个git目录
mkdir -p /usr/local/git
# 上传文件到上面的目录,解压文件
tar -zxvf git-2.29.0-rc0.tar.gz
# 进入解压后的目录
cd git-2.29.0-rc0.tar
# 使用make命令编译并安装(可以修改prefix的值来指定编译目标目录)
make prefix=/usr/local/git all
make prefix=/usr/local/git install
# 添加环境变量
vim /etc/profile
# 在最下面添加如下命令
export GIT_HOME=/usr/local/git
export PATH=$GIT_HOME/bin:$PATH
# 让环境变量生效
source /etc/profile
# 查看git版本信息
git --version
与windows安装maven类似,不作过多叙述
下载maven
wget url地址
配置环境变量
vim /etc/profile
修改maven配置文件
本地仓库地址、镜像地址
参考:https://blog.csdn.net/twingao/article/details/81042563
这里安装registry主要是为了将每个版本的镜像保存到私有仓库中,也可以省略这个步骤
# --restart=always:表示每次启动docker后自动启动容器
docker run -d --name=registry -p 5000:5000 -v /home/registry:/var/lib/registry --restart=always --privileged=true registry
# 修改/usr/lib/systemd/system/docker.service
vim /usr/lib/systemd/system/docker.service
# 最终效果如下图
ExecStart=/usr/bin/dockerd --insecure-registry 192.168.37.153:5000 -H fd:// --containerd=/run/containerd/containerd.sock -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
push进行测试
# 随便找一个镜像进行tag标记,指定归档到仓库地址
[root@localhost demo]# docker tag registry:latest 192.168.37.153:5000/registrytest:1.0
# push进入本地仓库
[root@localhost demo]# docker push 192.168.37.153:5000/registrytest:1.0
# 查看是否存在镜像
# 查看仓库列表
# curl http://192.168.37.153:5000/v2/_catalog
{
"repositories":["registrytest"]}
# 查看镜像标签列表
curl http://192.168.37.153:5000/v2/registrytest/tags/list
{
"name":"registrytest","tags":["1.0"]}
使用docker安装gitlab
# 启动docker
systemctl start docker
# 拉取gitlab
docker pull gitlab/ce
# 创建挂载目录,将gitlab中的数据挂载到宿主机上,防止docker 关闭后数据清空
# 用于保存一些配置文件
mkdir -p /home/gitlab/etc
# 数据文件
mkdir -p /home/gitlab/data
# 日志信息
mkdir -p /home/gitlab/log
# 启动容器
docker run -d --name='gitlab' -p 4443:443 -p 80:80 -p 222:22 -v /home/gitlab/etc:/etc/gitlab -v /home/gitlab/data:/var/opt/gitlab -v /home/gitlab/logs:/var/log/gitlab gitlab/gitlab-ce
# 可以通过docker logs -f gitlab来查看启动的日志信息
修改gitlab的配置信息
# 修改gitlab/etc/gitlab.rb
cd /home/gitlab/etc/
# 配置部署机器的ip或域名,默认端口80
vim gitlab.rb
external_url '192.168.37.153'
# 进入gitlab/data配置gitlab.yml
cd /home/gitlab/data/gitbal-rails/etc
vim gitlab.yml
gitlab:
## Web server settings (note: host is the FQDN, do not include http://)
# 映射到外面的ip地址
host: 192.168.37.153
port: 80
https: false
使用浏览器访问
192.168.37.153:8888
需要设置一个密码(至少8位)123456ye
注意:在使用git clone命令时,不能使用ssh协议,否则会一直提示输入密码,使用http协议就可以正常使用了
pom文件中添加构建镜像的插件
<plugin>
<groupId>org.apache.maven.pluginsgroupId>
<artifactId>maven-surefire-pluginartifactId>
<configuration>
<skipTests>trueskipTests>
configuration>
plugin>
<plugin>
<groupId>com.spotifygroupId>
<artifactId>docker-maven-pluginartifactId>
<version>1.0.0version>
<configuration>
<dockerDirectory>${project.basedir}/src/main/resourcesdockerDirectory>
<imageTags>
<imageTag>${project.version}imageTag>
imageTags>
<registryUrl>192.168.37.153:5000registryUrl>
<pushImage>truepushImage>
<imageName>192.168.37.153:5000/${project.artifactId}imageName>
<resources>
<resource>
<targetPath>/targetPath>
<directory>${project.build.directory}directory>
<include>${project.artifactId}-${project.version}.jarinclude>
resource>
resources>
configuration>
plugin>
添加Dockerfile文件,在pom文件指定的目录添加(这里是resources下)
FROM java:8
VOLUME /tmp
ADD demo-0.0.1-SNAPSHOT.jar app.jar
RUN bash -c 'touch /app.jar'
ENTRYPOINT ["java", "-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
# clone项目到服务器中
git clone http://----
# 进入项目文件夹,使用maven打包
cd devopsDemo
mvn -f pom.xml clean package -DskipTests docker:build
# 等待完成后,查看docker images,将会发现两个demo镜像,一个snapshop,一个lastest
# 直接构建容器测试是否能够正常访问
# 拉取镜像
docker pull jenkins/jenkins
# 宿主机创建一个目录
mkdir /home/jenkins_home
# 创建容器
# 注意挂载路径必须是本地上安装好的目录
docker run -d --name jenkins -u root -p 8080:8080 -p 50000:50000 -v /usr/bin/docker:/usr/bin/docker -v /var/run/docker.sock:/var/run/docker.sock -v /etc/sysconfig/docker:/etc/sysconfig/docker -v /usr/java/jdk1.8.0_231-amd64:/usr/java/jdk8 -v /usr/local/maven/apache-maven-3.6.3:/usr/local/maven/apache-maven-3.6.3 -v /usr/local/maven/mavenRepository:/usr/local/maven/mavenRepository \
-v /home/jenkins_home:/var/jenkins_home \
--restart=always \
--privileged=true \
jenkins/jenkins
使用docker logs -f jenkins 可以得到下面日志信息,会发现一个随机密码串,输入到jenkins的页面中,
也可以通过docker exec -it jenkins bash进入容器内部,打开initialAdminPassword来查看
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-03rSOJHj-1602324120163)(http://qiniu.qiangly.top/20201010180009.png)]
接下来选择推荐安装,等待安装完成
安装完成后,设置用户信息
在管理插件中搜索GitLab、Gitlab Hook安装上他(可能会安装失败,多测试几次就好了)
下面配置访问相关的信息
在全局安全配置中开启用户注册,以及授权所有用户
关闭跨站请求伪造,
在全局工具配置中设置maven,jdk
其他的可以省略配置
添加GIT仓库
设置触发器
点击构建触发器选项
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-k7s6p11X-1602324120183)(DevOps实践.assets/image-20201010112445544.png)]
如果之前的GitLab、GitLab hook的没有安装成功,这里可能不会显示Build when a change is….
最开始我是使用的触发远程构建方式,但是在gitLab中使用webHook触发始终报403,百度很久没用解决,最终就换了这种方式
将图中url链接复制下来
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AgdZGc6r-1602324120184)(http://qiniu.qiangly.top/20201010180054.png)]
添加构建步骤
第一个shell脚本
#!/bin/bash
result=$(docker ps | grep "demo")
if [[ "$result" != "" ]]
then
echo "stop demo"
docker stop demo
fi
result=$(docker ps -a | grep "demo")
if [[ "$result" != "" ]]
then
echo "rm demo"
docker rm demo
fi
result2=$(docker images | grep "192.168.37.153:5000/demo")
if [[ "$result2" != "" ]]
then
echo "192.168.37.153:5000/demo:0.0.1-SNAPSHOT"
# awk 表示过滤,只把镜像id显示出来,进行删除,必须强制删除
docker rmi -f $(docker images | grep "192.168.37.153:5000/demo" | awk '{print $3}')
fi
镜像打包命令:
# 可能要去掉mvn,默认会加上mvn命令,具体根据jenkins构建时控制台显示的信息来修改
mvn -f pom.xml clean package -DskipTests docker:build
容器构建命令:
docker run -di --name demo -p 7070:7070 192.168.37.153:5000/demo:0.0.1-SNAPSHOT
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZKFHHUOJ-1602324120186)(http://qiniu.qiangly.top/20201010180102.png)]
这里可能会报403,在Jenkins 的系统管理–>系统配置,将这里的√取消