github action使用
一、github actions 使用
官方文档:GitHub Actions 文档 - GitHub 文档
官方文档里面将各个功能介绍的很详细,因此这里只讲述基础用法
1.1 基础功能使用
1.1.1 流水线管理
在项目中的action中,可以看到所有的流水线

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

1.1.2 流水线手动触发
修改工作流文件,将 on 触发器改为 workflow_dispatch。启用后,工作流页面上会出现一个 Run workflow 按钮,点击即可手动触发
name: 构建并上传到 Docker Hubrun-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中会出现手动触发构建的选项

2.1 action项目示例
实现流程:
每次push代码到 main 分支,会自动:
- 用 JDK 21 编译你的 SpringBoot 项目
- 生成
target/demo-1.0.jar - 根据你的 Dockerfile 构建镜像
- 推送到你的 Docker Hub
- 之后使用服务器只要拉取镜像运行
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@RestControllerpublic 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-alpineWORKDIR /app# 复制 maven 打包好的 jarCOPY target/demo-1.0.jar app.jarENTRYPOINT ["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 Hubrun-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 添加秘钥
路径:项目 → Settings → Secrets and variables → Actions → New repository secret
添加以下两个秘钥
DOCKER_HUB_USERNAMEDOCKER_HUB_TOKEN
秘钥的值在docker hub中创建
登录docker hub-> Account settings -> settings -> personal access tokens -> Generate new token

创建成功后将生成的token填入github的DOCKER_HUB_TOKEN,DOCKER_HUB_USERNAME填入用户名
2.1.4 流水线构建
提交代码,再次触发构建
提交后回到action界面

可以看到构建成功
2.1.5 使用docker拉取构建镜像
查看构建的镜像



docker pull laixianshen/java_test:latest
docker run -d -p 8899:8080 laixianshen/java_test:latest
3.1 action项目示例二
实现效果:当在 GitHub 上创建一个「发布版本(Release)」时,自动用 maven 打包 Java 项目,并把构建好的 jar 包发布到 GitHub Packages 仓库。
3.1.1 创建修改文件
还是使用java_test项目,再创建一个新的流水线文件publish.yml,并填入如下内容
name: Maven 发布到 GitHub Packagesrun-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 触发构建
再此创建版本,触发构建

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

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

**注意:**如果构建失败,修改文件后再次创建版本构建时,需要选择新的
tag,否则构建时使用的文件还是旧版本的
3.1.3 查看构建产物
回到账号首页,选择packages

或者项目的packages

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

3.1.4 下载产物部署
将生成的产物下载后,上传到安装了java环境的机器中运行
# 后台运行在4433端口,并将日志写入文件nohup java -jar demo-1.0.jar --server.port=4433 > app.log 2>&1 &
4.1 自建runner
使用自建的runner运行器的配置方式与其余cicd工具配置相似
前往:项目设置->actons->runner->new self-hosted runner,进入后选择好对应的系统

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

文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!
赣公网安备36072602000131号