参考:https://blog.csdn.net/DZP_dream/article/details/107004191

作为一名java方向的小白,初次学习DevOps,经过几天的研究,终于实现了持续集成部署功能,这里作一个简单的记录,文中如果有某些地方有错误,还请各位指出

机器环境:Vmware、Centos 7

elasticsearch安装

1、安装Docker

  • 安装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
    

    为了镜像文件下载更快,配置阿里镜像加速器

    • 进入阿里云容器镜像服务(这里使用我自己的来演示)

    • 镜像加速器

    • 复制相应代码

      • 也可以通过修改daemon配置文件/etc/docker/daemon.json来使用加速器
      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"]
      }
      

2、安装Git

这里使用源码安装

  • 安装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
    

3、安装Maven

与windows安装maven类似,不作过多叙述

  • 下载maven

    wget url地址

  • 配置环境变量

    vim /etc/profile

  • 修改maven配置文件

    本地仓库地址、镜像地址

4、安装registry

参考: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

image-20201010170813692

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"]}

5、安装gitlab

使用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

image-20201007165454886

需要设置一个密码(至少8位)123456ye

注意:在使用git clone命令时,不能使用ssh协议,否则会一直提示输入密码,使用http协议就可以正常使用了

使用Maven构建镜像文件

pom文件中添加构建镜像的插件

<!-- 打包跳过测试 -->
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <configuration>
        <skipTests>true</skipTests>
    </configuration>
</plugin>

<plugin>
    <groupId>com.spotify</groupId>
    <artifactId>docker-maven-plugin</artifactId>
    <version>1.0.0</version>
    <!--docker镜像相关配置-->
    <configuration>

        <dockerDirectory>${project.basedir}/src/main/resources</dockerDirectory> <!-- 指定 Dockerfile 路径-->
        <imageTags>
            <imageTag>${project.version}</imageTag>
        </imageTags>

 
       <!--推送仓库 ,这里暂时可以注释-->
       
        <registryUrl>192.168.37.153:5000</registryUrl>
        <pushImage>true</pushImage>
        <!--镜像名,这里用工程名-->
        <imageName>192.168.37.153:5000/${project.artifactId}</imageName>
 		
        <!-- 这里是复制 jar 包到 docker 容器指定目录配置,也可以写到 Docokerfile 中 -->
        <resources>
            <resource>
                <targetPath>/</targetPath>
                <directory>${project.build.directory}</directory>
                <include>${project.artifactId}-${project.version}.jar</include>
            </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
# 直接构建容器测试是否能够正常访问

6、安装Jenkins

docker创建容器

# 拉取镜像
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)]

接下来选择推荐安装,等待安装完成

image-20201008201832775

安装完成后,设置用户信息

image-20201008202453352

配置jenkins

在管理插件中搜索GitLab、Gitlab Hook安装上他(可能会安装失败,多测试几次就好了)

下面配置访问相关的信息

image-20201008210355418

在全局安全配置中开启用户注册,以及授权所有用户

image-20201008202844792

关闭跨站请求伪造,

image-20201009234839520

在全局工具配置中设置maven,jdk

image-20201008210158360

image-20201008210213348image-20201008210237363

其他的可以省略配置

构建任务

image-20201008215638927

添加GIT仓库

image-20201008220526052

image-20201008215831924

设置触发器

点击构建触发器选项

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(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)]

添加构建步骤

image-20201008220659074

第一个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)]

GitLab配置

  1. 在设置中将Allow requests to the local network……勾选上,否则webhook请求时会提示无法访问local network

image-20201009234237240

  1. 配置webhook

    image-20201010112959688

  2. 在下面的URL中填入jenkins中复制的url,保存即可

image-20201010113132619

  1. 测试触发

    点击下面的Test、push events

    image-20201010113305045

    成功的话将显示200的状态码

image-20201010113358407

这里可能会报403,在Jenkins 的系统管理–>系统配置,将这里的√取消

image-20201010113743492

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐