- 使用 Spring Initializr 创建 Spring Boot 应用程序
- 在Spring Boot中配置Cassandra
- 在 Spring Boot 上配置 Tomcat 连接池
- 将Camel消息路由到嵌入WildFly的Artemis上
如果您厌倦了手动构建和发布应用程序,那么可能是时候设置 CI/CD 管道了。Github Actions 使大多数项目的这个过程变得简单和免费,并且可以通过自动化应用程序的构建过程来节省您的时间。
Github Actions 是在云中运行的任务。它们可以使用 YAML 配置文件进行设置,并根据您帐户中发生的事情触发。这通常类似于“将新提交推送到主分支”,但实际上可以为许多不同的事件设置操作,包括新问题或发生时,甚至按计划作为 cron 作业。
在这种情况下,我们想设置一个自动构建。每当对存储库进行更改时,通常都会运行此过程。您可以根据需要进行设置 - 通常在master orrelease 分支上运行它,但您也可以在 dev 和 feature 分支上运行构建。
大多数构建过程也将涉及测试,Github Actions 也可以这样做。这有助于捕获导致构建失败的提交。您可能也不想部署失败的构建,因此在所有情况下预先运行测试都是有益的。
使用 Github Actions,您还可以自动化部署的发布部分。如果您有一个总是从其更新release 的master 分支,则可以将该分支视为您的部署源。您的服务器将从 Github Action 的输出下载二进制文件并更新您的代码。如果您使用 NPM、Maven 或 Docker Hub 之类的包管理器或注册表,这将变得更加容易——更新可以直接推送到注册表并在需要时拉取。
Github Actions 使用基于 YAML 的配置系统。您需要定义两个基本的东西——动作何时触发,以及一旦触发将采取什么步骤。
您的确切配置将非常广泛地取决于您为应用程序使用的语言、框架和构建系统。不过,一般过程非常相似,对于此示例,我们将使用 Gradle 构建工具为基于 Java 的应用程序设置构建。
前往您的存储库并单击“操作”。Github 足够聪明,可以识别你的 repo 包含的应用程序类型,在这里它推荐了一些构建 Java 的不同操作。
单击“Java with Gradle”会打开 YAML 文件的 Github 编辑器,该编辑器预先配置了 Java 构建。这会在每次推送到 master 和每次 pull request 到 master 时运行。您也可以将其更改为在其他分支上运行,或者为开发/功能分支设置不同的操作。
您可以在此处编辑任何变量,完成后单击右侧的“提交”。如果您将构建设置为在推送时运行,则提交将触发构建。
您可以在“操作”选项卡下找到正在进行的工作流运行。
当然,这并不总是那么容易——在现实世界中,构建环境可能非常脆弱,并且可能由于多种原因而失败。Github 为这个存储库提供的示例操作并没有使其通过启动:它甚至无法找到gradlew 运行构建。
一个奇怪的错误考虑到应该可以开箱即用,但快速搜索问题表明我们应该使用正确的 gradle-build-action 手动配置版本和参数。
要编辑您的操作配置,请转到您的操作并单击.yml 工作流名称下的文件以调出编辑器。
然后,您可以根据需要对其进行修补,然后再次提交。提交更改build.yml 算作对 的提交master,因此它将再次触发操作。
这一次,它可以正常工作,但由于一个小错误而再次失败——这个存储库需要 Gradle 7.1,而不是 6.5。无论您使用什么构建管道,您都需要解决所有这些问题,以使其与您在机器上手动执行的构建完美匹配。
一旦所有这些都整理好,我们终于可以看到成功的绿色复选标记。
除了,它不是一个真正有用的构建——构建工件在哪里?默认情况下,此操作仅构建 repo,并且不提供任何输出项。
- name: capture build artifacts
uses: actions/upload-artifact@v2
with:
name: Artifacts
path: build/libs/
再次运行构建会正确上传工件。
如果您想让这些自动下载,您需要更改在 Github 上创建发布标签时运行的操作,然后使用您的令牌(作为环境变量传递)发布到 Github 包。
on:
release:
types: [created]
...
- name: Publish to GitHub Packages
uses: gradle/gradle-build-action@4137be6a8bf7d7133955359dbd952c0ca73b1021
with:
arguments: publish
env:
USERNAME: ${{ github.actor }}
TOKEN: ${{ secrets.GITHUB_TOKEN }}
关闭。这个问题需要details or clarity .它目前不接受答案。 想改进这个问题吗? 通过 editing this post 添加细节并澄清问题. 关闭 5 年前。 Improve t
背景 我有一个 Azure Runbook(名为 RunStoredProcedure2),定义如下: param( [parameter(Mandatory=$True)] [string] $Sq
我有一个名为“团队”的表,其中包含“非事件”列,另一个表“事件”,其中包含“时间”列。如果任何团队的“事件”中的最新日期发生在 X 时间之前,如何将“非事件”列更新(为 true)? 我知道这可以通过
下面的问题可能有点令人困惑,但我会尽力以最好的方式解释它。 假设我们为一家制造公司工作。它制造然后用于制造产品的组件。在以下示例中,有 3 个组件和 2 个最终产品。 组件和产品的需求如下: comp
我有代码可以让我在一个范围内选择一个项目: COleVariant vItems = cstrAddr; hr = AutoWrap(
我正在开发一个应用程序,该应用程序有 4 种语言的大约 50 个应用内购买,这给了我很多表单和子表单、框和子框,需要使用 iTunesConnect 的令人痛苦且设计糟糕的表单来填充。 我想知道是否有
我想在 Azure 自动化中使用 powershell 脚本来安排打开/关闭资源。 我想在不创建帐户的情况下执行此操作,因为我们的域强制重置密码。我知道自动化帐户会创建一个证书 - 当使用资源管理器(
我尝试从 azure 自动化 run book power shell 自动检索 azure SQL 数据库中的数据。我发现azure自动化帐户的模块中缺少SQL Server模块。我已经导入了该模块
我正在自动化 Outlook,并且需要控制电子邮件的发件人身份。用户将在 Outlook 中设置两个或多个帐户,我需要能够选择从哪个帐户发送电子邮件。有什么想法吗? 需要 Outlook 2003 及
我尝试从 azure 自动化 run book power shell 自动检索 azure SQL 数据库中的数据。我发现azure自动化帐户的模块中缺少SQL Server模块。我已经导入了该模块
假设我有一个网站,我可以(随时)登录并每隔 x 小时提交数据(单击登录后可见的链接),我将如何自动化此过程? 我构建了一个图形用户界面,它为用户(现在是我,为了我自己的方便)提供了一个包含一些信息的界
我正在开发一个程序,它的任务是我们为它定义一些号码(我们的一些手机号码)并且它应该在 Telegram 中注册它们,然后获取发送到该号码的所有消息。如您所知,在 Telegram 中注册需要提供电话号
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 3 年前。 Improve this qu
最近我在处理 CSS Sprite 。一切正常。 我创建了一个 sprite、.css 文件和 html 结构。看起来像 .sprites{ background-image:url
我想为一款名为 Dune 2000 的策略游戏创建一个叠加层。令人讨厌的是,要创建 10 个士兵,每次完成一个都必须单击该图标。没有队列。因此,在不干扰游戏运行方式的情况下,我想听听鼠标移动的声音,当
我是 python 的初学者,我想从自动化开始。以下是我正在尝试执行的任务。 ssh -p 2024 root@10.54.3.32 root@10.54.3.32's password: 我尝试通过
当我将一些 urlencoded Javascript 粘贴到 Firefox 和 Chrome 上的 URL 时,我看到了一些奇怪的事情发生。是否可以使用此技术告诉 Chrome 访问 URL,然后
我需要将大量请求自动提交到基于云的数据库接口(interface) (Intelex)。没有任何方法可以批量提交某些操作,但是提交单个请求所必需的只是让经过身份验证的用户尝试打开 Web 链接。因此,
假设我有一个进程的内存转储。我想对其运行报告,所以基本上我想打开 WinDBG,加载 SOS 并运行一个脚本,该脚本运行一些命令,解析输出,然后基于此运行更多命令。 除了像 SendKeys 这样的
我正在使用 ffmpeg 创建视频剪辑。我想自动化该过程并保存剪辑,而无需手动为要保存的每个文件命名。这是我拥有的代码。它将创建并保存剪辑,但只能使用扩展名和不是名字。 @echo off cd /d
我是一名优秀的程序员,十分优秀!