当前位置:Java -> 将CI/CD应用于使用Spring Boot的Java应用程序
持续集成/持续交付(CI/CD)是现代软件开发的关键方面,它为开发生命周期带来了效率、可靠性和速度。CI/CD使开发人员能够自动化软件的构建、测试和部署,确保变更平稳一致地集成。在基于Spring Boot的Java应用程序的背景下,CI/CD变得更加关键。Spring Boot提倡约定优于配置的范式,使得创建独立的、生产级别的基于Spring的应用程序变得轻而易举。通过整合CI/CD实践,与Spring Boot合作的开发人员可以优化部署流水线,在开发过程的早期发现错误,并以更快的发布周期交付高质量、可靠的软件。
本教程将引导读者在Spring Boot的背景下实现CI/CD,使他们能够优化开发工作流程,以更高效地交付坚固的Java应用程序。
我非常兴奋地分享我在Spring Boot的Java应用程序中构建持续集成/持续交付(CI/CD)的经验。首先,让我们确立这个教程中将学到的一切:
逐步地,我们将在README.md文件中添加徽章,以便我们可以实时通知关于Travis CI、Docker、Codecov和SonarCloud状态。另外,我们还将添加许可证徽章。
你准备好了吗?如果没有,花些时间更好地理解或准备好自己,然后稍后继续阅读。代码可以在这里找到。所以只需进行分支,它就全是你的了!
在这个项目中,我使用了Spring Tool Suite 4(STS 4)集成开发环境;你可以自由地选择适合这个项目的任何工具。STS 4内置了Spring Initializr,所以我选择了这个项目。
这是STS 4深色主题的样子:
点击File -> New -> Spring Starter Project。
你将看到:
请填写以下表单:
默认情况下:
然后,你将看到:
接下来,点击Next。
点击Spring Web:
点击Finish。新项目将出现:
接下来,请打开CicdAppliedToSpringBootJavaAppApplication.java文件。
我们可以添加一个基本的端点:
右键单击 -> Run As -> Maven build:
然后您将收到:
Goals -> spring-boot:run:
点击 Run:
New" 或点击此处。然后您将被引导至此处:
如何选择开源许可证 和开源许可证的工作原理及如何将其添加到您的项目中。
.gitignore 文件。
Create repository:
RESEARCHES.md 的文件。为什么呢?在项目开发过程中,您可能会遇到困难,需要寻求帮助。旨在在解决问题或修复错误时节省时间。
Create new file. 然后,将名称字段填写为 RESEARCHES.md 并编辑文件如下。CI/CD 是研究的一个例子,链接代表结果。"##"使文本加粗。
Commit new file" :
现在,请安装 Git ( Git 安装 可在此处找到)和 GitHub Desktop ( GitHub Desktop 安装 可在此处找到)。
安装这两个工具后,现在是时候克隆我们在第一步中开始的项目了。
打开 GitHub Desktop 并选择我们之前创建的存储库如下:
点击 File -> 克隆存储库... :
您将收到此弹出窗口:
只需在搜索栏中填写 " cicd ;" 您将在结果中找到存储库: " cicd-applied-to-spring-boot-java-app ":
选择存储库并点击 克隆 :
GitHub Desktop正在克隆存储库:
存储库已经被克隆:
此时,打开存储库文件夹。这是我的路径。
我的存储库文件夹包含三个文件: LICENSE , README.md 和 RESEARCHES.md 如下所示:
是时候打开保存代码的文件夹了:
从代码文件夹中复制内容并粘贴到存储库文件夹中。存储库文件夹如下所示:
忽略文件和文件夹是很重要的。在项目中,我们不会直接修改这些文件。为此,我们将对存储库文件夹中的 .gitignore 文件进行一些更改。我使用了 Sublime Text 来编辑该文件。
在进行任何更改之前,它应该如下所示:
进行更改后,它应该如下所示。
首先,添加: .gitignore 。它应该看起来像:
现在,这是 GitHub Desktop 上存储库文件夹的样子:
在总结字段中填写 " 首次上传 " 并点击 " 提交到主分支 ":
下一步呢?点击 推送原点 :
仓库现在在 GitHub 上是最新的:
注意:如果你对这两个工具不熟悉,可以查看这个Travis CI 教程和Docker 入门教程来帮助你入门。
使用 GitHub 注册或登录,并确保 Travis CI 可以访问你的仓库。然后,创建一个名为 .travis.yml 的文件,其中包含 Travis CI 将要遵循的指令:
首先,我得到了这个:
然后,点击 .travis.yml 文件:
这是 Travis CI 上的仓库:
现在,我们将添加一个 Travis CI 徽章,以便收到有关更改等的通知。
要编辑 README.md 文件,请点击铅笔图标:
我们会得到这个页面:
添加以下文本,但用你的 Travis CI 用户名 替换 "FanJups":
然后,添加提交描述 "添加 Travis CI 徽章" 并点击 提交更改 按钮:
然后,我们得到:
重要的是要知道,每次您进行更改,Travis CI 都会触发构建并发送电子邮件。这是一个持续的过程:
我们成功添加了 Travis CI 及其徽章。接下来,我们将专注于 Docker。
首先,在 Docker Hub 上注册或登录:
点击 创建仓库 按钮:
按照以下方式填写表单:
点击 Create 按钮后:
现在是时候将我们的Docker仓库与GitHub仓库链接起来。点击 Builds:
然后,点击 Link to GitHub:
选择你的GitHub仓库:
现在GitHub仓库已经被选中,我们需要进行一些更改:
点击 Save:
我们成功地将GitHub仓库链接到Docker仓库。如果您需要有关Docker构建的帮助,这个链接 很有用。
接下来是什么?首先,我们将安装Docker。然后我们将对代码和Travis CI进行一些更改。
要安装Docker,请前往Docker的入门页面,选择 Docker for Developers,然后点击 Download Desktop and Take a Tutorial:
为了确保您已安装Docker并验证它正常运行,请打开您的命令行并输入“docker”。然后验证:
现在,回到您的IDE或文本编辑器;我们将对代码进行一些更改。
创建一个名为“Dockerfile”的文件。总结到目前为止,当创建Docker镜像时,Dockerfile非常有用。为了更好地理解这个文件的目的,这个Dockerfile参考 将对您有所帮助。
为了使事情简单,我使用了这个Callicoder Dockerfile示例 并进行了一些小更改。这是Dockerfile的样子:
接下来,这是使用STS 4创建进程的Dockerfile。
选择项目,然后点击 New -> File.
在文件名字段中填写“Dockerfile”,然后点击Finish按钮:
复制并粘贴之前呈现的Dockerfile内容:
在对pom.xml进行一些更改之前,让我们看看实际内容。
我们添加Spotify的dockerfile-maven-plugin 来将项目推送到Docker Hub。
此外,我们按照之前的一篇文章《使用Spring Boot和Docker入门》的说明,添加了maven-dependency-plugin,其中提到:
"... 为了确保在创建Docker镜像之前解压jar包,我们为依赖项插件添加了一些配置。"
接下来,我们将在GitHub存储库中将Travis CI链接到Docker。
你还记得你的Docker用户名和密码吗?好吧,你必须记住这些信息才能继续。我们将在Travis CI中创建两个环境变量。
要到达这里,只需将此链接(https://travis-ci.com/GITHUBUSERNAME/cicd-applied-to-spring-boot-java-app)复制并粘贴到你的浏览器中。但是请用你正确的用户名替换GITHUBUSERNAME,或者点击README.md中的Travis CI徽章:
点击More options -> Settings:
填写表单如下:
点击 Add 按钮:
"mvn deploy" ,Spotify中有详细说明。Apache Maven项目解释了Apache Maven Deploy Plugin的作用,即作为一个用于"将构件添加到远程存储库"的插件。DZone此前曾介绍过如何使用管道或Maven任务发布Maven构件。
当我们调用部署阶段时,我们必须在POM中包含一个有效的<distributionManagement/>部分。但这不是这里的用途。因此,我们将在pom.xml中添加这个属性:
<maven.deploy.skip>true</maven.deploy.skip>
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-deploy-plugin:2.8.2:deploy (default-deploy) on project cicd-applied-to-spring-boot-java-app: Deployment failed: repository element was not specified in the POM inside distributionManagement element or in -DaltDeploymentRepository=id::layout::url parameter -> [Help 1]
.travis.yml并将其推送到GitHub:
提交描述:“Linking Travis CI to Docker”。
"mvn deploy"命令退出,状态为1。
Shields.io。
在搜索栏中,输入"docker.",然后,我们将获取以下结果:
点击Docker Cloud Build Status:
如果我告诉你我们这里也会出现错误会怎么样?
算了 - 只需填写以下表格:
点击复制徽章URL。
现在,回到GitHub仓库并编辑README.md。我们将添加以下Docker徽章:
提交描述:“添加Docker徽章”:
我们都是赢家。所以让我们把它做对!
之前,我们在pom.xml上进行了更改并创建了一个Dockerfile。
所有这些错误都是由于Maven不知道如何处理Docker上的部署以及缺少Dockerfile,因此无法推送镜像。
是时候将这些更改(Dockerfile和pom.xml)通过GitHub Desktop推送到GitHub了:
现在,我们有两个丑陋的绿色徽章代表成功!开玩笑!那太美妙了。
为了确保,检查您的电子邮件。您应该收到两封电子邮件:一封来自Travis CI,另一封来自Docker。
在继续到第三步之前,我们将仅运行应用程序而不使用Docker。只需记住用您自己的Docker Hub用户名替换"fanjups":
我得到了以下错误:“无效或损坏的jar文件/app.jar。”问题出在编码,所以我将在pom.xml中添加这两个属性。
现在是时候在GitHub上提交了。如果您对编写有用的提交消息感到困惑,DZone已经在过去涵盖过了这个主题。
在再次运行应用程序之前,重要的是使用docker ps列出所有容器。
然后检查“CONTAINER ID”,停止(docker stop“CONTAINER ID”),并删除它(docker rm“CONTAINER ID”),因为它是持续存在的,正如这篇关于Spring Boot with Docker的帖子所解释的那样。
然后,我们将再次运行应用程序以确保一切都正常:
解决了这个问题时,我感到非常高兴!
核心步骤现在已经结束。我们已成功实现了CI/CD。现在,让我们添加一些有用的工具!
首先,请确保您已经在计算机上更新了项目:
点击 拉取源:
从我们的GitHub文件夹中复制将在IDE中使用的修改文件,然后粘贴到我们的工作区。在这种情况下,我们只复制并粘贴 pom.xml。
不要忘记在STS 4上刷新项目并采取一切必要的步骤来包含更改。
为了更好地使用这个工具,我们通过添加单元测试进行了一些更改。
首先,创建一个新的包 — com.cicd.cicdappliedtospringbootjavaapp.controller。
其次,创建一个新的类 HelloController.java 并将 CicdAppliedToSpringBootJavaAppApplication.java 更改如下:
文件夹看起来像这样:
在您的计算机上运行应用程序之前,您可以跳过整个dockerfile插件,因为部署将在由Travis CI管理的GitHub存储库上进行。
为此,只需在Maven命令中添加这个选项(-Ddockerfile.skip), 如 Spotify dockerfile-maven-plugin的用法 所述。最后,我们得到 mvn spring-boot:run -Ddockerfile.skip.
现在,使用GitHub登录或注册到Codecov。
点击 账户 -> 存储库 -> 添加新存储库。
只需选择您的GitHub存储库,或者点击这个链接 (https://codecov.io/gh/GITHUB_USERNAME/GITHUB_REPOSITORY) 。但请记住用您自己的 GITHUB_REPOSITORY 替换 cicd-applied-to-spring-boot-java-app 和 GITHUB_USERNAME:
上次,我们向Docker添加了两个环境变量。现在,我们还添加了Codecov环境变量:CODECOV_TOKEN。复制您的令牌并将其添加到您的Travis CI存储库中。
我们通过添加 jacoco-maven-plugin 对 pom.xml 进行了一些更改。
回到GitHub存储库,我们将编辑 .travis.yml。
前往您的Codecov存储库,点击 设置 -> 徽章 -> 复制(来自Markdown)。
然后,转到您的GitHub存储库,并将其粘贴到 README.md 中。
最后,将您的更改从计算机推送到GitHub。
代码覆盖率 60%:
也许,您想禁用覆盖率,稍后再启用。如果是这样,那就继续并创建一个名为 codecov.yml. 的文件。现在,知道覆盖率是有用的,所以我将在每一行上加上“#”进行评论。
如果您想了解更多,点击这里 阅读文档。
现在,进入第五步!
首先,使用GitHub登录或注册。
点击 +(分析新项目或创建新组织) -> 分析新项目 -> 导入另一个组织 -> 从GitHub中选择一个组织。
接下来,请确保SonarCloud可以访问您的GitHub存储库。
现在我们回到SonarCloud,选择一个Key。我建议使用 "cicd-applied-to-spring-boot-java-app" 作为Key。
然后,点击 继续 -> 选择免费计划 -> 创建组织 -> 分析新项目 -> 选择您的GitHub存储库 -> 设置 -> 使用Travis CI -> 提供并加密您的令牌 -> 复制。
返回Travis CI,并创建一个名为 SONAR_TOKEN 的SonarCloud环境变量。作为值,粘贴刚刚复制的令牌。
现在,回到SonarCloud,点击 继续 -> 编辑您的 .travis.yml 文件 -> 选择Maven作为构建技术 -> 配置您的平台 -> 配置扫描器 -> 复制。
我选择将SonarCloud脚本写在after_success中,而不是script,因为我在这里专注于部署。您可以将其放在任何您想要的位置。
另外,创建一个名为sonar-project.properties的文件,编辑如下内容:sonar.projectKey=GITHUBUSERNAME_cicd-applied-to-spring-boot-java-app
返回SonarCloud,点击完成。
最后,在README.md中添加一个SonarCloud徽章。
要获取另一个项目的徽章,请使用groupId:artifactId。
下面是已经添加的SonarCloud徽章:
首先,打开您电脑上的pom.xml文件。我们添加:
如Michael Lanyon的博客所解释,“重要的配置是允许OAuth令牌从环境变量中读取(摘自pom.xml)。要创建令牌,请按照这些说明。”
复制令牌,然后创建一个名为GITHUB_OAUTH_TOKEN的新环境变量。
将pom.xml推送到GitHub,并在after_success下添加"- mvn site"到.travis.yml中。
gh-pages分支和项目站点将被创建。每次推送时,站点将根据需要进行更新。
环境 -> 查看部署(在已部署到github-pages下)。
GitHub存储库的链接。
新建 -> 创建新应用。继续,输入一个应用名称(cicd-spring-boot-java-app)。cicd-applied-to-spring-boot-java-app作为应用名称太长。选择一个地区,然后点击创建应用。
连接到GitHub。
连接。
部署前等待CI通过。
启用自动部署。
帐户设置。
HEROKU_API_KEY的新Travis CI环境变量。这是与此项目关联的最后一个环境变量。
.travis.yml。
现在,是时候进行最后一步了。
处于最后阶段意味着什么?当快速查看项目时,主题会很有帮助。
返回GitHub仓库,点击管理主题,添加任何你想要的主题。
顺便说一句,我们在README.md中添加了MIT许可徽标,并在pom.xml的许可部分也进行了添加!
恭喜!你已经完成了所有的步骤。总的来说,你学会了如何使用Maven、GitHub、Travis CI、Docker、Codecov、SonarCloud和 Heroku 在Spring Boot的Java应用上实现CI/CD。这是一个你可以自由使用的模板。
如果你感到困惑,请在评论中提问。我还建议多次阅读文档,直到弄清楚为止。
代码可以在这里找到。所以,只要fork;全都属于你!
推荐阅读: 65.ThreadPoolExecutor的饱和策略(拒绝策略)
本文链接: 将CI/CD应用于使用Spring Boot的Java应用程序