【网课平台】Day15.Devops:持续集成与持续交付

这篇具有很好参考价值的文章主要介绍了【网课平台】Day15.Devops:持续集成与持续交付。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、Devops

1、什么是Devops

一个软件的生命周期包括:需求分析阶、设计、开发、测试、上线、维护、升级、废弃。详细如下:

  • 产品人员进行需求分析
  • 设计人员进行软件架构设计和模块设计
  • 每个模块的开发人员并行开发,设计接口、进行编码,并进行单元测试
  • 开发完毕,将代码集成部署到测试服务器,测试人员进行测试
  • 测试人员发现bug,提交bug、开发人员修改bug
  • bug修改完毕再次集成、测试
  • 测试完毕,项目上线
  • 运维人员进行安装部署、培训
  • 用户提出问题,返回给运维人员
  • 运维人员反馈给开发人员,开发人员进行问题处理
  • 再次提交测试
  • 测试完毕再次部署升级

整个生命周期中有两个核心阶段:开发阶段和维护阶段 ⇒ ⇒ 提高开发阶段、运维阶段的工作效率是企业在进行软件项目管理的重点。⇒ ⇒Devops

【网课平台】Day15.Devops:持续集成与持续交付

DevOps(Development和Operations的组合词),DevOps不是一种工具,也不是一个工作岗位,而是一种思想理念,它涵盖开发、测试、运维的整个过程。DevOps强调软件开发人员与软件测试、软件运维、质量保障(QA)部门之间有效的沟通与协作,强调通过自动化的方法去管理软件变更、软件集成,使软件从构建到测试、发布更加快捷、可靠,最终按时交付软件。

【网课平台】Day15.Devops:持续集成与持续交付

2、什么是CI/CD

关于Devops理念如何落地,对每个阶段都开发出一大批工具,这些工具包含了开发、测试、运维等各个阶段。下图是Devops工具集:

【网课平台】Day15.Devops:持续集成与持续交付

有了工具,接下来就是实施Devops的具体方案⇒ ⇒CI/CD,其中:

  • CI:Continuous Intergration,即持续集成
  • CD:Continuous Delivery 和 Continuous Depolyment,即持续交付和持续部署
CI:持续集成

即团队成员需要频繁的集成他们的工作(将开发分支合并到主分支),每次集成都通过自动化构建(包括编译、构建、自动化测试)来验证,从而尽快地发现集成中的错误,让产品可以快速迭代,同时还能保持高质量

【网课平台】Day15.Devops:持续集成与持续交付

CD:持续交付

持续交付将集成后的代码部署到类生产环境(测试、预发布环境),除了交付到类生产环境之外,还会执行一些集成测试、API测试。持续交付强调的是“交付”,交付给测试、产品验收,不管怎么更新,软件是随时随地可以交付的。

【网课平台】Day15.Devops:持续集成与持续交付

CD:持续部署

在持续交付的基础上由开发人员或运维人员自助式的定期向生产环境部署稳定的构建版本,持续部署的目标是代码在任何时刻都是可部署的,并可自动进入到生产环境。

【网课平台】Day15.Devops:持续集成与持续交付
以上三个过程环环相扣,每个过程都自动化执行。

3、Devops方案参考

下图是一种可行的CI/CD方案:

【网课平台】Day15.Devops:持续集成与持续交付

二、人工部署

1、项目打jar包

STEP1:项目打包

  • 在父工程pom文件中使用<modules>聚合各模块
<!--聚合的好处是Maven自动识别依赖关系,如checkcode服务依赖base服务,打包的时候则会先把base打包,再打包checkcode-->
<modules>
    <module>../xuecheng-plus-base</module>
    <module>../xuecheng-plus-checkcode</module>
    <module>../xuecheng-plus-gateway</module>
    <module>../xuecheng-plus-auth</module>
    <module>../xuecheng-plus-content</module>
    <module>../xuecheng-plus-learning</module>
    <module>../xuecheng-plus-media</module>
    <module>../xuecheng-plus-orders</module>
    <module>../xuecheng-plus-message-sdk</module>
    <module>../xuecheng-plus-search</module>
    <module>../xuecheng-plus-system</module>
</modules>
<!--父工程中还有依赖版本的统一管理-->
  • 配置打包插件(在每个要打可执行jar包的工程中配置该插件,否则直接执行maven的package指令出来的jar包无法运行。base这种工程就不用加了。)
<!--在需要打可执行包的工程中配置spring-boot-maven-plugin插件
否则报 “jar中没有主清单属性” 
"Unable to access jarfile "-->
<build>
 <!--以后jar包的名字-->   
 <finalName>${project.artifactId}-${project.version}</finalName>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <version>${spring-boot.version}</version>
            <executions>
                <execution>
                    <goals>
                        <goal>repackage</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

  • 插件安装成功
    【网课平台】Day15.Devops:持续集成与持续交付
# 功能说明
build-info: 生成项目的构建信息文件 build-info.properties
repackage: 这个是默认 goal,在 mvn package 执行之后,这个命令再次打包生成可执行的 jar,同时将 mvn package 生成的 jar 重命名为 *.origin
run: 这个可以用来运行 Spring Boot 应用
start: 这个在 mvn integration-test 阶段,进行 Spring Boot 应用生命周期的管理
stop: 这个在 mvn integration-test 阶段,进行 Spring Boot 应用生命周期的管理

  • 在父工程执行:clean install -DskipTests -f pom.xml 对所有工程进行打包
    【网课平台】Day15.Devops:持续集成与持续交付
package、install、deploy三者的区别:
package: 打包
install: 打包完以后拷贝到本地仓库
deploy: 打包完后上传到局域网的私服
# -DskipTests跳过测试
  • 等待打包成功,在target目录下即可看到jar包
    【网课平台】Day15.Devops:持续集成与持续交付
    【网课平台】Day15.Devops:持续集成与持续交付
    【网课平台】Day15.Devops:持续集成与持续交付
  • 验证一下jar包是否正常,打开cmd:java -Dfile.encoding=utf-8 -jar xuecheng-plus-checkcode-0.0.1-SNAPSHOT.jar
    【网课平台】Day15.Devops:持续集成与持续交付
    【网课平台】Day15.Devops:持续集成与持续交付

2、生成镜像、创建容器

STEP2:部署到Linux

  • 在Linxu目录下编写DockerFile文件
FROM java:8u20
MAINTAINER docker_maven docker_maven@email.com
WORKDIR /ROOT
ADD xuecheng-plus-checkcode-0.0.1-SNAPSHOT.jar xuecheng-plus-checkcode.jar
CMD ["java", "-version"]
//对比启动jar包的指令
ENTRYPOINT ["java", "-Dfile.encoding=utf-8","-jar", "xuecheng-plus-checkcode.jar"]
EXPOSE 63075


  • 将打好的jar包拷贝到该目录
    【网课平台】Day15.Devops:持续集成与持续交付
  • 执行镜像构建指令docker build -t checkcode:1.0 .

指令中最后的. 即当前目录【网课平台】Day15.Devops:持续集成与持续交付
报这个错,是因为Dockerfile文件被命名成了DockerFile,不想改名就-f指定一下
docker build -t checkcode:1.0 -f DockerFiler .

  • 构建成功
    【网课平台】Day15.Devops:持续集成与持续交付

  • 根据镜像启动容器
    【网课平台】Day15.Devops:持续集成与持续交付

docker run --name checkcode -p 63075:63075 -idt checkcode:1.0

到此,Java工程,从代码到jar包,再到镜像,再到Docker容器部署到Linux上的整个过程,手动完成了!

此时,请求虚拟机IP:63075/checkcode/pic即可
docker logs -f 容器ID查看日志

三、自动化部署

接下来使用Jenkins来完成CI/CD:

【网课平台】Day15.Devops:持续集成与持续交付

  • 代码使用git托管
  • 在jenkins创建任务,从Git拉取代码
  • 拉取代码后进行自动构建
  • 将代码打成镜像包上传到docker私服
  • 自动创建容器、启动容器
  • 当有代码push到git实现自动构建

1、代码提交到git

git commit
git push

【网课平台】Day15.Devops:持续集成与持续交付

2、修改pom.xml文件

添加docker-maven-plugin插件实现将springboot工程创建镜像。在要部署到容器的每个微服务中添加以下插件:文章来源地址https://www.toymoban.com/news/detail-447064.html

<build>

<!--生成可执行的jar包-->    
<finalName>${project.artifactId}-${project.version}</finalName>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <version>${spring-boot.version}</version>
            <executions>
                <execution>
                    <goals>
                        <goal>repackage</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
        <!--创建镜像,上传镜像-->
        <plugin>
            <groupId>com.spotify</groupId>
            <artifactId>docker-maven-plugin</artifactId>
            <version>1.2.2</version>
            <configuration>
                <!--修改imageName节点的内容,改为私有仓库地址和端口,再加上镜像id和 TAG,我们要直接传到私服-->
                <!--配置最后生成的镜像名,docker images里的,我们这边取项目名:版本-->
                <!--<imageName>${project.artifactId}:${project.version}</imageName>-->
                <imageName>192.168.101.65:5000/${project.artifactId}:${project.version}</imageName>
                <!--也可以通过以下方式定义image的tag信息。 -->
                <!-- <imageTags>
                     <imageTag>${project.version}</imageTag>
                     &lt;!&ndash;build 时强制覆盖 tag,配合 imageTags 使用&ndash;&gt;
                     <forceTags>true</forceTags>
                     &lt;!&ndash;build 完成后,push 指定 tag 的镜像,配合 imageTags 使用&ndash;&gt;
                     <pushImageTag>true</pushImageTag>
                 </imageTags>-->
                <baseImage>java:8u20</baseImage>
                <maintainer>docker_maven docker_maven@email.com</maintainer>
                <workdir>/root</workdir>
                <cmd>["java", "-version"]</cmd>
                <!--来指明Dockerfile文件的所在目录,如果配置了dockerDirectory则忽略baseImage,maintainer等配置-->
                <!--<dockerDirectory>./</dockerDirectory>-->
                <!--2375是docker的远程端口,插件生成镜像时连接docker,这里需要指定docker远程端口-->
                <dockerHost>http://192.168.101.65:2375</dockerHost>
                <!--入口点,project.build.finalName就是project标签下的build标签下 的filename标签内容,testDocker-->
                <!--相当于启动容器后,会自动执行java -jar ...-->
                <entryPoint>["java", "-Dfile.encoding=utf-8","-jar", "/root/${project.build.finalName}.jar"]</entryPoint>
                <!--是否推送到docker私有仓库,旧版本插件要配置maven的settings文件。 -->
                <pushImage>true</pushImage>
                <registryUrl>192.168.101.65:5000</registryUrl>  <!-- 这里是复制 jar 包到 docker 容器指定目录配置 -->
                <resources>
                    <resource>
                        <targetPath>/root</targetPath>
                        <directory>${project.build.directory}</directory>
                        <!--把哪个文件上传到docker,相当于Dockerfile里的add app.jar /-->
                        <include>${project.build.finalName}.jar</include>
                    </resource>
                </resources>
            </configuration>
        </plugin>
    </plugins>
</build>

  • 在Jenkins源码管理中配置git仓库的地址
    【网课平台】Day15.Devops:持续集成与持续交付
  • 打包指令、生成镜像上传镜像到私服
    【网课平台】Day15.Devops:持续集成与持续交付
  • 进入任务点击build now
    【网课平台】Day15.Devops:持续集成与持续交付
  • 控制台查看日志
    【网课平台】Day15.Devops:持续集成与持续交付
  • 配置触发器,当代码提交时,jenkins自动构建任务

3、前端部署

  • 在docker中部署nginx,修改nginx.conf配置文件
  • 将静态资源拷贝到容器映射到宿主机的目录
  • 将机构端的前端工程打包,运行yarn build
  • 打包成功在工程目录生成dist目录
  • 将此目录的内容拷贝到虚拟机的/data/soft/nginx/xuecheng_portal_static/dist

到了这里,关于【网课平台】Day15.Devops:持续集成与持续交付的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • KubeSphere通过提供一站式微服务应用管理、DevOps持续集成/交付、网络策略和安全管理、日志、Tracing等功能模块,帮助企业轻松应对多样化的工作负载、异构集群环境、复杂的网络拓扑和流量控

    作者:禅与计算机程序设计艺术 2019年7月KubeSphere项目宣布启动,其目标是打造一个面向IT自动化运维领域的开源容器平台,以满足多种应用场景和运行环境需求。KubeSphere通过提供一站式微服务应用管理、DevOps持续集成/交付、网络策略和安全管理、日志、Tracing等功能模块,帮

    2024年02月07日
    浏览(38)
  • CI/CD 持续集成 持续交付

    参考:https://www.jianshu.com/p/2132949ff84a  持续集成是指 多名开发者在开发不同功能代码的过程当中,可以频繁的将代码行合并到一起并切相互不影响工作 。 持续集成的目的,是 让产品可以快速迭代,同时还能保持高质量 。它的核心措施是,代码集成到主干之前,必须通过自动

    2024年02月10日
    浏览(47)
  • 《Docker与持续集成/持续部署:构建高效交付流程,打造敏捷软件交付链》

    🌷🍁 博主 libin9iOak带您 Go to New World.✨🍁 🦄 个人主页——libin9iOak的博客🎐 🐳 《面试题大全》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 🌊 《IDEA开发秘籍》学会IDEA常用操作,工作效率翻倍~💐 🪁🍁 希望本文能够给您带来一定的帮助🌸文章粗浅,敬

    2024年02月15日
    浏览(50)
  • 持续集成/持续交付——JenkinsFile详细使用教程

    提供了一套可视化操作界面来帮助创建、编辑 Pipeline 任务 它为开发人员提供了更具乐趣的Jenkins使用方式 实现了一种全新的、现代风格的用户界面 有助于任何规模的团队实现持续交付 流水线编辑器:是一种直观并可视化的流水线编辑器 流水线的可视化:对流水线的可视化表

    2024年02月05日
    浏览(37)
  • 持续集成与持续交付:现代软件测试的变革之路

    在数字化时代,软件开发的速度和复杂性都在不断增加。为了满足市场的需求,企业需要更快、更高效地交付高质量的软件产品。在这样的背景下,持续集成与持续交付(CI/CD)成为了软件开发和测试的核心实践。 软件开发的快速变革与挑战 随着技术的进步和市场的变化,软

    2024年02月11日
    浏览(39)
  • 持续集成与持续交付(CI/CD):探讨在云计算中实现快速软件交付的最佳实践

    🎈个人主页:程序员 小侯 🎐CSDN新晋作者 🎉欢迎 👍点赞✍评论⭐收藏 ✨收录专栏:云计算 ✨文章内容:软件交付 🤝希望作者的文章能对你有所帮助,有不足的地方请在评论区留言指正,大家一起学习交流!🤗 持续集成(Continuous Integration,CI)和持续交付(Continuous D

    2024年02月10日
    浏览(52)
  • 人工智能系统的安全持续集成与交付

    作者:禅与计算机程序设计艺术 随着人工智能技术的快速发展,人工智能系统在各个领域得到了广泛应用,从智能助理、自动驾驶、医疗诊断到金融投资等,人工智能系统正在深入人类生活的方方面面。然而,人工智能系统作为一种复杂的软件系统,在开发和部署过程中也面临着诸

    2024年04月13日
    浏览(36)
  • 持续集成交付CICD:GitLabCI上传Nexus制品

    目录 一、实验 1.GitLabCI上传Nexus制品 2.优化GitLabCI(引用系统变量) 3.添加if条件判断项目类型 4.优化GitLabCI(模板类) 二、问题 1.GitLabCI获取jar文件失败 2. GitLabCI获取流水线项目命名空间失败 3.GItLab Package如何实现上传至本地仓库 (1)环境 表1 主机 主机 架构 版本 IP 备注

    2024年02月04日
    浏览(37)
  • 【软件工程】项目管理与迭代开发:DevOps平台、敏捷协作平台与软件需求交付

    1、项目管理与软件需求交付 软件需求交付方法: DevOps:DevOps是一种软件开发和运维的方法论,它强调开发团队和运维团队之间的紧密协作和沟通,以实现快速、高效、可靠的软件交付。DevOps的核心是自动化,包括自动化测试、自动化部署、自动化监控等。 敏捷协作:敏捷协

    2024年01月17日
    浏览(40)
  • 什么是CI/CD:持续集成与持续交付?(InsCode AI 创作助手)

    在现代软件开发领域,CICD(Continuous Integration and Continuous Delivery)是一种关键性的开发实践,它有助于提高软件交付的质量和效率。本文将深入探讨CICD的定义、原理和重要性,以及如何在项目中实施CICD流程。 什么是CICD? CICD是一种软件开发实践,它将持续集成(CI)和持续交

    2024年02月09日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包