通过 GitHub Actions 实现代码的自动编译和发布
GitHub Actions 是一个非常强大的工具,可以用来实现各种自动化任务,包括自动编译和发布 release。以下是一个基本的工作流程,展示如何使用 GitHub Actions 实现这一目标:
创建 GitHub Actions 工作流文件:在你的 GitHub 仓库中,创建一个
.github/workflows目录,并在该目录中创建一个新的工作流文件,例如release.yml。定义工作流:在
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
解释
工作流名称和触发器:
name: Build and Release:定义工作流的名称。on条件定义了工作流何时被触发,这里是每当推送到main分支时触发。
构建作业:
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找到。
发布作业:
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/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 实现代码的自动编译和发布的更多相关文章
- Ant自动编译打包&发布 android项目
Eclipse用起来虽然方便,但是编译打包android项目还是比较慢,尤其将应用打包发布到各个渠道时,用Eclipse手动打包各种渠道包就有点不切实际了,这时候我们用到Ant帮我们自动编译打包了. ...
- 项目管理实践【五】自动编译和发布网站【Using Visual Studio with Source Control System to build and publish website automatically】
在上一篇教程项目管理实践[三]每日构建[Daily Build Using CruiseControl.NET and MSBuild] 中,我们讲解了如何使用CCNET+MSBuild来自动编译项目 ...
- Andorid进阶7—— Ant自动编译打包&发布 android项目
http://www.cnblogs.com/tt_mc/p/3891546.html Eclipse用起来虽然方便,但是编译打包android项目还是比较慢,尤其将应用打包发布到各个渠道时,用Ecl ...
- Intellij IDEA 修改代码后自动编译更新
Intellij IDEA 一些不为人知的技巧 问题描述: Intellij IDEA 调试修改时,改动页面和 java 文件后,无法立刻看到变化,需要手动重启服务. 问题原因: 在 IDEA tom ...
- webpack学习_webpack-dev-server自动编译代码
之前每次修改完之后都要执行npm run build来编译,下面有三种方式可以实现代码变化后自动编译代码,下面只重点说webpack-dev-server,其他的请看webpack开发文档 1.web ...
- rebar3自动编译
功能:修改完代码可以自动编译加载到VM中 必须安装的软件: Linux: inotify 链接https://github.com/rvoicilas/inotify-tools/wiki 配置: ...
- 如何搭建自己的CICD流水线,实现自动编译部署功能?
之前使用过GitLab的CICD流水线,有多种环境,点击即可编译部署,十分的方便. 如何在个人项目中搭建自己的CICD流水线,实现push代码后自动编译并部署呢?这里使用到阿里云 云效DevOps,阿 ...
- maven 使用之自动编译热部署设置
参见创建webapp项目 eclipse Maven 使用记录 ------ 建立 webapp项目 在maven中为实现热部署设置,部署至webapp,即webroot 设置classes输出目的地 ...
- 为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 ...
- 使用GitHub Actions自动编译部署hexo博客
前言 使用hexo博客也挺久的,最开始是本地hexo clean && hexo g,最后hexo d推送到服务器.后来是本地hexo clean && hexo g, ...
随机推荐
- 移动web布局方法
继续更新移动端的一个布局,这也是经典中的经典,当初只知道个rem和vwvh适配,其实这里面还有很多的门道不只是一个适配这么简单 一.前置 1.背景缩放 我们都知道做移动端,给的图都是二倍图,你拿来用直 ...
- 跟我一起学习和开发动态表单系统-前端用vue、elementui实现方法(3)
基于 Vue.Element UI 和 Spring Boot + MyBatis 的动态表单系统前端实现解析 在现代企业信息系统中,动态表单是一种非常常见的功能.它可以根据业务需求灵活地调整表单结构 ...
- 实现ASP.Net Core3.1运行在DockeDesktop下并用Nginx实现负载均衡
一.首先去https://docs.docker.com/get-docker/下载Windows版本的Docker Desktop并安装(需要win10专业版以上操作系统,并启用CPU虚拟化和安装H ...
- 推荐王牌远程桌面软件Getscreen,所有的远程桌面软件中使用最简单的一个
今天要推荐的远程桌面软件就是这款叫Getscreen的,推荐理由挺简单: 简单易用:只需要两步就能轻松连上远程桌面 第一步:在需要被远程连接的机器上下载它的Agent程序并启动,点击Send获得一个链 ...
- manim边学边做--Matrix
在代数问题中,矩阵是必不可少的工具,manim中提供了一套展示矩阵(Matrix)的模块,专门用于在动画中显示矩阵格式的数据.关于矩阵的类主要有4个: Matrix:通用的矩阵 IntegerMatr ...
- [oeasy]python0073_进制转化_eval_evaluate_衡量_oct_octal_八进制
进制转化 回忆上次内容 上次了解的是 整型数字类变量 integer 前缀为i 添加图片注释,不超过 140 字(可选) 整型变量 和 字符串变量 不同 整型变量 是 直接存储二进制形 ...
- LRZ
1.在平面直角坐标系中,已知点 \(A(-2,2).B(3,4).C(0,1)\),直线 \(y=kx+b\) 过点 \(C\) 且与线段 \(AB\) 有交点,则 \(k\) 的取值范围是_____ ...
- python面向对象:多态
python面向对象:多态 多态的应用场景 1. 对象所属的类之间没有继承关系 调用同一个函数fly(), 传入不同的参数(对象),可以达成不同的功能 class Duck(object): # 鸭子 ...
- Jmeter函数助手33-split
split函数用于根据分隔符拆分传递给它的字符串,并返回原始字符串. String to split:填入需要转换的字符串 函数名称.用于存储在测试计划中其他的方式使用的值:存储结果的变量名 Stri ...
- 对比python学julia(第三章:游戏编程)--(第二节)公主迎圣诞(4)
4. 碰撞检测 .得分及生命 在第 4 个阶段,利用GameZero的碰撞检测功能,使公主角色能够接到雪花 .礼物或剪刀. 在"sdgz"项目目录中 ,把 version3.jl ...