【Gitea Action 第二篇】持续构建实践
本篇文章介绍了使用 Gitea Action 进行持续构建的实践。通过编写 Action 步骤文件,实现了使用 Maven 对 SpringBoot 工程进行打包,并使用 Docker 构建镜像并推送到私服的流程。
作者本人也是刚入坑 Gitea Action,在语法方面,处于一边学习一边实践的状态,对于工作流文件的编写上比较粗糙,欢迎在文章下方进行交流。
一、前情回顾
在上一篇 【Gitea Action 第一篇】上手体验 中,我们成功运行了官方 Gitea Action 示例,主要介绍了基础设施的搭建,本篇将在第一篇的基础上,着重于 Action 步骤文件的编写,实现项目的持续构建。
二、预览
作者主要从事 Java 开发,本文中的持续构建将介绍使用 Maven
对 SpringBoot
工程打包,并使用 Docker 构建镜像,最终推送到私服,流程如下所示:
环境介绍:
-
centos 7.9 虚拟机
-
Gitea 1.19.3
-
Docker Engine - Community 24.0.2
-
Harbor v2.7.1-6015b3ef(尚未部署 Https)
三、编写 Action 文件
在工程 ./gitea/workflows/
目录下新建 release.yaml
文件,并编写工作流。
简洁版
简洁版运行条件比较苛刻,需要网络环境顺畅(能流畅访问 Github、docker hub 等服务商),并且要求部署的 Harbor 私服支持 Https 访问,否则最后一个推送镜像步骤将失败。
# 触发条件,只在 master 或 main 分支发送推送时触发
on:
push:
branches: [ master, main ]
# 工作流的名称
name: release
# 作业,工作流运行由一个或多个 jobs 组成,默认情况下并行运行
jobs:
# job ID
release:
# 定义要运行作业的计算机类型
runs-on: ubuntu-latest
# 指定容器映像,默认使用的是一个基于Node的镜像,没有内置docker
container: catthehacker/ubuntu:act-latest
# 作业任务
steps:
# 检出代码
- name: Checkout
uses: actions/checkout@v3
with:
fetch-depth: 0
# 设置 Docker BuildX
- name: Set up Docker BuildX
uses: docker/setup-buildx-action@v2.6.0
# 登录 Harbor
- name: Login to Harbor
uses: docker/login-action@v2
with:
registry: ${{ secrets.HARBOR_REGISTRY }}
username: ${{ secrets.HARBOR_USERNAME }}
password: ${{ secrets.HARBOR_PASSWORD }}
# 安装 JDK
- name: Set up JDK 17
uses: actions/setup-java@v3
with:
distribution: 'oracle'
java-version: 17
# 安装 Maven
- name: Setup maven
uses: actions/setup-maven@v4.5
with:
maven-version: 3.8.4
# Maven 打包
- name: Maven package
run: mvn clean package
# 构建并推送 Docker 镜像
- name: Build and push docker image
uses: docker/build-push-action@v4
env:
ACTIONS_RUNTIME_TOKEN: ''
with:
context: .
push: true
tags: 192.168.1.44:18123/temp/action-demo:latest
调整版
调整版是基于本地环境做出的调整,可供参考,做了以下几项调整:
catthehacker/ubuntu:act-latest
镜像预下载(开梯子下)并重新 tag 发布到私服jobs.steps
中用到的仓库本地化,使用 Gitea 将用到的 GitHub 仓库镜像到本地- 配置支持使用 Http 访问 Harbor 私服
修改后,最终内容如下:
# 触发条件
on:
push:
branches: [ master, main ]
# 工作流的名称
name: release
# 作业,工作流运行由一个或多个 jobs 组成,默认情况下并行运行
jobs:
# job ID
release:
# 定义要运行作业的计算机类型
runs-on: ubuntu-latest
# 从私服 Harbor 上下载指定容器映像
container: 192.168.1.44:18123/tool/ubuntu:act-latest
# 作业任务
steps:
# 检出代码
- name: Checkout
# 从本地 Gitea 上加载插件仓库
uses: http://192.168.1.43:3000/actions/checkout@v3
with:
fetch-depth: 0
# 设置 Docker BuildX
- name: Set up Docker BuildX
uses: http://192.168.1.43:3000/actions/setup-buildx-action@v2.6.0
with:
# 配置支持使用 Http 访问 Harbor 私服 & 添加阿里云镜像代理(下文的镜像代理请修改为你自己的)
# 官方说明参考 https://docs.docker.com/build/ci/github-actions/configure-builder/#registry-mirror
config-inline: |
[registry."docker.io"]
mirrors = ["xxxxxxx.mirror.aliyuncs.com"]
[registry."192.168.1.44:18123"]
http = true
insecure = true
# 登录 Harbor
- name: Login to Harbor
# 从本地 Gitea 上加载插件仓库
uses: http://192.168.1.43:3000/actions/login-action@v2
# 下面的秘钥配置需加入到 Gitea 组织或仓库配置中
with:
registry: ${{ secrets.HARBOR_REGISTRY }}
username: ${{ secrets.HARBOR_USERNAME }}
password: ${{ secrets.HARBOR_PASSWORD }}
# 安装 JDK
- name: Set up JDK 17
uses: http://192.168.1.43:3000/actions/setup-java@v3
with:
distribution: 'oracle'
java-version: 17
# 安装 Maven
- name: Setup maven
uses: http://192.168.1.43:3000/actions/setup-maven@v4.5
with:
maven-version: 3.8.4
# Maven 打包
- name: Maven package
run: mvn clean package -DskipTests
# 构建并推送 Docker 镜像
- name: Build and push docker image
uses: http://192.168.1.43:3000/actions/build-push-action@v4
env:
# 必需有且置空,查看官方文档解释:https://docs.gitea.com/zh-cn/next/usage/actions/comparison?_highlight=build&_highlight=push&_highlight=action#dockerbuild-push-actionv4
ACTIONS_RUNTIME_TOKEN: ''
with:
context: .
push: true
tags: 192.168.1.44:18123/temp/action-demo:latest
192.168.1.44:18123
为本地 Harbor 私服访问地址Set up Docker BuildX
步骤中增加了镜像加速代理以及对192.168.1.44:18123
地址的安全信任Build and push docker image
步骤中手动增加环境变量ACTIONS_RUNTIME_TOKEN
,且值为空
四、Gitea 添加变量
上文中使用到的 HARBOR_REGISTRY
、HARBOR_USERNAME
、HARBOR_PASSWORD
需要配置到 Gitea 中,否则会报错。已知可配置在组织或者仓库下,配置位置的不同,作用域也不同,本文我选择配置到组织中。
HARBOR_REGISTRY
:Harbor 访问地址,例:192.168.1.44:18123
HARBOR_USERNAME
:Harbor 用户名,例:adminHARBOR_PASSWORD
:Harbor 密码,例:admin
五、运行测试
提交并推送代码,观察运行结果。
六、常见问题 FAQ
Q:如何将 jobs.steps
中用到的仓库本地化?
开个梯子,并为 Gitea 配置代理,然后导入外部镜像仓库,通过 github Url 导入。
Q:如何重新 tag 镜像并发布到私服?
使用 docker 命令,例子如下:
# 192.168.1.44:18123 是我私服地址,temp 是Harbor项目
# 重新tag标记
docker tag catthehacker/ubuntu:act-latest 192.168.1.44:18123/temp/ubuntu:act-latest
# 推送
docker push 192.168.1.44:18123/temp/ubuntu:act-latest
Q:Maven 有私服下载需求以及能否加速?
可以,本文演示的是一个干净的 SpringBoot 工程构建,涉及的依赖不多且都为公共依赖,但也从上图发现运行时间很长。关于如何配置,目前没找到一个优雅的方式,只能通过一些偏方解决,将单独写一遍解决文档,请关注。
七、总结
希望这篇文章对您理解和使用 Gitea Action 提供了一些帮助。如果您对 Gitea Action 有任何疑问或想要讨论更多相关话题,欢迎在下方留言,我们可以互相学习和分享经验。祝您在使用 Gitea Action 进行 CI/CD 工作流时取得成功!
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)