GitHub工作流的使用笔记

news2024/10/6 16:26:14

文章目录

  • 前言
  • 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-latest

    steps:
    - uses: actions/checkout@v3

    # 设置 Node.js 环境,版本为 16
    - name: Setup Node.js
      uses: actions/setup-node@v3
      with:
        node-version: 16

    # 安装项目依赖
    - name: Install Dependencies
      run: yarn install

    # 执行构建脚本
    - name: Build
      run: yarn run build


    # 先设置时区并获取东八区当前时间
    - name: Get Beijing Time
      id: beijing_time
      run: echo "BEIJING_TIME=$(TZ=Asia/Shanghai date +'%Y-%m-%d %H:%M:%S')" >> $GITHUB_ENV


    # 推送构建结果到 build 分支
    - name: Push to Build Branch
      run: |
        git config --local user.email "action@github.com"
        git config --local user.name "Yc Action"
        git checkout --orphan temp-build
        git rm -rf .
        rm -rf node_modules                       # 移除 node_modules
        find . -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 Output
      run: |
        echo "SCRIPT_OUTPUT=$(curl -s ${{ secrets.URL }})" >> $GITHUB_ENV

      # 构建成功后发送邮件
    - name: Send Email on Success
      if: success() # 这会确保只在成功时发送邮件
      uses: dawidd6/action-send-mail@v2
      with: # 以下是发送邮件需要提供的一些配置信息
        server_address: smtp.qq.com
        server_port: 587
        username: ${{ secrets.EMAIL_USERNAME }}
        password: ${{ secrets.EMAIL_PASSWORD }}
        subject: 打包成功 - ${{ env.SCRIPT_OUTPUT }}
        to: ${{ secrets.TO_EMAIL }}
        from: GitHub Actions
        body: 构建成功。构建时间:${{ env.BEIJING_TIME }}。脚本输出:${{ env.SCRIPT_OUTPUT }}

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

@GetMapping("/run-script")
 public String runScript(String scriptName) {
     try {
         // 判断操作系统是否为Linux
         String 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-latest

    steps:
    - uses: actions/checkout@v3

    - name: 设置 Node.js 环境,版本为 16
      uses: actions/setup-node@v3
      with:
        node-version: 16

    - name: 安装项目依赖
      run: yarn install

    - name: 执行构建脚本
      run: yarn run build


    - name: 先设置时区并获取东八区当前时间
      id: beijing_time
      run: 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-build
        git rm -rf .
        rm -rf node_modules                       # 移除 node_modules
        find . -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.git
        git push gitee HEAD:build -f

    - name: 构建成功后发送邮件
      uses: dawidd6/action-send-mail@v2
      with: # 以下是发送邮件需要提供的一些配置信息
        server_address: smtp.qq.com
        server_port: 587
        username: ${{ secrets.EMAIL_USERNAME }}
        password: ${{ secrets.EMAIL_PASSWORD }}
        subject: 推送到gitee成功 - ${{ env.SCRIPT_OUTPUT }}
        to: ${{ secrets.TO_EMAIL }}
        from: GitHub Actions
        body: 推送成功。请自己去更新构建内容,时间:${{ env.BEIJING_TIME }}。脚本输出:${{ env.SCRIPT_OUTPUT }}

案例3:暂时略

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

我们距离AGI还有多远

什么是AGI AGI(人工通用智能)是指能够像人类一样完成任何智能任务的人工智能系统。AGI的目标是创建一个全面智能的系统,可以解决广泛的问题并进行多种任务。这种系统能够在不同的环境中适应和学习,并且可以从不同的来源中获取信息…

Redis -- 常用数据结构,认识数据类型和编码方式

"人生就像骑自行车,要保持平衡,就必须保持前进。" — 爱因斯坦 说到数据结构,或许就能想到哈希表,列表集合等数据结构。对于redis来说对应的key的value的形式也可以是这些数据结构,如下: 针对上面…

数据结构:大顶堆、小顶堆

堆是其中一种非常重要且实用的数据结构。堆可以用于实现优先队列,进行堆排序,以及解决各种与查找和排序相关的问题。本文将深入探讨两种常见的堆结构:大顶堆和小顶堆,并通过 C 语言展示如何实现和使用它们。 一、定义 堆是一种完…

mysql 一条查询语句执行过程顺序

整体架构 client connectors: mysql提供各种语言连接客户端api,client发送sql语句到server端进行执行 连接器(Connectors):连接器负责客户端与服务端进行连接,使用mysql协议或X协议使得客户端可以通过api…

【性能测试】混合业务场景按比例设计

已知从生产环境中统计出的接口比例如下所示: 接口接口比例接口140%接口220%接口330%接口410% 场景一:以上接口无上下依赖关系,设计出容量场景 接口1比例如下: 接口2比例如下: 接口3比例如下: 接口4比例如…

速卖通半托管优缺点是什么?速卖通半托管和全托管的区别是什么?速卖通半托管怎么发货?

1月5日,阿里速卖通AliExpress正式向全体卖家推出半托管模式,并且官方连续发放多重补贴,重金加码半托管模式,推广力度非常大。 关于速卖通半托管服务春节补贴政策 图源:阿里巴巴全球速卖通官方 由此可见,半…

C语言第十四弹---函数递归

✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】 函数递归 1、递归是什么? 1.1、递归的思想: 1.2、递归的限制条件 2、递归举例 2.1、举例1:求n的阶乘 2.1.1、分析和代码…

备战蓝桥杯---数据结构与STL应用(入门3)

我们先来一道题作为过渡&#xff1a; 我们只需枚举n,选出左右第一个小于它高度的坐标即可&#xff0c;于是我们可以用两个方向的优先队列来维护&#xff0c;下面是AC代码&#xff1a; #include<bits/stdc.h> using namespace std; #define int long long int n; struct …

flutter+go构建的即时通讯app,ChatCraft

前言 Hi&#x1f44b;all.好久不见&#xff0c;已经两个多月没有发文章了&#xff0c;这段时间一直在反思过去的一年&#xff0c;有好有坏。对博客文章这块我对自己是不满意的&#xff0c;文章的质量参差不齐&#xff0c;有时候在没有好的题材时&#xff0c;我会选择写一些泛泛…

9.SELinux

目录 1. 概述 1.1. 概念 1.2. 作用&#xff1a; 1.3. SELinux与传统的权限区别 2. SELinux工作原理 2.1. 名词解释 2.1.1. 主体&#xff08;Subject&#xff09; 2.1.2. 目标&#xff08;Object&#xff09; 2.1.3. 策略&#xff08;Policy&#xff09; 2.1.4. 安全上…

河南省考后天网上确认,请提前准备证件照哦

✔报名时间&#xff1a;2024年1月18号一1月24号 ✔报名确认和缴费&#xff1a;2024年1月 31号一2月4号 ✔准考证打印&#xff1a;2024年3月12号一3月17号 ✔笔试时间&#xff1a;2024年3月16日-2024年3月17日。 ✔面试时间&#xff1a;面试时间拟安排在2024年5月中旬 报名网址&…

ChatGPT学python: 用json文件传参

目录 json语法最简陋版python解析语法小结 json语法最简陋版 param.json [{"Table_name": "table1","Event_name_colum": 4,"update_colum": 9},{"Table_name": "table2","Event_name_colum": 3,&quo…

快速掌握,制作可发送上课通知小程序的秘籍

对于教育培训机构来说&#xff0c;及时通知学生上课时间、地点等重要信息是至关重要的。而现在&#xff0c;通过小程序&#xff0c;我们可以更加便捷地实现这一目标。下面将为你介绍如何制作一个可发送上课通知的小程序。 首先&#xff0c;通过百度搜索“乔拓云”&#xff0c;并…

NFS 网络文件系统

1. NFS简介 NFS&#xff08;Network File System 网络文件系统&#xff09;&#xff0c;是一种用于在计算机网络上共享文件的协议。它允许一个计算机系统通过网络将其文件和存储设备共享给其他计算机系统&#xff0c;使得这些系统可以像访问本地文件一样访问网络共享的文件。 N…

excel中提取一串数字中的某几个数字

excel中提取一串数字中的某几个数字 提取一串数字中的某几个数字&#xff0c;使用公式函数截取数据 LEFT函数&#xff1a;用于截取单元格左边的字符&#xff0c;例如“LEFT(A1,5)”会返回A1单元格中的前5个字符。RIGHT函数&#xff1a;用于截取单元格右边的字符&#xff0c;例…

如何設置動態住宅IP代理管理工具SwitchySharp插件

動態住宅IP代理管理工具SwitchySharp擴展程式專為Chrome設計&#xff0c;可讓用戶更輕鬆地管理代理設置&#xff0c;並以其簡單性和靈活性著稱。本文我們將討論SwitchySharp插件的功能、優點、如何設置。 Proxy SwitchySharp插件具體有什麼用&#xff1f; 此工具是專為Chrome設…

汽车软件开发模式的5个特点

汽车软件开发属于较为复杂的系统工程&#xff0c;经常让来自不同知识背景的工程师在观点交锋时出现分歧。在解决复杂性和对齐讨论基准时&#xff0c;可以通过勾勒出讨论对象最关键的几个特征来树立典型概念。本文旨在通过5个典型特点的抽取&#xff0c;来勾勒出汽车软件开发模式…

Flask 入门2:路由

1. 前言 在上一节中&#xff0c;我们使用到了静态路由&#xff0c;即一个路由规则对应一个 URL。而在实际应用中&#xff0c;更多使用的则是动态路由&#xff0c;它的 URL是可变的。 2. 定义一个很常见的路由地址 app.route(/user/<username>) def user(username):ret…

STM32 IIC电量计LTC2944

1 描述 LTC2944 可在便携式产品应用中测量电池充电状态、电池电压、电池电流及其自身温度。宽输入电压范围允许使用高达 60V 的多节电池。精密库仑反向积分电流通过电池正极端子与负载或充电器之间的检测电阻器。 电压、电流和温度由内部 14 位无延迟 ΔΣ™ ADC 测量。测量结…

GBASE南大通用数据库对与例程相关联的对象的权限

数据库服务器检查是否存在任何被引用的对象&#xff0c;并验证调用该例程的用户是否拥有访问被引用的对象的必要权限。 由例程引用的对象可包括&#xff1a; • 表和列 • 序列对象 • 用户定义的数据类型 • 由该例程执行的其他例程 当例程运行时&#xff0c;定义有效的权…