github action使用

1418 字
7 分钟
github action使用

一、github actions 使用#

官方文档:GitHub Actions 文档 - GitHub 文档

官方文档里面将各个功能介绍的很详细,因此这里只讲述基础用法

1.1 基础功能使用#

1.1.1 流水线管理#

在项目中的action中,可以看到所有的流水线

image-20260509102521163
image-20260509102521163

点击具体的流水线,可以进行管理

image-20260509102838286
image-20260509102838286

1.1.2 流水线手动触发#

修改工作流文件,将 on 触发器改为 workflow_dispatch。启用后,工作流页面上会出现一个 Run workflow 按钮,点击即可手动触发

Terminal window
name: 构建并上传到 Docker Hub
run-name: ${{ github.actor }} 正在打包上传镜像 🚀
on:
workflow_dispatch:
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: 检出代码
uses: actions/checkout@v6
- name: 设置 JDK 21
uses: actions/setup-java@v4
with:
java-version: '21'
distribution: 'temurin'
cache: maven
- name: Maven 打包项目
run: mvn clean package -DskipTests
- name: 登录 Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_HUB_USERNAME }}
password: ${{ secrets.DOCKER_HUB_TOKEN }}
- name: 构建并推送 Docker 镜像
uses: docker/build-push-action@v6
with:
context: .
push: true
tags: ${{ secrets.DOCKER_HUB_USERNAME }}/java_test:latest

添加成功后,在action中会出现手动触发构建的选项

image-20260509110031544
image-20260509110031544

2.1 action项目示例#

实现流程:

每次push代码到 main 分支,会自动:

  1. 用 JDK 21 编译你的 SpringBoot 项目
  2. 生成 target/demo-1.0.jar
  3. 根据你的 Dockerfile 构建镜像
  4. 推送到你的 Docker Hub
  5. 之后使用服务器只要拉取镜像运行

2.1.1 github创建项目#

github中创建项目java_test

2.1.1.1 java源码#

src/main/java/com/example路径下创建文件DemoApplication.java

package com.example;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@SpringBootApplication
@RestController
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
@GetMapping(value = "/", produces = "text/html")
public String hello() {
return """
<!DOCTYPE html>
<html>
<head>
<title>Spring Boot Demo</title>
<style>
body { font-family: Arial, sans-serif; margin: 40px; }
h1 { color: #4CAF50; }
.info { background-color: #f0f0f0; padding: 20px; border-radius: 5px; }
</style>
</head>
<body>
<h1>Hello from Jenkins CI/CD with JDK 21!</h1>
<p>新绛之海</p>
<div class="info">
<h2>系统信息:</h2>
<ul>
<li>JDK版本:22</li>
<li>应用框架:Spring Boot</li>
<li>CI/CD:Jenkins</li>
<li>当前时间:%s</li>
</ul>
</div>
</body>
</html>
""".formatted(java.time.LocalDateTime.now());
}
}

2.1.1.2 Dockerfile#

# 使用 JDK 21 的运行时镜像
FROM eclipse-temurin:21-jre-alpine
WORKDIR /app
# 复制 maven 打包好的 jar
COPY target/demo-1.0.jar app.jar
ENTRYPOINT ["java", "-jar", "app.jar"]

2.1.1.3 pom.xml#

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>demo</artifactId>
<version>1.0</version>
<packaging>jar</packaging>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.2.0</version>
</parent>
<properties>
<java.version>21</java.version> <!-- 明确指定 21 -->
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>

2.1.2 创建流水线文件#

创建文件夹.github/workflows,然后在文件夹中创建使用 .yml.yaml 作为文件扩展名的流水线文件,github即可自动扫描该文件触发流水线

这里创建为github-actions-demo.yml

name: 构建并上传到 Docker Hub
run-name: ${{ github.actor }} 正在打包上传镜像
on:
push:
branches: [ main ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: 检出代码
uses: actions/checkout@v6
- name: 设置 JDK 21
uses: actions/setup-java@v4
with:
java-version: '21'
distribution: 'temurin'
cache: maven
- name: Maven 打包项目
run: mvn clean package -DskipTests
- name: 登录 Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_HUB_USERNAME }}
password: ${{ secrets.DOCKER_HUB_TOKEN }}
- name: 构建并推送 Docker 镜像
uses: docker/build-push-action@v6
with:
context: .
push: true
tags: ${{ secrets.DOCKER_HUB_USERNAME }}/java_test:latest

提交后即可自动触发流水线,但还缺少一些变量,因此会构建失败

2.1.3 添加秘钥#

路径:项目 → SettingsSecrets and variablesActionsNew repository secret

添加以下两个秘钥

Terminal window
DOCKER_HUB_USERNAME
DOCKER_HUB_TOKEN

image-20260508161808994
image-20260508161808994

秘钥的值在docker hub中创建

登录docker hub-> Account settings -> settings -> personal access tokens -> Generate new token

image-20260508162330124
image-20260508162330124

创建成功后将生成的token填入github的DOCKER_HUB_TOKENDOCKER_HUB_USERNAME填入用户名

2.1.4 流水线构建#

提交代码,再次触发构建

提交后回到action界面

image-20260508165012520
image-20260508165012520

可以看到构建成功

2.1.5 使用docker拉取构建镜像#

查看构建的镜像

image-20260508173901571
image-20260508173901571

image-20260508173935911
image-20260508173935911

image-20260508173957204
image-20260508173957204

Terminal window
docker pull laixianshen/java_test:latest
docker run -d -p 8899:8080 laixianshen/java_test:latest

image-20260509095504230
image-20260509095504230

3.1 action项目示例二#

实现效果:当在 GitHub 上创建一个「发布版本(Release)」时,自动用 maven 打包 Java 项目,并把构建好的 jar 包发布到 GitHub Packages 仓库。

3.1.1 创建修改文件#

还是使用java_test项目,再创建一个新的流水线文件publish.yml,并填入如下内容

name: Maven 发布到 GitHub Packages
run-name: ${{ github.actor }} 正在发布 Maven 包到 GitHub Packages
on:
release:
types: [created]
jobs:
publish:
runs-on: ubuntu-latest
permissions:
contents: read
packages: write
steps:
- name: 检出代码
uses: actions/checkout@v4
- name: 设置 JDK 21
uses: actions/setup-java@v4
with:
java-version: '21'
distribution: 'temurin'
- name: 创建 Maven settings.xml 认证文件
run: |
cat > ~/.m2/settings.xml << EOF
<settings>
<servers>
<server>
<id>github</id>
<username>${{ github.actor }}</username>
<password>${{ secrets.GITHUB_TOKEN }}</password>
</server>
</servers>
</settings>
EOF
- name: Maven 打包项目
run: mvn clean package -DskipTests
- name: 发布到 GitHub Packages
run: mvn deploy

修改pom.xml文件,加上 GitHub Packages 的配置 这个仓库不用创建,触发流水线时会自动创建

<distributionManagement>
<repository>
<id>github</id>
<url>https://maven.pkg.github.com/你的用户名/你的仓库名</url>
</repository>
</distributionManagement>

整体文件内容:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>demo</artifactId>
<version>1.0</version>
<packaging>jar</packaging>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.2.0</version>
</parent>
<properties>
<java.version>21</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<!-- 关键:配置 GitHub Packages 仓库地址 -->
<distributionManagement>
<repository>
<id>github</id>
<url>https://maven.pkg.github.com/laixianshenboss/java_test</url>
</repository>
</distributionManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>

3.1.2 触发构建#

再此创建版本,触发构建

image-20260509110512085
image-20260509110512085

选择标签,填写版本标题后提交

image-20260509132432193
image-20260509132432193

最后回到action界面,查看构建结果

image-20260509132551367
image-20260509132551367

**注意:**如果构建失败,修改文件后再次创建版本构建时,需要选择新的tag,否则构建时使用的文件还是旧版本的

3.1.3 查看构建产物#

回到账号首页,选择packages

image-20260509132933087
image-20260509132933087

或者项目的packages

image-20260509134648764

可以看到构建的jar包,点击即可下载使用

image-20260509132951960
image-20260509132951960

3.1.4 下载产物部署#

将生成的产物下载后,上传到安装了java环境的机器中运行

Terminal window
# 后台运行在4433端口,并将日志写入文件
nohup java -jar demo-1.0.jar --server.port=4433 > app.log 2>&1 &

image-20260509134538983
image-20260509134538983

4.1 自建runner#

使用自建的runner运行器的配置方式与其余cicd工具配置相似

前往:项目设置->actons->runner->new self-hosted runner,进入后选择好对应的系统

image-20260509160034661
image-20260509160034661

之后根据提供的配置进行安装配置

image-20260509160216707
image-20260509160216707

文章分享

如果这篇文章对你有帮助,欢迎分享给更多人!

github action使用
https://2233941.xyz/posts/github_action使用/
作者
lumifly
发布于
2026-07-17
许可协议
CC BY-NC-SA 4.0
Profile Image of the Author
lumifly
不逐世间万丈星河,自守一隅细碎明光
✨ 今日一言
" 加载中... "
——
公告
欢迎来到我的博客!这是一则示例公告。
音乐
封面

音乐

暂未播放

0:00 0:00
暂无歌词
分类
标签
本年还剩 -- --%
本月还剩 -- --%
本周还剩 -- --%
距离--
--
--
天气预报
站点统计
文章
24
分类
1
标签
15
总字数
136,852
运行时长
0
最后活动
0 天前
站点信息
构建平台
Local
博客版本
Firefly v6.12.1
文章许可
CC BY-NC-SA 4.0

文章目录