GitHub工作流的使用笔记

文章目录

  • 前言
  • 1. 怎么用
  • 2. 怎么写
    • 前端案例1:自动打包到新分支
    • 前端案例2:自动打包推送到gitee的build分支
    • 案例3:暂时略

前言

有些东西真的就是要不断的试错不断地试错才能摸索到一点点,就是摸索到凌晨两三点第二天要8点起床感觉要死。
为什么我会用这个东东,因为我搞的阿里云服务器2个g的运行内存,打包这玩意贼消耗内存,本来想搞Jenkins但是服务器上搞更要内存,本机搞又没必要,刚好之前的公司里面了解过这东东,直接就是试试就试试了

试错截图1
试错截图2
摸索出来能打包了野心也不会止步于此
试错截图3

1. 怎么用

怎么使用GitHub的工作流?
在项目根目录下创建.github/workflows/main.yml (main你顺便 叫ikun也行)
文件里面就是写环境和命令行命令
文件路径
然后推送到GitHub 就会自动识别并执行里面的命令

2. 怎么写

工作流文件内容

前端案例1:自动打包到新分支

当有代码被推送到main分支时触发

  • 打包代码
  • 强行推送到build分支(覆盖)
  • 发送请求给后端服务器(服务器自动到GitHub的build分支拉取部署)
  • 成功的话,配置QQ邮箱 给我另外一个邮箱发邮件

这里用到了推送别的分支,GitHub默认是关闭的,要自己打开
授予 GitHub Actions 推送权限:

  • 进入你的 GitHub 仓库的「Settings」-「Actions」页面。
  • 在「Workflow permissions」下,勾选「Allow write access to repository」选项。
  • 这样 GitHub Actions 就被授予了推送代码的权限。
    开启读取权限

命令里面用了很多${{ secrets.*** }}
这些就是不想被别人看到的一些敏感数据 比如密码 我比较保守账号密码URL全部都用这些表示了,那么怎么用呢?

  • 进入仓库设置: 在您的仓库页面上,点击顶部的Settings(设置)标签。
  • 访问Secrets部分: 在左侧菜单中,找到并点击 Secrets and variables(秘密)下面的Actions。这里存储了仓库的敏感数据。
  • 添加新的 Secret: 点击 “New repository secret”(新建仓库秘密)按钮。
  • 输入 Secret 的名称和值:
    – 在 “Name”(名称)字段中输入 Secret 的名称,例如 EMAIL_USERNAME。
    – 在 “Value”(值)字段中输入对应的数据,例如您的邮箱用户名。
  • 保存 Secret: 完成输入后,点击 “Add secret”(添加秘密)按钮保存。
    添加新的 Secret
    添加新的 Secret
name: Build and Deploy# 当代码被推送到 main 分支时触发此工作流程
on:push:branches: [main]jobs:build:runs-on: ubuntu-lateststeps:- uses: actions/checkout@v3# 设置 Node.js 环境,版本为 16- name: Setup Node.jsuses: actions/setup-node@v3with:node-version: 16# 安装项目依赖- name: Install Dependenciesrun: yarn install# 执行构建脚本- name: Buildrun: yarn run build# 先设置时区并获取东八区当前时间- name: Get Beijing Timeid: beijing_timerun: echo "BEIJING_TIME=$(TZ=Asia/Shanghai date +'%Y-%m-%d %H:%M:%S')" >> $GITHUB_ENV# 推送构建结果到 build 分支- name: Push to Build Branchrun: |git config --local user.email "action@github.com"git config --local user.name "Yc Action"git checkout --orphan temp-buildgit rm -rf .rm -rf node_modules                       # 移除 node_modulesfind . -name "*s.map" -exec rm -f {} \;   # 移除所有js.map和css.map文件mv build/* .git add -f *git commit -m "yc自动打包 - ${{ env.BEIJING_TIME }}"git push origin HEAD:build -f# 请求脚本并获取返回值- name: Run Script and Get Outputrun: |echo "SCRIPT_OUTPUT=$(curl -s ${{ secrets.URL }})" >> $GITHUB_ENV# 构建成功后发送邮件- name: Send Email on Successif: success() # 这会确保只在成功时发送邮件uses: dawidd6/action-send-mail@v2with: # 以下是发送邮件需要提供的一些配置信息server_address: smtp.qq.comserver_port: 587username: ${{ secrets.EMAIL_USERNAME }}password: ${{ secrets.EMAIL_PASSWORD }}subject: 打包成功 - ${{ env.SCRIPT_OUTPUT }}to: ${{ secrets.TO_EMAIL }}from: GitHub Actionsbody: 构建成功。构建时间:${{ env.BEIJING_TIME }}。脚本输出:${{ env.SCRIPT_OUTPUT }}

上面请求的URL是springboot 一个接口
有兴趣就看看(一定要自己加些校验)

@GetMapping("/run-script")public String runScript(String scriptName) {try {// 判断操作系统是否为LinuxString osName = System.getProperty("os.name").toLowerCase();if (!osName.contains("linux"))return "该脚本只能在Linux上运行。";// 指定要运行的脚本路径String scriptPath = "/var/script/"+scriptName;// 检查脚本是否存在if (!Files.exists(Paths.get(scriptPath)))return "脚本文件不存在。";// 在新的线程中执行脚本new Thread(() -> {try {Process process = Runtime.getRuntime().exec(scriptPath);process.waitFor();} catch (Exception e) {log.error(e.getMessage());}}).start();return "脚本在后台运行。";} catch (Exception e) {log.error(e.getMessage());return "执行脚本时出错。";}}



前端案例2:自动打包推送到gitee的build分支

代码被推送到 gitee-build 分支时触发

  • 打包代码
  • 设置gitee的仓库地址(要先提前在gitee拿到token 和在 GitHub动作秘密里面配置好)这个地址网上找了老久都找不到,基本只有GitHub的,就是设置不太一样
  • 推送到gitee(强制(覆盖))的build分支
  • 发送邮件

这里的name都用中文了,name就是个名字,比如工作流出错了 GitHub就会告诉你那个名字下面的工作出错,还有就像下图一样 清晰明了
name就是name

name: 构建和推送# 当代码被推送到 gitee-build 分支时触发此工作流程
on:push:branches: [gitee-build]jobs:build:runs-on: ubuntu-lateststeps:- uses: actions/checkout@v3- name: 设置 Node.js 环境,版本为 16uses: actions/setup-node@v3with:node-version: 16- name: 安装项目依赖run: yarn install- name: 执行构建脚本run: yarn run build- name: 先设置时区并获取东八区当前时间id: beijing_timerun: echo "BEIJING_TIME=$(TZ=Asia/Shanghai date +'%Y-%m-%d %H:%M:%S')" >> $GITHUB_ENV- name: 推送构建结果到gitee的 build 分支run: |git config --local user.email "action@github.com"git config --local user.name "Yc Action"git checkout --orphan temp-buildgit rm -rf .rm -rf node_modules                       # 移除 node_modulesfind . -name "*s.map" -exec rm -f {} \;   # 移除所有js.map和css.map文件mv build/* .git add -f *git commit -m "GitHub Actions自动打包 - ${{ env.BEIJING_TIME }}"git remote add gitee https://yc556:${{ secrets.GITEE_TOKEN }}@gitee.com/yc556/yc556.gitgit push gitee HEAD:build -f- name: 构建成功后发送邮件uses: dawidd6/action-send-mail@v2with: # 以下是发送邮件需要提供的一些配置信息server_address: smtp.qq.comserver_port: 587username: ${{ secrets.EMAIL_USERNAME }}password: ${{ secrets.EMAIL_PASSWORD }}subject: 推送到gitee成功 - ${{ env.SCRIPT_OUTPUT }}to: ${{ secrets.TO_EMAIL }}from: GitHub Actionsbody: 推送成功。请自己去更新构建内容,时间:${{ env.BEIJING_TIME }}。脚本输出:${{ env.SCRIPT_OUTPUT }}

案例3:暂时略

不只是能搞Git 毕竟动作流就像是一台免费的服务器,打包后端 定时任务,爬虫 都是可以的

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/442221.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

KAFKA节点故障的容错方案

KAFKA节点故障的容错方案 1. broker启动加载逻辑1.1 日志组成和分析1.2 snapshot文件1.3 broker启动流程1.4 LogManager的初始化和启动过程 2. controller高可用1.1 选主逻辑1.2 HA切换1.3 controller的职责 3. partition高可用3.1 ISR列表3.1 选举Leader 4. 疑问和思考4.1 如果…

Linux实验记录:使用firewalld

前言: 本文是一篇关于Linux系统初学者的实验记录。 参考书籍:《Linux就该这么学》 实验环境: VmwareWorkStation 17——虚拟机软件 RedHatEnterpriseLinux[RHEL]8——红帽操作系统 备注: RHEL8系统中集成了多款防火墙管理工具&#xf…

分布式事务的概述及其解决方案

分布式事务 本地事务 本地事务,也就是传统的单机事务。在传统数据库事务中,必须要满足四个原则: 其中,隔离性的隔离级别: 脏读: ReadUnCommited(读未提交) 并发的线程读取到其他线…

【笔记】React-Native跟Android交互--简单示例

/** * 使用命令 npx react-nativelatest init DemoRN创建项目 * * "react": "18.2.0", * "react-native": "0.73.2" * * 官网有详细教程:https://reactnative.dev/docs/native-modules-android */ 一、RN invoke androi…

Android Studio 安装配置教程 - Windows版

Android Studio下载 安装: 下载: Android Studio Hedgehog | 2023.1.1 | Android Developers (google.cn) 安装: 基本不需要思考跟着走 默认下一步 默认下一步 自定义修改路径,下一步 默认下一步,不勾选 默认下一…

中移(苏州)软件技术有限公司面试问题与解答(5)—— Linux进程调度参数调优是如何通过代码实际完成的1

接前一篇文章:中移(苏州)软件技术有限公司面试问题与解答(0)—— 面试感悟与问题记录 本文对于中移(苏州)软件技术有限公司面试问题中的“(11)Linux进程调度参数调优是如…

【lesson26】学习MySQL事务前的基础知识

文章目录 CURD不加控制,会有什么问题?CURD满足什么属性,能解决上述问题?什么是事务?为什么会出现事务事务的版本支持 CURD不加控制,会有什么问题? CURD满足什么属性,能解决上述问题&…

Springboot项目启动后浏览器不能直接访问接口,而postman可以访问?

在云服务器上部署springboot后端时,项目启动后浏览器不能直接访问接口,而postman可以访问。这是当时困扰了我大半天的小问题,在我打开防火墙和阿里云安全组之后还是没解决。然后在网上搜了很多很多资料,以为是浏览器访问权限或者是https什么证…

Python如何递归删除空文件夹

嗨喽,大家好呀~这里是爱看美女的茜茜呐 1.Python如何递归删除空文件夹,这个问题很常见。 但大多数人的解决办法都是自己实现递归函数解决这个问题,其实根本不用那么麻烦。 Python中的os.walk提供了一种从内到外的遍历目录树的方法&#xff…

使用.NET6 Avalonia开发跨平台三维应用

本文介绍在Vistual Studio 2022中使用Avalonia和集成AnyCAD Rapid AvaloniaUI三维控件的过程。 0 初始化环境 安装Avalonia.Templates dotnet new install Avalonia.Templates若之前安装过可忽略此步骤。 1 创建项目 选择创建AvaloniaUI项目 选一下.NET6版本和Avalonia版…

深入理解二叉树:遍历、构建与性质探索的代码实现

📷 江池俊: 个人主页 🔥个人专栏: ✅数据结构冒险记 ✅C语言进阶之路 🌅 有航道的人,再渺小也不会迷途。 文章目录 前言一、二叉树的存储结构二、二叉树链式结构的实现三、二叉树的前、中、后续遍历&…

银行数据仓库体系实践(10)--汇总指标层和集市模型设计

建立多层次的数据访问服务体系,有力提升数据仓库的价值。基于指标汇总层、集市层、可以提供面向业务人员的即席数据查询、以及面向应用开发者的数据接口、应用访问接口,满足不同类型应用的需要。 1、汇总指标层模型设计原则及步骤 1.1建设目标&#xff…