• DevOps-Jenkins-CI持续集成操作


    创建项目

    创建个web项目
    在这里插入图片描述
    我这里直接用Spring Web自动生成的demos

    在这里插入图片描述

    启动项目,访问展示如下默认页面信息

    在这里插入图片描述

    项目新增Docker构建配置

    在项目下新建docker目录,新增Dockerfile、docker-compose.yml文件

    在这里插入图片描述

    Dockerfile文件,将mytest.jar 复制到容器的/usr/local/目录下,在/usr/local执行命令java -jar mytest.jar

    FROM daocloud.io/library/java:8u40-jdk
    COPY mytest.jar /usr/local/
    WORKDIR /usr/local
    CMD java -jar mytest.jar
    
    • 1
    • 2
    • 3
    • 4

    docker-compose.yml文件,当前目录以Dockerfile构建镜像,镜像叫mytest,版本v1.0,容器名字mytest,端口7777

    version: '3.1'
    services:
      mytest:
        build:
          context: ./
          dockerfile: Dockerfile
        image: mytest:v1.0
        container_name: mytest
        ports:
          - 7777:8080
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    修改pom.xml文件

    build下添加配置,让jar包以mytest为名(mytest.jar,Docker构建里也是设置的复制名为这个jar包)

    mytest
    
    • 1

    在这里插入图片描述
    注意:如果跟我一样用默认生成的web还需修改主类配置,将主类配置修改如下。不然在本地正常运行,打成jar包后默认配置会跳过然后报错:no main manifest attribute, in mytest.jar

                    
                        
                            
                                true
                                com.monster.mytest.MytestApplication
                            
                        
                    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    上传代码

    将代码上传至Gitlab
    现在Gitlab还未做任何动作,先去Gitlab(192.168.170.111:8888)新建项目
    这里测试我直接设置的公开的,不想多一步密码的操作
    在这里插入图片描述
    在IDEA添加Git远程

    在这里插入图片描述
    推送到远程仓库

    在这里插入图片描述
    第一次推送会提示要令牌
    在这里插入图片描述
    那我们就去Gitlab生成个令牌,来到用户设置里面 > Access Tokens
    Token名称随意,必须授权api、read_user这两个范围,点击创建即可

    在这里插入图片描述
    点击创建按钮后,不要刷新或关闭页面,立马滑到最上面可以看见生成的token
    只展示一次,刷新或关闭页面就得重新生成。

    在这里插入图片描述
    将token复制到IDEA提示的令牌款里既可以推送到Gitlab仓库了。

    在这里插入图片描述
    在这里插入图片描述

    Jenkins配置

    添加远程服务器

    首先来到Jenkins配置 > 系统管理 > 系统配置,滑动到最下面添加SSH远程服务器,这里就是Publish Over SSH插件起到的重要。

    将你需要把项目部署到哪台服务器,就添加哪台服务器的链接信息,例如这里我把项目部署到服务器192.168.170.111上(注意:部署的远程服务器需要安装好Docker)

    设置好信息可以点击右下角的test configuration 测试一下连通性,是否能正常连接。

    在这里插入图片描述
    密码得点击左下角的“高级”按钮设置,支持使用密钥对的方式远程连接。

    在这里插入图片描述

    Jenkins任务创建

    新建个任务,构建一个自由风格的软件项目

    在这里插入图片描述
    源码管理处设置你的git仓库地址,我这里设置的公开仓库拉去代码的时候无需账号密码,私有的点击高级按钮上面的“添加”按钮添加账号或密钥

    在这里插入图片描述
    需要注意你的Gitlab仓库的主分支是什么,设置对应不然拉去不到代码
    在这里插入图片描述

    Build Steps设置maven,选中你安装的maven名称,目标命令:拉取完代码后清理构建跳过测试生产target目录此时还在Jenkins服务器。

    clean package -DskipTests
    
    • 1

    在这里插入图片描述

    SSH Publishers,选择我们要发布到哪台服务器上,就是前面在添加的170.111那台,配置命令做了下面两个步骤。

    Transfer SetSource files:将target目录下所有.jar的文件和docker目录下的所有文件复制到远程应用服务器的/usr/local/test目录下。(Jenkins系统设置里面SSH添加服务器时设置的默认远程路径)

    target/*.jar docker/*
    
    • 1

    Exec command:这时170.111的/usr/local/test/目录下有target和docker两个目录。执行下面的代码命令把target目录下人jar包移动到Docker目录里来,然后在执行容器关闭和后台启动构建动作

    cd /usr/local/test/docker
    mv ../target/*jar ./
    docker compose down
    docker compose up -d --build
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

    Jenkins构建

    点击Jenkins任务构建按钮,观看日志成功

    [INFO] ------------------------------------------------------------------------
    [INFO] BUILD SUCCESS
    [INFO] ------------------------------------------------------------------------
    [INFO] Total time:  2.906 s
    [INFO] Finished at: 2024-03-11T09:03:12Z
    [INFO] ------------------------------------------------------------------------
    SSH: Connecting from host [3821aea39450]
    SSH: Connecting with configuration [应用服务器-170.111] ...
    SSH: EXEC: completed after 3,402 ms
    SSH: Disconnecting configuration [应用服务器-170.111] ...
    SSH: Transferred 3 file(s)
    Build step 'Send files or execute commands over SSH' changed build result to SUCCESS
    Finished: SUCCESS
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    构建完成后,会看见在170.111服务器跑起来个名称叫mytest容器,映射端口7777,镜像mytest,版本v1.0

    在这里插入图片描述

    访问页面,192.168.170.111:7777

    在这里插入图片描述

    测试持续集成

    修改项目代码

    这里我修改默认的index.html页面内容

    在这里插入图片描述
    只需要把交代码提交到Gitlab

    在这里插入图片描述
    然后在Jenkins上,重新点击一下构建按钮,构建完成后刷新页面。

    已经更新页面内容了,到此完成了CI持续集成动作。

    在这里插入图片描述

    注意

    由于每次构建都会产生一个同名称同版本的镜像,导致出现多个为none的镜像,会占用磁盘空间

    [root@170.111 ~]# docker images
    REPOSITORY                                                  TAG            IMAGE ID       CREATED         SIZE
    mytest                                                      v1.0           79953e7736f6   19 hours ago    833MB
                                                                   341965b30bdb   19 hours ago    833MB
                                                                   5be66eda3a9f   21 hours ago    833MB
                                                                   76502810f6e2   21 hours ago    833MB
                                                                   a081353ee813   46 hours ago    816MB
                                                                   6274e74dbfe5   46 hours ago    816MB
                                                                   92517e725bf1   47 hours ago    816MB
                                                                   3e2cef065c83   47 hours ago    816MB
                                                                   62562f7fbc8f   47 hours ago    816MB
                                                                   cd7354c84a9e   2 days ago      816MB
                                                                   27e5c4ec8cf6   2 days ago      816MB
                                                                   4c0050b78b5f   2 days ago      816MB
                                                                   02a8eea88e51   2 days ago      816MB
                                                                   fb76f18fc433   2 days ago      816MB
                                                                   6a0d37f91dc0   2 days ago      816MB
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    可以通过Docker命令清理:docker image prune -f

    [root@170.111 ~]# docker image prune -f
    Deleted Images:
    deleted: sha256:92517e725bf1e5d7da3c1dda813abd0ecfb384e42e24274d688f178edb3274a5
    deleted: sha256:6274e74dbfe5859d0c524cf944f4d6367f7ccb838b6959a2305cb3074a7a5db2
    deleted: sha256:3e2cef065c83863c4fc72c6daaa91ad863ffb6169da989401439edd7b84da217
    deleted: sha256:974684128082884b37b1ed66bdc92a0df158c46651bcc72a10016bc8254f5cc5
    deleted: sha256:6a0d37f91dc07c88d018a2e5416a4421dacc03299d16af79fdac03863753cff5
    deleted: sha256:ade3c592595e3988a9a11cecfc153d03c9125b3e0c24f0cdaf642cfadebd659a
    deleted: sha256:27e5c4ec8cf67ea3e8fc1bf2e18328a63515d19332808480e263732347db96bf
    deleted: sha256:4c0050b78b5f40dd2f005f92f7733c92f2ed8618e6e8deedcf72695795d2e07a
    deleted: sha256:052d315bd2eb53b89eee437218b2abf0dc1a53db7fd6122fc8c56dcf8b0afb60
    deleted: sha256:cd7354c84a9e307819628e3c7ac23c7d0d5a84783c659c3b85355f22fb12673e
    deleted: sha256:6923a5cc1787c1a985feeec6efdb28ddb202cad65e6f3454bd2a08e8f1573326
    deleted: sha256:02a8eea88e51a5874b2fbd14e267f717398251dc34f073ea5ca1bed4cf2c514e
    deleted: sha256:62562f7fbc8f6f059072855fec452aa9ffd4927f130a069c59a0ee097b5d5ab4
    deleted: sha256:a081353ee81397bb5464a44409248d0c192e7b57eb247af4ad74ef7f4454da68
    deleted: sha256:0461e94f875334812d180c094c2a998d89ae74da08b6f34b0cedcdaf755126de
    deleted: sha256:341965b30bdba2baabdddcdf3d5e3e98ff3c58eb696fe186c40646d05ffe7d9d
    deleted: sha256:fb76f18fc433d3fbf8aa42dc0e2ee8dfaad6ee722fd1390288c37b7591cd7563
    deleted: sha256:5be66eda3a9f5fbb5284e6e785a9cb5ac2484c6d5c53491d595a89192ca6aea3
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    也加到Jenkins执行命令中,就不用我们手动去清理了

    在这里插入图片描述

  • 相关阅读:
    vue2(vuecli5)+预渲染插件prerender-spa-plugin-next解决seo问题
    GBase 8a性能优化之资源管理
    C/C++学校运动会管理系统
    DBeaver报错:can‘t load driver class ‘com.mysql.cj.jdbc.Driver‘
    【我的OpenGL学习进阶之旅】着色器GLSL运行时报错 GLSL compile error: Premature end of line
    【Kaggle竞赛总结】ECCV2020全球小麦检测(Global Wheat Detection)竞赛总结
    Linux下du指令详情介绍
    鸿蒙开发工具的汉化
    D. Reverse Sort Sum(思维 + 差分 + 树状数组)
    国产信创服务器如何进行安全可靠的文件传输?
  • 原文地址:https://blog.csdn.net/qq_42259469/article/details/136655817