如何使用github actions自动化工作流
github actions是什么
GitHub Actions 是一种在 GitHub 上自动执行任务的平台。它允许你将你的工作流自动化,例如:
- 构建和测试代码
- 部署应用程序
- 发布软件包
- 协作开发
以下是使用 GitHub Actions 的一些优势:
- 自动化任务: 消除手动任务,提高效率。
- 提高代码质量: 自动化构建、测试和部署过程,减少错误和提升代码质量。
- 加速开发流程: 自动化流程,让开发人员专注于更重要的任务。
- 提升团队协作: 方便团队成员在工作流中协作,提高效率。
- 开源和易于使用: GitHub Actions 是开源的,并且提供易于使用的界面。
已经实现的github actions
- 同步代码仓库内容到
gitee
仓库 - 同步内容索引更新到
algolia
- 代码提交自动打包部署
github pages
- 代码提交
linux
服务器自动打包部署
怎么配置GitHub Secrets
进入GitHub仓库设置:
- 打开你的GitHub仓库。
- 点击右上角的 Settings。
添加Secrets:
- 在左侧栏中找到 Secrets and variables,然后选择 Actions。
- 点击 New repository secret 来添加新的Secret。
Secrets的示例内容
假设你有一个服务器,IP地址为 192.168.1.100,用户名为 root,密码为 your_password,你需要将这些信息添加为Secrets:
添加SSH_HOST:
- Name: SSH_HOST
- Value: 192.168.1.100
添加SSH_USER:
- Name: SSH_USER
- Value: root
添加SSH_PASSWORD:
- Name: SSH_PASSWORD
- Value: your_password
执行linux系统脚本
这里假设服务器的脚本已经实现相应的功能了:自动拉取代码、自动打包、自动更新nginx
实现效果
- 编写
github actions
配置文件,提交代码自动执行服务器脚本 - 作者只需要关注代码提交,其余均是自动化脚本
在你的项目根目录下创建一个 .github/workflows
目录,并在其中创建一个 .yml
文件来定义GitHub Actions工作流,例如 run_script.yml
。
- 由于GitHub Actions运行在Ubuntu环境中,而Ubuntu使用apt-get包管理器而不是yum。为了在Ubuntu环境中运行并安装sshpass和openssh-client,你需要使用适合的包管理器和命令。
- 请注意,使用密码认证相对
不太安全
,因此要确保密码的复杂性和保密性。同时,为了避免密码泄露,不要在代码中直接包含密码,而是通过GitHub Secrets
来管理。
sh
# 保持命令运行:即使用户退出会话,使用 `nohup` 运行的命令也会继续运行。
nohup /root/update.sh > /root/update_output.log 2>&1
run_script.yml 文件
yml
name: Run Root Script # 工作流名称
on:
push:
branches:
- master # 监控 master 分支上的推送事件
workflow_dispatch: # 手动触发工作流
jobs:
run-script:
runs-on: ubuntu-latest # 使用最新版本的 Ubuntu 作为运行环境
steps:
- name: Checkout code # 步骤1:检出代码
uses: actions/checkout@v2 # 使用官方的 checkout 动作
- name: Install SSH client and sshpass # 步骤2:安装 SSH 客户端和 sshpass
run: |
sudo apt-get update # 更新包列表
sudo apt-get install -y openssh-client sshpass # 安装 openssh-client 和 sshpass
- name: Run script on server # 步骤3:在服务器上运行脚本
env:
SSH_HOST: ${{ secrets.SSH_HOST }} # 从 GitHub Secrets 中读取 SSH 主机名
SSH_USER: ${{ secrets.SSH_USER }} # 从 GitHub Secrets 中读取 SSH 用户名
SSH_PASSWORD: ${{ secrets.SSH_PASSWORD }} # 从 GitHub Secrets 中读取 SSH 密码
run: |
# 使用 sshpass 和 SSH 密码进行 SSH 连接,并在服务器上运行脚本
sshpass -p "$SSH_PASSWORD" ssh -o StrictHostKeyChecking=no $SSH_USER@$SSH_HOST 'nohup /root/update.sh > /root/update_output.log 2>&1'
# 捕获脚本的退出状态
EXIT_STATUS=$?
# 从服务器获取输出日志文件
sshpass -p "$SSH_PASSWORD" scp -o StrictHostKeyChecking=no $SSH_USER@$SSH_HOST:/root/update_output.log .
# 显示输出日志文件内容
cat update_output.log
# 输出脚本执行结果
if [ $EXIT_STATUS -ne 0 ]; then
echo "Script execution failed with exit status $EXIT_STATUS" # 如果脚本执行失败,输出错误状态并退出
exit $EXIT_STATUS
else
echo "Script executed successfully" # 如果脚本执行成功,输出成功消息
fi