如何使用github的action自动在服务器上拉取最新提交
代码:
# auto_build
name: auto deploy blog to ecs
on:
push:
branches:
- main
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Deploy to server
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.SERVER_HOST }}
username: ${{ secrets.SERVER_USER }}
key: ${{secrets.SERVER_SSH_KEY}}
script: |
cd /var/www/html
git pull origin main
sudo service nginx restart
什么是action?
简单来说,就是你写一段代码(workflow),然后根据你设定的触发条件,将会在特定情况下,使用github提供的服务器来执行你的代码。
以下是详细回答。
GitHub Actions 是 GitHub 提供的一种基于事件触发的工作流自动化服务。它允许用户在自己的仓库中配置自动化任务,在特定事件发生时自动执行。
例如,您可以使用 GitHub Actions 设置自动化构建、测试、部署等任务。每当您推送新代码到您的仓库时,GitHub Actions 就会自动运行您配置的任务来对新代码进行构建、测试和部署。
GitHub Actions 使用 YAML 文件配置任务,您可以在仓库的 .github/workflows 目录中创建一个 YAML 文件来配置任务。
它也可以用来自动化软件开发工作流程,例如持续集成和持续交付。可以使用现有的第三方 Actions 来完成常见的工作流程,也可以自己编写自定义 Actions。
如何创建workflow
顺带一提
这些是别人的工作流,你可以选择使用。
如何写代码
这里是官方文档:GitHub Actions Documentation - GitHub Docs
回到一开始的代码:
# auto_build
name: auto deploy blog to ecs
on:
push:
branches:
- main
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Deploy to server
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.SERVER_HOST }}
username: ${{ secrets.SERVER_USER }}
key: ${{secrets.SERVER_SSH_KEY}}
script: |
cd /var/www/html
git pull origin main
sudo service nginx restart
#是注释
name是工作流的名称
on是执行条件,这里是当有push的时候 push的参数branches指限定哪一个分支有push,这里是main分支有push则执行工作流
job就是github要执行的任务,这里有个叫build的任务,runs-on指定在ubuntu最新版本上执行
setps列出了这个任务的每一个步骤
name就是指定这个步骤的名称
uses:代表使用什么来执行操作,这里是使用appleboy/ssh-action 这个第三方 action 来执行这个步骤。
with则是这个action的一些参数,包括ip,用户名,ssh的值,script是要执行的代码 | 表示执行几行的代码
secrets.SERVER_HOST是什么呢,指存储在secrets中的SEVER_HOST变量,因为如果直接写在代码上会泄露。
具体的创建方法是:
注意创建的名称不用加前缀secrets.
host 和 username都很好理解,就是服务器的ip地址和用户名,而ssh就是通过秘钥来登陆服务器。
如何创建ssh
这里以阿里云为例,网络上有各种文章介绍。
如何创建密钥对:创建SSH密钥对 (aliyun.com)
注意创建完后要重启服务器才生效(同时不能再使用密码登陆,要修改为密码登陆可以参考:文章。
创建完后会自动下载一个后缀为pem的文件,记事本打开复制,这就是secrets.SERVER_SSH_KEY的值
大功告成。
注意,执行代码的返回消息在:
中查看。
部署完后网页没有更新可以刷新下清除缓存。