赞
踩
作者本人也是刚入坑 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)
在工程 ./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 仓库镜像到本地修改后,最终内容如下:
# 触发条件 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
,且值为空上文中使用到的 HARBOR_REGISTRY
、HARBOR_USERNAME
、HARBOR_PASSWORD
需要配置到 Gitea 中,否则会报错。已知可配置在组织或者仓库下,配置位置的不同,作用域也不同,本文我选择配置到组织中。
HARBOR_REGISTRY
:Harbor 访问地址,例:192.168.1.44:18123
HARBOR_USERNAME
:Harbor 用户名,例:adminHARBOR_PASSWORD
:Harbor 密码,例:admin提交并推送代码,观察运行结果。
jobs.steps
中用到的仓库本地化?开个梯子,并为 Gitea 配置代理,然后导入外部镜像仓库,通过 github Url 导入。
使用 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
可以,本文演示的是一个干净的 SpringBoot 工程构建,涉及的依赖不多且都为公共依赖,但也从上图发现运行时间很长。关于如何配置,目前没找到一个优雅的方式,只能通过一些偏方解决,将单独写一遍解决文档,请关注。
希望这篇文章对您理解和使用 Gitea Action 提供了一些帮助。如果您对 Gitea Action 有任何疑问或想要讨论更多相关话题,欢迎在下方留言,我们可以互相学习和分享经验。祝您在使用 Gitea Action 进行 CI/CD 工作流时取得成功!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。