当前位置: 首页 > 科技观察

GithubActions入门指南与实践

时间:2023-03-11 22:35:32 科技观察

由于github提供了githubactions,依赖github的个人或公司可以考虑将自己的持续集成解决方案迁移到githubactions。GitHub会提供一个如下配置的服务器作为runner,可以说是相当良心了。2核CPU7GBRAM内存14GBSSD磁盘空间另外,如果你有网络延迟需求(比如推拉图片时产生的网络延迟),你也可以自己搭建runner。本文将介绍githubactions的使用方法,以及如何使用它自动部署个人博客或前端应用快速上手。进入github上的个人仓库,找到Actions选项卡。Actions如果你是前端项目,可以使用Node.js模板,点击SetupthisworkflowActionsSetup现在生成一个文件.github/workflows/nodejs.yaml,修改内容如下name:GitActionTeston:[push]工作:构建:运行:ubuntu-lateststeps:-uses:actions/checkout@v1-name:UseNode.js10.xuses:actions/setup-node@v1with:node-version:10.x-name:npminstall,buildrun:|npminstallnpmrunbuild--if-presentenv:CI:true执行gitpush操作,现在可以在github的Actions选项卡上看到执行结果。ActionsStarttermrunner:github分配的执行CI/CD的buildserver(也可以自己搭建runner)workflow:CI/CDworkflowjob:构建测试部署等任务。每个工作流由多个作业组成。步骤:每个作业由多个步骤组成。配置参考官方文档:WorkflowsyntaxforGitHubActions[1]以下是触发CI/CD时常用的配置事件。如果需要上传代码自动部署的功能,应该选择on:pushon:push更多的事件可以参考官方文档Eventsthattriggerworkflows[2]此外,我们可以使用issues事件来做很多事情,比如邮件通知等,如果是Issue博客,可以监听issues.opened事件,调用githubapi,自动生成URLblogon:issues:types:[opened,edited,milestoned]jobsCI/CD工作流由许多作业组成,例如最典型的作业是lint、测试、构建或部署。jobs:test:build:deploy:所有作业都是并行的,但往往存在依赖关系:“你必须通过测试才能部署。”jobs..needsneeds决定job的依赖关系jobs:test:deploy:needs:testjobs..runs-on当你使用githubactions时,github会慷慨的给你分配一个配置好的服务器作为构建服务器torunyourworkflow2-coreCPU7GBofRAMmemory14GBofSSDdiskspace嗯,比我自己的服务器好用runs-on指定服务器系统,最常用的应该是ubuntu-latestruns-on:ubuntu-latestruns-on:windows-latestjobs..steps是一个task的一系列动作,比如部署前端需要安装依赖,编译代码等jobs..steps.name指定一个名字对于该步骤,会在githubactionconsole中显示displayjobs..steps.run该步骤需要在shell中执行的命令#Singleline-name:InstallDependenciesrun:npminstall#Multiplelines-name:InstallandBuildrun:|npminstallnpmrunbuildjobs..steps.uses选择一个action,可以理解为几个steps.run,有利于代码重用。这也是githubaction的主要功能。如果你想找到一个有用的github动作,你可以在githubmarketplace中浏览和检索它。这是一个在当前操作系统安装node:10的action的例子-name:useNode.js10.xuses:actions/setup-node@v1with:node-version:10.x当然,这里怎么可能少了docker,docker也可以用在action中。如果对docker不太了解,可以看我的文章:docker简单介绍[3]下面是npminstalljobs:build:steps:-name:Installuses:docker://node:alpinewith的例子:args:npminstallsecret和context如何访问github操作上的敏感数据?使用ssh登录时如何维护密码。我们可以在githubrepo上点击Settings->Secrets来设置secretActionsSecret-name:setupaliyunossuses:manyuanrong/setup-ossutil@masterwith:endpoint:oss-cn-beijing.aliyuncs.comaccess-key-id:${{secrets.OSS_KEY_ID}}access-key-secret:${{secrets.OSS_KEY_SECRET}}这里的secret是一种context,描述CI/CD工作流中的context信息,用${{expression}}语法表示。除了secret,还有github:工作流信息,比如github.sha获取当前commit的SHA,我们可以用它来输入sentry或者docker镜像的版本号env:环境变量job:当前commit的信息执行作业,例如job。status表示当前job矩阵的执行状态:描述了一些构建信息,比如node和os版本号更多上下文信息可以参考官方文档ContextsandexpressionsyntaxforGitHubActions[4]实践一:博客自动部署我的博客目前托管在阿里云OSS上,下面的action.yaml描述了自动部署的过程。可以参考我的配置shfshanyue/blog[5]《关于阿里云OSS托管的详情,可以参考阿里云OSS托管你的前端应用[6]》name:deploytoaliyunosson:[push]jobs:build:runs-on:ubuntu-lateststeps:#Cutcodetorunner-uses:actions/checkout@v1with:submodules:true#下载gitsubmodule-uses:srt32/git-actions@v0.0.3with:args:gitsubmoduleupdate--init--recursive#Usenode:10-name:useNode.js10.xuses:actions/setup-node@v1with:node-version:10.x#npminstall-name:npminstalllandbuildrun:|npminstallnpmrunbuildenv:CI:true#设置id/secret阿里云OSS,存放在github的secret-name:setupaliyunossuses:manyuanrong/setup-ossutil@masterwith:endpoint:oss-cn-beijing.aliyuncs.comaccess-key-id:${{secrets.OSS_KEY_ID}}access-key-secret:${{secrets.OSS_KEY_SECRET}}-name:cpfilestoaliyunrun:ossutilcp-rf.vuepress/distoss://shanyue-blog/Deployment成功部署成功实践二:GithubReadme2020年8月自动生成,那是我赤裸裸辞职的月份。Github推出了个人主页功能,即创建一个与Github用户名同名的Repo,里面的Readme.md就是你的个人主页。比如我在创建shfshanyue/shfshanyue仓库时,可以通过Readme.md创建个人主页。这时候各种GithubActions涌现出来定制我的个人主页。大致思路如下:GithubAPI获取自己的Github动态,按照指定格式编写ReadmeGithubActions自动提交代码。优秀的Github个人主页waka-readme-stats[8]的一个Actions[7]可以做出如下漂亮的个人主页📅I'mMostProductiveonSundaysMonday50commits███????T13.19%Tuesday85commits█████????????????????????22.43%Wednesday56Commits███???????????????????????????????????14.78%Thursday44commits███???????????????░111.61%的星期五28commits█????????????????????????7.39%星期六3030commits██??????????????*它正在拉动羊毛!”先介绍一个使用GithubActions的工具:哔哩哔哩的自动签到工具[9]?通过GitHubActions实现每日在线自动运行任务:每日自动登录、观看、分享、投币视频,日常任务全体验,轻松升级6级,实现自动领取会员大礼包、月底自动充值等功能。?至于其他有趣的定时任务可以随便挑,就需要发挥你的想象力了!参考[1]GitHubActions的工作流语法:https://help.github.com/en/actions/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions[2]触发工作流:https://help.github.com/en/actions/automating-your-workflow-with-github-actions/events-that-trigger-workflows#about-workflow-events[3]docker简单入口:https://github.com/shfshanyue/op-note/blob/master/docker.md[4]GitHubActions的上下文和表达式语法:https://help.github.com/en/actions/automating-your-workflow-with-github-actions/contexts-and-expression-syntax-for-github-actions#job-context[5]shfshanyue/blog:https://github.com/shfshanyue/blog/blob/master/.github/workflows/nodejs.yml[6]在阿里云OSS上托管您的前端应用程序:./deploy-fe-with-alioss。md[7]Actions优秀的Github个人主页:https://github.com/abhisheknaiidu/awesome-github-profile-readme#github-actions-[8]waka-readme-stats:https://github.com/anmol098/waka-readme-stats[9]B站自动签到工具:https://github.com/RayWangQvQ/BiliBiliTool本文转载自微信公众号《全栈成长之路》,您可以通过以下二维码关注转载文章,请联系全栈成长之路公众号.