GitLab CI/CD与GitHub Actions的介绍和使用


GitLab CI/CD与GitHub Actions的介绍和使用

本篇日志主要是用来记录GitLab的CI/CD与GitHub Actions的介绍和使用。先从操作GitLab的CI/CD开始

GitLab CI/CD

GitLab支持多种CI方式,本身有Ai DevOps的支持,如下所示

GitLab AI DevOps

启动Ai DevOps后gitlab会根据项目的语言使用一套预设的模板,具体可以参考GitLab Ai DevOps

在我们的演示项目中,我们可以选择开启Ai DevOps,但是实际并不会使用,而是使用我们项目中自定义的.gitlab-ci.yml文件

接下来介绍,让我们开始学习如何自定义GitLab的CI/CD与gradle结合使用.

下面来详细的做一下步骤二和步骤四

修改.gitlab-ci.yml文件


services:
  - name: docker:dind         # Testcontainers需要docker in docker
    command: ["--tls=false"]  # 禁用tls以避免docker启动中断

variables:
  DOCKER_HOST: "tcp://docker:2375"
  DOCKER_TLS_CERTDIR: ""
  DOCKER_DRIVER: overlay2
  GRADLE_OPTS: "-Dorg.gradle.daemon=false"

stages:          # 作业的阶段列表及其执行顺序
  - build
  - test
  - deploy

build-job:       # 此作业在构建阶段运行,构建阶段是最先执行的
  image: gradle:7.4.1-jdk11-alpine
  stage: build
  script:
    - echo "开始编译代码..."
    - gradle clean compileJava
    - echo "编译代码完成..."

test-job:        # 此作业在测试阶段运行,测试阶段在第二阶段执行的
  image: gradle:7.4.1-jdk11-alpine
  stage: test
  script:
    -  echo "开始测试代码..."
    - gradle test --info
    - echo "测试代码完成..."

deploy-job:      # 此作业在部署阶段运行
  stage: deploy  # 只有当之前两个阶段都成功完成时,才会执行部署的。
  script:
    - echo "开始部署代码..."
    - echo "部署代码完成.."

在上面这个.gitlab-ci.yml文件中,有一个稍微特殊一点的地方在于,由于我们的代码中使用到了testcontainers,所以我们需要在.gitlab-ci.yml文件中添加一个service,这个service是用来启动testcontainers相关容器的,具体可以参考安装 Docker 镜像并启动容器

然后我们定义了三个阶段:build,test,deploy,这三个阶段的执行顺序是:build-job,test-job,deploy-job,这样我们就可以在GitLab中按照顺序执行这三个阶段的作业了,在流水线中我们也可以看到

流水线

由于我们没有资源,不能进行deploy,在这个阶段实际上只是打印一下,之前的build-job和test-job阶段分别是执行:
- gradle clean compileJava
- gradle test --info

执行结果

通过在流水线中点击相关的阶段,可以看到详细的日志

执行日志

GitHub Actions

GitHub Actions是github推出的一套发现、创建和共享操作以执行您喜欢的任何作业(包括 CI/CD),并将操作合并到完全自定义的工作流程。

创建Actions

在Actions中,选择对应的模板进行创建

创建workflows

选择模板

模板

执行Actions

创建完成Actions后,会自动运行.运行结果可以在workflow中查看

执行Actions

执行结果

执行日志

注意:

  • 编译gradle项目出现’Error: Gradle script ‘/home/runner/work/testcontainers-simple/testcontainers-simple/gradlew’ is not executable.'的问题是由于我们项目中的gradlew文件不是可执行的,所以需要将其设置为可执行的,在项目中执行git update-index --chmod=+x gradlew即可

Actions配置解释

  • main.yml
# This workflow uses actions that are not certified by GitHub.
# They are provided by a third-party and are governed by
# separate terms of service, privacy policy, and support
# documentation.
# This workflow will build a Java project with Gradle and cache/restore any dependencies to improve the workflow execution time
# For more information see: https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-gradle

name: Java CI with Gradle

on: push        # 触发事件

jobs:
  build:

    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v2
    - name: Set up JDK 11
      uses: actions/setup-java@v2
      with:
        java-version: '11'
        distribution: 'temurin'
    - name: Build with Gradle
      uses: gradle/gradle-build-action@0d13054264b0bb894ded474f08ebb30921341cee
      with:
        arguments: build

github的CI/CD配置就比gitlab的配置看起来要清爽很多,主要是分为三个部分:

  • name
    name主要是用来标识这个workflows的名称的

  • on
    on主要是用来标识触发Actions的动作的

  • jobs
    jobs又很为两个部分:

    • runs-on
      标识运行的基础环境
    • steps
      标识运行的步骤,其中with.arguments是用来指定gradle的参数的

总结

GitLab和GitHub的CI/CD在使用上都是比较简单的,只需要使用到专用的配置文件就可以触发,需要主要一点的是GitLab的配置文件中需要指定Docker in Docker配置,
而GitHub Actions使用上要比GitLab的.gitlab-ci.yml要方便,可以直接从marketplace下载已经预设好的模板,直接进行使用.配置文件中也不需要指定运行环境

参考文档

gitlab install
安装和使用GitLab
GitLab CI/CD 介绍和使用
CI/CD
GitHub Actions 快速开始


  TOC