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-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 毕竟动作流就像是一台免费的服务器,打包后端 定时任务,爬虫 都是可以的

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

通过例子说明-动态规划

选择>行动>思考,好像是个死循环 -song。 动态规划(Dynamic Programming,简称DP)是一种解决问题的数学优化方法,通常用于解决具有重叠子问题和最优子结构性质的问题。它的基本思想是将问题拆分成小的子问题&#…

革新性技术:基于搜索操作的存内计算

文章目录 革新性技术:基于搜索操作的存内计算CSDN首个存内计算开发者社区NVALT:近似查找表的艺术MAP:存内计算的未来SQL-PIM:数据库的未来内存计算架构与技术小结从NVALT到NVQuery:存内计算的探索与前景NVQuery&#x…

242. 有效的字母异位词(力扣)(C语言题解)

✨欢迎来到脑子不好的小菜鸟的文章✨ 🎈创作不易,麻烦点点赞哦🎈 所属专栏:刷题 我的主页:脑子不好的小菜鸟 文章特点:关键点和步骤讲解放在 代码相应位置 题目链接: 242. 有效的字母异位词 …

UE5 C++ 读取本地图片并赋值到UI上

目录 结果图 节点样式 主要代码 调试代码 结果图 节点样式 主要代码 (注释纯属个人理解,可能存在错误) // Fill out your copyright notice in the Description page of Project Settings.#pragma once#include "CoreMinimal.h&q…

Mysql进阶篇

1.Mysql服务架构 连接层: 处理客户端连接请求,对用户进行认证 服务层: 可以接收sql,调用存储过程,优化sql,缓存数据.... 引擎层: 负责实际与文件层进行交互操作的,可以有不同的引擎选择. 物理文件层: 存储表数据 以及 各种日志文件. 2.Mysql引擎 存储引擎就是存储数据&…

TSINGSEE青犀视频智慧电梯管理平台,执行精准管理、提升乘梯安全

一、方案背景 随着城市化进程的不断加快,我国已经成为全球最大的电梯生产和消费市场,电梯也成为人们日常生活中不可或缺的一部分。随着电梯数量的激增,电梯老龄化,维保数据不透明,物业管理成本高,政府监管…

StarRocks-3.1.0 单节点部署

1. 相关环境准备 FE: /opt/starrocks BE: /opt/starrocks 安装包下载 wget https://releases.starrocks.io/starrocks/StarRocks-3.1.0.tar.gz解压缩 tar -zxvf StarRocks-3.1.0.tar.gz 安装jdk (v2.5 及以上版本建议安装 JDK 11,我们使用…

腾讯mini项目总结-指标监控服务重构

项目概述 本项目的背景是,当前企业内部使用的指标监控服务的方案的成本很高,无法符合用户的需求,于是需要调研并对比测试市面上比较热门的几款开源的监控方案(选择了通用的OpenTelemetry协议:Signoz,otel-…

MedSAM:深度学习通用医学影像分割模型,更快、更准确地自动识别诊断疾病

MedSAM是一款基于深度学习的医学影像分割工具,它能够自动识别和描绘医学影像中的重要区域,如肿瘤或其他组织的病变。该工具通过学习大量医学影像和对应的掩模(即正确的分割结果),能够处理各种不同的医学影像和复杂情况…

数据库之TiDB基础讲解

文章目录 1 TiDB1.1 引言1.2 TiDB介绍1.3 系统架构1.3.1 TIDB Server1.3.2 PD Server1.3.3 TIKV Server1.3.4 TiKV如何不丢失数据1.3.5 分布式事务支持 1.4 与MySQL的对比1.5 性能测试1.5.1 测试一1.5.2 系统测试报告 2 1 TiDB 1.1 引言 当我们使用 Mysql 数据库到达一定量级…

使用nginx对视频、音频、图片等静态资源网址,加token签权

目前很多静态资源,都可以无权限验证,进行访问或转发,对有价值的资源进行签权,限制转发无法在代码中实现拦截,我们可以使用nginx对视频、音频、图片等静态资源网址,加token签权 如: http://192…

Win10 双网卡实现同时上内外网

因为需要同时上内网和外网,但公司做了网络隔离,不能同时上内外网,所以多加了块无线网卡,配置双网关实现同时上内外网,互不影响 打开 Windows PowerShell(管理员),输入:ro…

CCF-CSP 202312-2 因子化简(Java、C++、Python)

文章目录 因子化简题目背景问题描述输入格式输出格式样例输入样例输出样例解释子任务 满分代码JavaCPython线性筛法 因子化简 题目背景 质数(又称“素数”)是指在大于 1 的自然数中,除了 1 和它本身以外不再有其他因数的自然数。 问题描述…

房屋租赁系统-java

思维导图:业务逻辑 类的存放: 工具类 Utility package study.houserent.util; import java.util.*; /***/ public class Utility {//静态属性。。。private static Scanner scanner new Scanner(System.in);/*** 功能:读取键盘输入的一个菜单…

DevOps落地笔记-02|影响地图:产品规划和需求分析的利器

从这一讲开始,我们进入 DevOps 正题。按照端到端的顺序,讲解 DevOps 中的最佳实践如何在软件开发过程中发挥作用。所谓端到端,是指从需求提出到需求被发布到生产环境交付给用户的整个过程,可以理解为软件开发的全生命周期。所谓最…

06 SB3之Thymeleaf实现视图返回

1快速尝试一个返回视图的项目 1.1创建器添加Web, Thymeleaf, lombok依赖创建项目 1.2 编写Controller Controller public class QuickController {RequestMapping("/exam/quick") public String quick(Model model){//业务处理结果数据,放入到 Model 模…

【lesson1】高并发内存池项目介绍

文章目录 这个项目做的是什么?这个项目的要求的知识储备和难度?什么是内存池池化技术内存池内存池主要解决的问题malloc 这个项目做的是什么? 当前项目是实现一个高并发的内存池,他的原型是google的一个开源项目tcmalloc&#xf…

万户 ezOFFICE SendFileCheckTemplateEdit.jsp SQL注入漏洞

0x01 产品简介 万户OA ezoffice是万户网络协同办公产品多年来一直将主要精力致力于中高端市场的一款OA协同办公软件产品,统一的基础管理平台,实现用户数据统一管理、权限统一分配、身份统一认证。统一规划门户网站群和协同办公平台,将外网信息维护、客户服务、互动交流和日…

Redis内存设置

通过redis-cli进入Redis命令行 redis权限认证命令:auth 查看redis内存使用情况的命令:info memory 查看最大内存命令:config get maxmemory 设置最大内存命令:config set maxmemory 也可以通过redis.conf配置文件修改最大内存…

MicroPython核心:映射和字典

MicroPython字典和映射使用称为开放寻址和线性探测的技术,本文详细介绍了这两种方法。 开放寻址 开放寻址用于解决碰撞问题,碰撞是非常常见的现象,当两个条目恰好散列到同一个槽或位置时就会发生碰撞。例如,散列设置如下&#x…