GitHub Actions 是一个非常强大的工具,可以用来实现各种自动化任务,包括自动编译和发布 release。以下是一个基本的工作流程,展示如何使用 GitHub Actions 实现这一目标:

  1. 创建 GitHub Actions 工作流文件:在你的 GitHub 仓库中,创建一个 .github/workflows 目录,并在该目录中创建一个新的工作流文件,例如 release.yml

  2. 定义工作流:在 release.yml 文件中,定义你的工作流步骤。以下是一个示例工作流,它演示了如何在每次推送到 main 分支时进行编译并创建一个新的 release。

name: Build and Release

on:
push:
branches:
- main
workflow_dispatch: jobs:
build:
runs-on: ubuntu-latest steps:
- name: Checkout repository
uses: actions/checkout@v4 - name: Set up Node.js
uses: actions/setup-node@v2
with:
node-version: "14" - name: Install dependencies
run: npm install - name: Build project
run: npm run build - name: Archive production artifacts
uses: actions/upload-artifact@v4
with:
name: build-artifacts
path: build/ release:
needs: build
runs-on: ubuntu-latest steps:
- name: Download build artifacts
uses: actions/download-artifact@v4
with:
name: build-artifacts - name: Create GitHub Release
id: create_release
uses: actions/create-release@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: v1.0.0
release_name: Release v1.0.0
body: |
Release notes for v1.0.0
draft: false
prerelease: false - name: Upload Release Asset
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_path: build/
asset_name: build-artifacts.zip
asset_content_type: application/zip

解释

  1. 工作流名称和触发器

    • name: Build and Release:定义工作流的名称。
    • on 条件定义了工作流何时被触发,这里是每当推送到 main 分支时触发。
  2. 构建作业

    • runs-on: ubuntu-latest:指定工作流程运行的环境。
    • actions/checkout@v4:将代码仓库检出到 runner。
    • actions/setup-node@v2:设置 Node.js 环境。
    • npm install:安装项目依赖。
    • npm run build:构建项目。
    • actions/upload-artifact@v4:将构建的工件上传,以便在后续步骤中使用。
    • actions/upload-artifact 的实现代码可以在 https://github.com/actions/upload-artifact 找到。
  3. 发布作业

    • needs: build:指定此作业依赖于名为 build 的作业。
    • actions/download-artifact@v2:下载构建工件。
    • actions/create-release@v1:在 GitHub 上创建一个新 release。GITHUB_TOKEN 用于进行身份验证。
    • actions/upload-release-asset@v1:将构建工件作为 release 资源上传。

注意事项

  • GITHUB_TOKEN:GitHub 提供的内置秘密,用于在 Actions 中进行身份验证。
  • 自定义步骤:根据你的项目和需求,你可能需要调整或添加步骤。例如,编译步骤可能会有所不同,具体取决于你使用的编程语言和构建工具。
  • 版本号:在实际使用中,你可能希望自动生成版本号而不是硬编码版本号。

参见:GitHub Actions 文档

更多示例代码

# .github/workflows/github-actions-demo.yaml
# 将代码打包为 tar.gz 并发布 name: Auto Release # 工作流名 run-name: Auto Release # 运行时的工作流名 on: [push] jobs:
build: # job 名可以自定义
runs-on: ubuntu-latest # 也可以是容器
steps:
- name: Checkout repository
uses: actions/checkout@v4 - name: Package VM
run: tar -zcvf VM.tar.gz VM - name: Package VPS
run: tar -zcvf VPS.tar.gz VPS - name: Upload Artifact VM.tar.gz
uses: actions/upload-artifact@v4
with:
name: VM.tar.gz
path: VM.tar.gz - name: Upload Artifact VPS.tar.gz
uses: actions/upload-artifact@v4
with:
name: VPS.tar.gz
path: VPS.tar.gz - name: Extract branch name
shell: bash
run: echo "##[set-output name=branch;]$(echo ${GITHUB_REF#refs/heads/})"
id: extract_branch - name: Create Release
id: create_release
uses: actions/create-release@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: ${{ steps.extract_branch.outputs.branch }}-${{ github.run_number }}
release_name: Release for ${{ steps.extract_branch.outputs.branch }} at ${{ github.sha }}
draft: false
prerelease: false - name: Upload Release Asset 1
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_path: ./VM.tar.gz
asset_name: VM.tar.gz
asset_content_type: application/gzip - name: Upload Release Asset 2
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_path: ./VPS.tar.gz
asset_name: VPS.tar.gz
asset_content_type: application/gzip # 一些可用变量
# runner.os: 运行 Action 的系统名
# job.status: job 的状态
# github.actor: 运行的 Action
# github.event_name: 触发 Action 的事件名
# github.ref: 当前分支名
# github.repository: 存储库名
# github.workspace: 存储库工作区

通过 GitHub Actions 实现代码的自动编译和发布的更多相关文章

  1. Ant自动编译打包&发布 android项目

    Eclipse用起来虽然方便,但是编译打包android项目还是比较慢,尤其将应用打包发布到各个渠道时,用Eclipse手动打包各种渠道包就有点不切实际了,这时候我们用到Ant帮我们自动编译打包了. ...

  2. 项目管理实践【五】自动编译和发布网站【Using Visual Studio with Source Control System to build and publish website automatically】

    在上一篇教程项目管理实践[三]每日构建[Daily Build Using CruiseControl.NET and MSBuild] 中,我们讲解了如何使用CCNET+MSBuild来自动编译项目 ...

  3. Andorid进阶7—— Ant自动编译打包&发布 android项目

    http://www.cnblogs.com/tt_mc/p/3891546.html Eclipse用起来虽然方便,但是编译打包android项目还是比较慢,尤其将应用打包发布到各个渠道时,用Ecl ...

  4. Intellij IDEA 修改代码后自动编译更新

    Intellij IDEA 一些不为人知的技巧 问题描述: Intellij IDEA 调试修改时,改动页面和 java 文件后,无法立刻看到变化,需要手动重启服务. 问题原因: 在 IDEA tom ...

  5. webpack学习_webpack-dev-server自动编译代码

    之前每次修改完之后都要执行npm run build来编译,下面有三种方式可以实现代码变化后自动编译代码,下面只重点说webpack-dev-server,其他的请看webpack开发文档 1.web ...

  6. rebar3自动编译

    功能:修改完代码可以自动编译加载到VM中 必须安装的软件: Linux: inotify  链接https://github.com/rvoicilas/inotify-tools/wiki 配置: ...

  7. 如何搭建自己的CICD流水线,实现自动编译部署功能?

    之前使用过GitLab的CICD流水线,有多种环境,点击即可编译部署,十分的方便. 如何在个人项目中搭建自己的CICD流水线,实现push代码后自动编译并部署呢?这里使用到阿里云 云效DevOps,阿 ...

  8. maven 使用之自动编译热部署设置

    参见创建webapp项目 eclipse Maven 使用记录 ------ 建立 webapp项目 在maven中为实现热部署设置,部署至webapp,即webroot 设置classes输出目的地 ...

  9. 为Github仓库添加Github Actions实现持续集成: Android apk自动编译发布以及github pages同步推送coding.net

    内容转载自我的博客 目录 说明 1. 编写Android项目的CI配置文件 2. 编写Jekyll项目的CI配置文件 2.1 配置coding.net 2.2 配置github 2.3 自动部署到co ...

  10. 使用GitHub Actions自动编译部署hexo博客

    前言 使用hexo博客也挺久的,最开始是本地hexo clean && hexo g,最后hexo d推送到服务器.后来是本地hexo clean && hexo g, ...

随机推荐

  1. 全志科技T507-H工业核心板规格书(4核ARM Cortex-A53,主频1.416GHz)

    1 核心板简介 创龙科技SOM-TLT507是一款基于全志科技T507-H处理器设计的4核ARM Cortex-A53全国产工业核心板,主频高达1.416GHz.核心板CPU.ROM.RAM.电源.晶 ...

  2. 从 Helm 到 Operator:Kubernetes应用管理的进化

    Helm 的作用 在开始前需要先对 kubernetes Operator 有个简单的认识. 以为我们在编写部署一些简单 Deployment 的时候只需要自己编写一个 yaml 文件然后 kubec ...

  3. rgba和opacity的透明效果有什么不同?

    rgba()和opacity都能实现透明效果,但最大的不同是opacity作用于元素,以及元素内的所有内容的透明度, 而rgba()只作用于元素的颜色或其背景色.(设置rgba透明的元素的子元素不会继 ...

  4. Spring的AOP快速实现通用日志打印

    需求分析 针对VideoService接口实现日志打印 三个核心包 spring-aop:AOP核心功能,例如代理工厂 aspectjweaver:简单理解,支持切入点表达式 aspectjrt:简单 ...

  5. 「Pygors跨平台GUI」2:安装MinGW-w64、MSYS2还是WSL2

    「Pygors系列」一句话导读: MinGW-w64只有编译器,MSYS2带着更新环境,WSL2实用性比较高 历史与渊源   Windows平台 Linux平台 二进制兼容 WSL2:运行Linux程 ...

  6. 27 首页banner文库失效

    安卓app 首页banner文库没有连接功能

  7. 【漏洞分析】DoughFina 攻击事件分析:不做任何参数检查的去杠杆合约

    背景介绍 2024 年 7 月 12 日,DoughFina 协议遭受了黑客攻击,造成本次攻击的主要原因是 ConnectorDeleverageParaswap 合约没有对输入参数进行检查,且该合约 ...

  8. C#实现单例模式的6种方法

    介绍 单例模式是软件工程学中最富盛名的设计模式之一.从本质上看,单例模式只允许被其自身实例化一次,且向外部提供了一个访问该实例的接口.通常来说,单例对象进行实例化时一般不带参数,因为如果不同的实例化请 ...

  9. 结构体_C

    // Code file created by C Code Develop #include "ccd.h" #include "stdio.h" #incl ...

  10. Odoo 基于Win10搭建基于Win10搭建odoo14开发环境搭建

    实践环境 win10 Python 3.6.2 odoo_14.0.latest.tar.gz 下载地址: https://download.odoocdn.com/download/14/src?p ...