本文转载自微信公众号“老王加”,老王加作者老王。转载本文请联系老王Plus公众号。GithubAction是Github推出的一项持续集成服务。这个持续集成有很多操作,比如:抓取代码、运行测试、登录远程服务器、发布到第三方服务等等。就我个人而言,用的最多的就是自动生成Nuget包,自动发布到Nuget。这样我就只能关心代码本身了。代码完成后,Push到仓库,后面Action会自动完成。在这篇文章中,我将从零开始,介绍Action的创建和使用。1.向Dotnet项目添加GithubAction我们在Github上创建一个简单的Dotnet应用程序。看看目录结构:%tree-a..├──.gitignore├──GithubActionSample.sln├──README.md├──src│├──GithubActionSample.csproj│└──Program.cs└──tests一开始基本上是这样的。通常我会加几个文件:README.md,用来写说明;.gitignore,这个是提交时跳过某些文件的定义,比如bin和obj下的文件,不需要提交;测试目录包含测试代码。当然,我会把它保存在这里。GithubActions需要放在一个固定的位置——Git仓库的根目录。我们创建一个.github目录并在其中创建一个workflows子目录。这是我们将在其中创建操作的目录。请注意,不能更改目录名称和结构。Github将在此位置查找工作流配置。接下来,我们在此位置创建一个Action定义。操作需要一个YAML文件。该文件的格式将在后面讨论。该目录下可以创建多个YAML文件,对应多个工作流的配置,每个工作流配置对应不同的自动化需求。我们先创建一个自动编译代码的Action,文件名为Build.yml。完成后看一下目录结构:%tree-a..├──.github│└──workflows│└──Build.yml├──.gitignore├──GithubActionSample.sln├──README。md├──src│├──GithubActionSample.csproj│└──Program.cs└──tests这是一个Action。接下来我们一步步完成这个Action的配置。2.完成Action配置完成Action配置其实就是完成上面Build.yml文件的内容。1.首先指定动作名称。根据Github的说明,这个名称不是必需的。不过一般来说,我会习惯加个名字。根据文件名判断功能不是一个好习惯。格式非常简单:name:Samplebuild2。配置触发器触发器用于定义Action将运行的情况。一般来说,有几种选择:单个事件,比如提交代码Push时,写成:on:push多个事件,比如Push和PullRequest,写成:on:[push,pull_request]有时,我们还需要添加更多的条件,比如当Push和PullRequest走到主分支时:on:push:branches:-mainpull_request:branches:-main还有一个非常有用的触发器,就是定时器。比如我们想在特定的时间或者特定的周期运行这个Action,我们可以使用定时器。定时器的写法为:on:schedule:-cron:'5****',本定时器采用Linux下Cron定时器的写法。具体的写法和含义可以查看Cron的规则。除此之外,还有一些更高级的用法,比如根据一个Action的结果触发另一个Action的执行。与此类似,大家可以去Github的文档了解更多,这里是传送门。在大多数情况下,上述三种方法就足够了。在我们今天的示例中,我们希望在提交后触发编译。因此,我们使用第一个:定义了on:push:branches:-main触发器,接下来要做什么。在Action中,称为任务Jobs。3.定义任务Jobs在规则中,一个触发器可能对应多个任务,每个任务都需要有一个ID和一个名称。jobs:first_job:name:Firstjobsecond_job:name:Secondjob上例中first_job为ID,requirement为单词,可以使用下划线。在第一份工作下面是名字。和Action的名字一样,可以省略。对于一个任务,需要配置运行环境和步骤如下。运行环境是指Action需要运行的外部操作系统。说白了就是Github提供的虚拟机。当然,我们也可以创建自己的VM来运行,但我们通常使用Github托管的VM。共有三个选项:Windows、UbuntuLinux、macOS。运行环境标有runs-on:jobs:first_job:name:Firstjobruns-on:windowsstep,定义了需要多少步才能完成。每个步骤都需要单独列出。当Action执行时,会按照这一步一行一行的执行。直接看例子:steps:-uses:actions/checkout@v2-name:Setup.NETSDKuses:actions/setup-dotnet@v1with:dotnet-version:5.0.x-name:Restorerun:dotnetrestore-name:Buildrun:dotnetbuild--configurationRelease--no-restore这是一个简单步骤的例子。第一步使用actions/checkout@v2,这是GitHubAction的publicaction,用于检出代码。第二步是创建编译环境。running-on给出的VM是空的,需要我们自己创建环境。不过,没有必要像重新安装环境那样做。Github给出了固定的环境创建方法。这里我们使用actions/setup-dotnet@v1在环境中配置DotnetSDK,并定义SDK版本为5.0。在接下来的两步中,需要在环境中运行命令,所以使用run关键字。这两个步骤其实就是我们在命令行中用来生成和编译代码的两个命令。最后看一下完整的Build.yml:name:SampleBuildon:push:branches:-mainjobs:build:runs-on:ubuntu-lateststeps:-uses:actions/checkout@v2-name:Setup.NETSDKuses:actions/setup-dotnet@v1with:dotnet-version:5.0.x-name:Restorerun:dotnetrestore-name:Buildrun:dotnetbuild--configurationRelease--no-restore3.RunAction配置完成,下面正在运行。操作在Github上,当然要先提交代码。提交到Github,Action会按照我们设置的方式运行。本文代码在:https://github.com/humornif/GithubActionSample
