GitHub Actions 是 GitHub 提供的一项持续集成 (CI) 和持续部署 (CD) 服务。它允许你在代码仓库中定义和运行自动化的工作流程,以响应存储库中的事件或调度。GitHub Actions 可以用于构建、测试、打包和部署项目,也可以执行其他自动化任务。
详细github action相关信息请看最底部
第一步需要先配置secrets,保证我们的服务器信息不暴露
GitHub Actions 中的 secrets 和 variables 都是用于存储和访问敏感信息或配置的机制
因为我的服务器用的宝塔面板环境,加上构建出来的包和文件并不是很大,所以使用的方式是先在github action的环境构建打包,然后将包发送到目标服务器。你也可以在github action里让目标服务器执行命令去做git,构建,部署,启动等等相关的
Springboot
name: Java CI with Maven
on:
push:
branches: [ "master" ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set up JDK 17
uses: actions/setup-java@v3
with:
java-version: '17'
distribution: 'temurin'
cache: maven
- name: Build with Maven
run: mvn -B package --file pom.xml
- name: copy jar
uses: cross-the-world/ssh-scp-ssh-pipelines@latest
with:
host: ${{ secrets.HOST }}
user: ${{ secrets.USERNAME }}
pass: ${{ secrets.PASSWORD }}
port: 22
scp: |
./target/springboot.jar => /home/
last_ssh: |
JAR_NAME="springboot.jar"; PID=$(ps aux | grep "$JAR_NAME" | grep -v grep | awk '{print $2}'); if [ -n "$PID" ]; then kill -9 $PID && echo "进程 $PID 已被杀死"; else echo "未找到与 $JAR_NAME 相关的进程"; fi
/usr/bin/java -jar -Xmx1024M -Xms256M /home/springboot.jar &
Vue
name: Deploy to Server
on:
push:
branches: [ "master" ]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: 16
- name: Install dependencies
run: yarn
- name: Build project
run: yarn generate
- name: zip dist
run: zip -r dist.zip dist/
# 部署到服务器
- name: Deploy 🚀
uses: cross-the-world/ssh-scp-ssh-pipelines@latest
with:
host: ${{ secrets.HOST }}
user: ${{ secrets.USERNAME }}
pass: ${{ secrets.PASSWORD }}
port: 22
scp: |
'./dist.zip' => /home
last_ssh: |
cd /home/
rm -rf dist/ || true
unzip dist.zip
常见的 GitHub Actions YAML 语法和关键概念
GitHub Actions 使用 YAML 文件来定义工作流程。以下是一些常见的 GitHub Actions YAML 语法和关键概念:
工作流程(Workflow)的定义:
name: My Workflow
on:
push:
branches:
- main
jobs:
my_job:
runs-on: ubuntu-latest
steps:
- name: Checkout Repository
uses: actions/checkout@v2
# 其他步骤...
name
: 工作流程的名称。on
: 触发工作流程的事件,例如push
到特定分支。jobs
: 包含一个或多个任务的部分。
任务(Job)的定义:
my_job:
runs-on: ubuntu-latest
steps:
- name: Step 1
run: echo "Hello, World!"
# 其他步骤...
runs-on
: 指定任务运行的操作系统和环境。steps
: 包含一个或多个步骤的列表。
步骤(Steps)的定义:
steps:
- name: Step 1
run: echo "Hello, World!"
- name: Step 2
uses: actions/setup-node@v3
with:
node-version: '14'
# 其他步骤...
name
: 步骤的名称。run
: 执行的命令或脚本。uses
: 使用的动作(可以是内置动作或自定义动作)。with
: 传递给动作的参数。
触发器(Trigger)的定义:
on:
push:
branches:
- main
pull_request:
branches:
- feature/*
on
: 触发工作流程的事件。push
: 代码推送事件。pull_request
: 合并请求事件。
环境变量(Environment Variables)的定义:
jobs:
my_job:
runs-on: ubuntu-latest
env:
MY_VARIABLE: my_value
steps:
# 步骤...
env
: 定义任务运行时的环境变量。
Secrets 和 Variables
使用 Secrets:
GitHub Actions 的 secrets 是用于存储敏感信息,例如 API 密钥、访问令牌等。这些 secrets 可以被工作流程中的步骤引用,但它们是加密的,并且只有在运行工作流程时才会暴露给步骤。
-
在 GitHub 存储库中创建 secret:
- 转到 GitHub 存储库的页面。
- 在存储库顶部导航栏中,点击 “Settings”。
- 在左侧边栏中,选择 “Secrets”。
- 点击 “New repository secret”,然后输入 secret 名称和值。
-
在工作流程中使用 secret:
jobs: my_job: runs-on: ubuntu-latest steps: - name: Use secret run: echo ${{ secrets.MY_SECRET }}
这里
MY_SECRET
是你创建的 secret 的名称,可以在步骤中使用${{ secrets.MY_SECRET }}
引用它。
使用 Variables:
GitHub Actions 的 variables 是由 GitHub 提供的一组默认环境变量,同时你也可以定义自己的环境变量。这些变量可以在工作流程的任何步骤中使用。
-
在工作流程中使用 GitHub 提供的 variables:
jobs: my_job: runs-on: ubuntu-latest steps: - name: Use GitHub-provided variable run: echo ${{ github.event_name }}
这里的
github.event_name
是 GitHub 提供的一个默认变量,表示触发工作流程的事件的名称。 -
在工作流程中定义自己的 variables:
jobs: my_job: runs-on: ubuntu-latest env: MY_VARIABLE: my_value steps: - name: Use custom variable run: echo $MY_VARIABLE
在
env
部分定义自己的环境变量,然后在步骤中使用$MY_VARIABLE
引用它。
注意:GitHub Actions 中的环境变量(包括 secrets 和 variables)在步骤中的引用方式使用 ${{ ... }}
语法。此外,secrets 只能在工作流程的同一存储库中使用,而 variables 则可以在不同存储库的工作流程中共享。
更多博客文章尽在:https://cason.work/
自我整理的编程工具集合:https://tool.cason.work/