【Gitea Action 第二篇】持续构建实践

作者本人也是刚入坑 Gitea Action,在语法方面,处于一边学习一边实践的状态,对于工作流文件的编写上比较粗糙,欢迎在文章下方进行交流。

一、前情回顾

在上一篇 【Gitea Action 第一篇】上手体验 中,我们成功运行了官方 Gitea Action 示例,主要介绍了基础设施的搭建,本篇将在第一篇的基础上,着重于 Action 步骤文件的编写,实现项目的持续构建。

二、预览

作者主要从事 Java 开发,本文中的持续构建将介绍使用 MavenSpringBoot 工程打包,并使用 Docker 构建镜像,最终推送到私服,流程如下所示:

推送到master或main分支
检出代码
设置 Docker BuildX
登录 Harbor
安装 JDK
安装 Maven
使用 Maven 打包 Jar
Docker 镜像构建并推送 Harbor

环境介绍:

  • 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_REGISTRYHARBOR_USERNAMEHARBOR_PASSWORD 需要配置到 Gitea 中,否则会报错。已知可配置在组织或者仓库下,配置位置的不同,作用域也不同,本文我选择配置到组织中。

  • HARBOR_REGISTRY:Harbor 访问地址,例:192.168.1.44:18123
  • HARBOR_USERNAME:Harbor 用户名,例:admin
  • HARBOR_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 工作流时取得成功!

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
Docker实战 第二版 中文版》是一本介绍Docker容器技术的经典教程。该书由杰弗·尼卡尔森(Jeff Nickoloff)和斯蒂芬·卫盛顿(Stephen Kuenzli)合著,由人民邮电出版社出版。 该书的主要内容包括教读者如何使用Docker进行容器化应用开发、部署和管理。第二版相对于第一版进行了更新和扩展,全面涵盖了Docker的最新功能和技术。 首先,该书对Docker的基本概念进行了详细解释,包括容器和镜像的概念、Dockerfile和Docker Compose的使用等。读者通过学习这些基本概念和工具,能够灵活运用Docker进行应用开发和管理。 其次,该书介绍了Docker的网络和存储技术。读者可以学习如何建立容器间的网络通信,以及如何使用Docker的存储卷功能进行数据管理。这些内容对于构建分布式应用和解决数据持久化的问题非常重要。 此外,该书还涵盖了Docker的安全性和监控技术。读者将学习如何在Docker环境中保护应用的安全,并掌握如何使用Docker的监控工具来监控容器的运行状况。 最后,该书还介绍了如何在生产环境中使用Docker进行部署和管理。读者可以了解到如何使用Docker Swarm进行容器编排和集群管理,以及如何进行持续集成和持续部署。 总而言之,《Docker实战 第二版 中文版》是一本全面而实用的Docker技术教程,适合对Docker有一定了解的读者阅读。通过学习本书,读者可以掌握Docker的核心概念和技术,并能够灵活运用Docker进行应用开发和管理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值