持续集成服务使用

GitHub Actions 是 GitHub 于 2018 年 10 月推出的持续集成服务。我之前用过 Travis CI。昨天,我体验了 GitHub Actions。感觉功能更强大,玩的地方也更多。我将介绍我的第一次经历。

什么是 GitHub 操作

GitHub Actions 可以参考的类似对象包括 Jenkins、Azure Lines、CircleCI、TravisCI 等,都是持续集成(CI)服务的提供者。停止在设计、开发、测试、发布滚动是这样的:

持续集成的过程包括很多步骤,例如构建可运行的环境、从 Git 指定分支拉取代码、编译和打包、运行单元测试、登录远程服务器、发布到第三方、等,GitHub将这些动作称为Actions,因此由多个Actions组成的工作流被命名为GitHub Actions。

为了让 Actions 能够被重用,GitHub 还提供了一个官方商城,你可以在其中搜索他人提交的 Action 脚本,以及他人收集的 Action 仓库:很棒的 action。

什么构成 GitHub 操作

GitHub Actions 由以下部分组成:

GitHub 操作工作流文件

要配置GitHub Actions的工作流,我们只需要定义一个YAML文件,这个文件存放在代码仓库的.github/workflows目录下,比如我的工作流文件:文件名可以定义为自己,不需要。工作流中有很多语法字段,可以参考官方文档。下面是我自己写的工作流文件:

name: build
on: [push, pull_request]
jobs:
  build:
    name: building
    runs-on: ubuntu-latest
    services:
      mysql:
        image: mysql:5.7
        ports:
          - 3306:3306
        env:
          MYSQL_ALLOW_EMPTY_PASSWORD: yes
          MYSQL_DATABASE: winteree
          MYSQL_ROOT_PASSWORD: root
        options: --health-cmd="mysqladmin ping" --health-interval=5s --health-timeout=2s --health-retries=3
      rabbitmq:
        image: rabbitmq:3.7.26-management-alpine
        ports:
          - 15672:15672
          - 5672:5672
      zipkin:
        image: openzipkin/zipkin:2.21.1
        ports:
          - 9411:9411
      redis:
        image: redis:6.0.1
        ports:
          - 6379:6379
    steps:
      - uses: actions/checkout@v2
      - name: Set up JDK 1.8
        uses: actions/setup-java@v1
        with:
          java-version: 1.8
      - name: Verify MariaDB Connection and Load Data
        env:
          PORT: ${{ job.services.mysql.ports[3306] }}
        run: |
          while ! mysqladmin ping -h"127.0.0.1" -P"$PORT" --silent; do
            sleep 1
          done
      - name: Loading Database
        env:
          PORT: ${{ job.services.mysql.ports[3306] }}
        run: mysql -h 127.0.0.1 -P $PORT -uroot -proot --default-character-set=utf8 winteree < environment/db/winteree.sql
      - name: Cache Maven packages
        uses: actions/cache@v2
        with:
          path: ~/.m2
          key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
          restore-keys: ${{ runner.os }}-m2
      - name: Build with Maven
        run: mvn -B clean package --file pom.xml
      - name: Upload Coveralls
        shell: bash
        run: |
          curl -s https://codecov.io/bash
          mvn clean test org.jacoco:jacoco-maven-plugin:prepare-agent install org.jacoco:jacoco-maven-plugin:report
          mvn org.eluder.coveralls:coveralls-maven-plugin:report -DrepoToken="${{ secrets.coveralls_token }}"

name:这是我给这个工作流起的名字,你可以给一个属于你的名字,这个不是必须的。 on:指定触发工作流的条件,通常是一些事件。我在这里定义了 push 和 pull_request 事件来触发工作流。作业:是工作流文件的主体,表示要执行的一项或多项任务。 jobs.build:我给这个任务的ID叫做“build”,下面我会用它代替这个任务ID,你可以给你的任务一个自己的任务ID。 jobs..name:我将这个任务命名为“building”,你可以给你的任务一个你自己的名字。 jobs..runs-on:指定运行所需的虚拟机环境。这是一个必填字段。目前可用的虚拟机有:ubuntu、windows、macOS。 jobs..services:是声明运行环境所需的服务。我在这里使用 MySQL、RabbitMQ、Zipkin 和 Redis。 jobs..steps:指定每个Job的运行步骤,可以包含一个或多个步骤。 jobs..steps.name:指步骤的名称。 jobs..steps.run:指步骤运行的命令或操作。 jobs..steps.env:指这一步需要的环境变量。在 GitHub Actions 中使用密码

密码不应该在代码仓库中泄露,所以需要在项目仓库的Settings -> Secrets中添加密码,例如我添加了一个名为“COVERALLS_TOKEN”的密码:

然后在工作流程文件中使用“${{ secrets.coveralls_token }}”格式。

GitHub Actions 徽章图标

以后每次修改后GitHub Actions都会自动运行推送源码,那么如何知道运行结果呢? GitHub Actions 为我们提供了一个 logo 图标git命令行拉取代码,可以将其添加到您的项目主页中。图标地址语法如下:

https://github.com///workflows//badge.svg?branch=

所以我的图标地址是:

我的经历

我之前一直在使用 TravisCI。这次使用 GitHub Actions 后,感觉速度比 TravisCI 快很多git命令行拉取代码,支持的东西也比 TravisCI 多。配置并不复杂,可玩性很高,可以实现很多。自动化方面,我以后主要使用GitHub Actions for CI/CD。

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论