当前位置: 首页 > Linux

使用githubactions部署代码

时间:2023-04-07 00:00:38 Linux

背景最近写了一个工具,需要在服务端运行。一开始我是用transmit直接上传代码,但是每次更新代码都要同步,而且因为服务器在国外,速度很慢,所以趁着放假的时候,我开始自动代码部署。要实现的功能之前已经使用Github的Webhooks进行了自动部署。原理就是在自己的服务器上启动一个服务,对外暴露一个接口。每次将代码推送到github,github服务器都会调用你的接口,收到请求后进行代码部署。这次我决定使用Actions来实现类似的功能。原理类似。当代码被推送到github时,github服务器会执行你预设的步骤来部署代码。要实现的功能是:推送代码,githubactionsrunner,登录自己的服务器,切换目录,拉取代码,重启服务。方法和步骤如下(参考mac免密码ssh登录配置指南):在本地创建公私钥对(个人认为创建专用密钥比较好):ssh-keygen-trsa-C《githubactions》上传公钥到服务器ssh-copy-id-i[publickeyfile]user@host#user是你的ssh用户,host是服务器地址,此时需要输入密码。#例子:ssh-copy-id-iid_rsa.pubroot@111.111.111.111ssh-add(mac的坑点)嗯,一般其他系统可以不用密码登录,但是mac就不行了。同样调用ssh-addssh-add-K[你的私钥文件,即没有.pub结尾的文件]#比如ssh-add-Kid_rsa可以直接使用sshuser@host登录服务器这一次,如果要,每次都要手动输入服务器IP,而且记不住。有没有更好的办法?答案是肯定的。以下是可选的,与本文的主要目的(部署代码)无关。参考macssh免密登录连接远程服务器。在.ssh目录下创建一个config文件,写入Hostalias-name#别名,这里以alias-name为例HostName111.111.111.111#要登录服务器的域名或IPPort22#要登录的端口oftheserverUserroot#登录服务器的用户名设置成功后,就可以直接使用sshalias-name登录服务器了!给github仓库添加私钥,我们需要授权github服务器在我们自己的服务器上执行一些命令,所以我们需要给它授权,给它私钥。一定不能在代码中明文写,应该放在哪里呢?答案是秘密。在仓库的Settings中,将步骤1中生成的私钥添加到Secrets中(注意添加时会在后续操作中使用Name)。一般私钥、服务器Host、服务器User都加在Secrets中,这样以后换服务器或者登录用户就不用改代码了。2.编写Actions文件参考1:GitHubActions入门教程参考2:使用GitHubActions实现博客自动化部署:-name:executingremotesshcommands#使用appleboy/ssh-action@master执行命令uses:appleboy/ssh-action@masterwith:host:${{secrets.DEPLOY_HOST}}username:${{secrets.DEPLOY_USER}}key:${{secrets.DEPLOY_SECRET}}script:cd&&gitpull&&npminstall&&其中和可以被你自己的取代。需要注意的是githubactionsrunner其实是没有办法直接登录我们的服务器执行命令的,所以需要使用appleboy/ssh-action@master封装的actions。好的,你完成了!