前言在之前的文章《一篇教你代码同步 GitHub 和 Gitee》中,我们使用GitHubActions解决了自动同步GitHub代码和Gitee的问题。在本文中,我翻译并整理了GitHubActions官方文档,向您介绍GitHubActions。并解释了上一篇文章中同步Gitee的Actions代码。GitHubActionsGitHubActions是一个持续集成(Continuousintegration)和持续交付(Continuousdelivery)平台,可以自动化构建、测试和部署。您可以创建工作流来构建和测试每个拉取请求或将合并的代码部署到生产环境中。当您的代码存储库中发生事件时,GitHubActions可以运行工作流程。例如,当有人为您的代码存储库创建新问题时,您可以运行工作流来自动添加适当的标签。GitHub提供了Linux、Windows和macOS虚拟机来运行你的工作流程,当然你也可以自定义运行环境。GitHubActions组件你可以配置一个GitHubActions工作流(workflow),它会在你的仓库中发生事件时被触发,例如当拉取请求或问题被创建时。您的工作流程由一个或多个任务(作业)组成,这些任务可以并行或串行执行。每个任务(jobs)都会在自己的虚拟机上运行(runner),任务可以有一个或多个步骤(steps),可以运行自定义的脚本或者运行一个动作(action),所谓动作(action)是一个可重复使用的扩展,可简化您的工作流程。工作流(Workflow)工作流是一个可配置的自动化程序。要创建工作流,您需要定义一个YAML文件。当您的仓库触发某个事件时,工作流将运行。当然也可以手动触发,或者定义一个时间表。存储库可以创建多个工作流,每个工作流执行不同的步骤。例如,一个工作流用于构建和测试拉取请求,一个用于部署您的应用程序,另一个在有人创建新问题时自动添加。一个标签。您还可以在工作流中引用另一个工作流,请参阅“可重用工作流”。事件(Events)事件是指仓库为了运行工作流而触发的特定行为,例如创建拉取请求、创建新问题或推送提交。您还可以使用计划、通过请求RESTAPI或手动触发工作流。有关事件的完整列表,请参阅“触发工作流的事件”。任务(Jobs)一个作业是在同一个运行器上执行的一组步骤(steps)。一个步骤(steps)要么是一个shell脚本(script),要么是一个动作(action)。步骤按顺序执行且彼此独立。因为每个步骤都在同一个运行器上执行,所以您可以将数据从一个步骤传递到另一个步骤。您可以将任务配置为依赖于其他任务。默认情况下,任务没有依赖关系并且并行执行。当一个任务需要另一个任务时,它会等到依赖任务完成后再执行它。Actions是GitHubActions平台的自定义应用程序,可执行复杂但经常重复的工作。可以通过使用操作来减少重复代码。例如,一个操作可以从GitHub拉取你的git存储库,为你的构建环境创建一个合适的工具链,等等。您可以编写自己的操作,或在GitHub市场中查找已实施的操作。运行器(Runners)运行器是一种可以运行工作流的服务。每个跑步者一次只运行一个任务。GitHub提供了UbuntuLinux、MicrosoftWindows和macOS运行器,每个工作流都运行在一个单独的新创建的虚拟机中。如果您需要不同的操作系统,您可以自定义运行器。请参见自定义运行器。创建工作流程GitHubActions使用YAML语法来定义工作流程。每个工作流都作为单独的YAML文件保存在.github/workflows中。现在我们在代码库中创建一个示例工作流,当代码被推送时,它会自动执行一系列命令。在这个示例工作流程中,GitHubActions将检查提交、安装依赖项并运行bats-v:在您的存储库中,创建一个.github/workflows/目录在.github/workflows/目录中,创建一个名为Forlearn-github-actions.yml,添加如下代码:actions/setup-node@v2with:node-version:'14'-运行:npminstall-gbats-运行:bats-v提交这些更改并将它们推送到您的GitHub存储库。您的新GitHubActions工作流程文件将安装在您的存储库中,当有人提交代码时,工作流程将自动执行。有关任务的执行历史,请参阅“查看工作流活动”部分。理解工作流文件为了帮助您理解YAML语法,本节对示例中的每一行代码进行解释:name:learn-github-actions可选,工作流的名称,它将出现在GitHub存储库的Actions选项卡中。on:[push]指定工作流的触发事件。在这个例子中,使用了push事件。当有人提交代码修改或合并拉取请求时,工作流将被触发。将触发对每个分支的提交,如果要指定分支、路径、标签,请参阅“GitHubActions工作流语法”jobs:Groupalltasksrunninginthelearn-github-actionsworkflowtogether。check-bats-version:定义了一个名为check-bats-version的task,childkey会定义task的属性。runs-on:ubuntu-latest将任务配置为在最新的UbuntuLinux运行器上运行。steps:将check-bats-version任务下的所有步骤归为一组,嵌套的每一个条目都是一个独立的action或shell脚本。-uses:actions/checkout@v2uses关键字指定此步骤运行v2版本的actions/checkout操作。这是一个将存储库代码签出到运行器中的操作,它允许您运行脚本或其他侵入您的代码的操作(例如构建或测试工具)。-uses:actions/setup-node@v2with:node-version:'14'此步骤将使用actions/setup-node@v2操作来安装指定版本的Nodejs,这会将node和npm命令添加到您的PATH.-运行:npminstall-gbatsrun关键字将告诉任务在运行器上执行命令。在本例中,您使用npm安装bats软件测试包。-运行:bats-v最后,运行bats命令,传入一个打印软件版本的参数。可视化工作流文件在此图中,您可以看到刚刚创建的工作流文件以及这些GitHubActions组件的组织方式。每个步骤执行一个单独的操作或脚本文件。任务1和2是运行命令,任务3和4是运行脚本文件。要查找更多预建操作,请参阅查找和自定义操作。查看工作流活动一旦您的工作流开始运行,您就可以在GitHub中看到一个可视化的进度图表,以查看每个步骤的执行情况。在GitHub.com上,导航到主存储库主页。在您的存储库名称下,单击操作。在左侧边栏,在Workflowruns中点击你想查看的工作流程,点击你想查看的运行记录名称:在Jobs或可视化图表中,点击你想查看的任务:查看每一步的结果:up文章代码分析下面再看看GitHub同步Gitee的代码,是不是更清晰了:name:syncToGiteeon:push:branches:-gh-pagesjobs:repo-sync:runs-on:ubuntu-lateststeps:-name:将Github组织repos镜像到Gitee。使用:Yikun/hub-mirror-action@masterwith:src:'github/mqyqingfeng'dst:'gitee/mqyqingfeng'dst_key:${{secrets.GITEE_PRIVATE_KEY}}dst_token:${{secrets.GITEE_TOKEN}}static_list:"learn-typescript"force_update:truedebug:true在这个例子中,我们定义了一个名为syncToGitee的工作流,指定将代码提交到分支gh-pages来触发该工作流。任务下只有一个名为repo-sync的任务,运行在ubuntu-latest上。具体步骤下,只有一个步骤MirrortheGitHuborganizationrepostoGitee。使用yikun/hub-mirror-action@master动作,with中的内容是动作需要的一些参数。系列文章系列文章目录地址:https://github.com/mqyqingfen...微信:“mqyqingfeng”,加我到SaeYu的唯一读者群。如有错误或不准确的地方,请务必指正,万分感谢。如果你喜欢或者有启发,欢迎star,这也是对作者的鼓励。
