如何能在git bash中使用mvn命令_使用Github Actions完成CI/CD工作

在本文中,我们将介绍如何使用 Github Actions 自动化开发部署工作流,使版本控制和 CI/CD 平台在同一个地方完成。

自2019年开始,github便提供了CI/CD工具,对于public类型的代码库是免费的,对于private类型的代码库每个月2000分钟免费。

ada429b148f0fb0f64a9f479830f7f5c.png

我们可以使用GitHub Actions直接在我们的仓库中管理和自动化我们的开发工作流。其API支持多种操作系统(Linux、Windows、MacOS......)和不同语言。

在本文中,我将介绍一个使用Github Actions为Spring boot 2.x (java 8)web服务建立CI/CD管道的例子。

1

简介

这个想法是通过使用Github Actions构建一个CI/CD管道来自动化开发工作流。目的是在远程服务器上部署一个Spring Boot网络服务。我们将使用一系列的工作来构建、测试、生成代码覆盖率报告,并直接从GitHub部署我们的代码。生成的包将部署在远程服务器上。

dd6b92b0c4350c09d682f28a53b9e7b3.png

有两种方法可以创建一个所需的工作流文件:

我们可以在我们的Github仓库中创建一个工作流。YAML文件必须存储在我们Github仓库根目录下的.github/workflows目录下。工作流必须有至少一个job,其中包含一组执行个别任务的步骤。步骤可以运行命令或使用一个动作。我们的工作流文件应该尊重YAML语法,并且必须有一个.yml或.yaml文件扩展名。

acfac333e0117fec66c95c03c98dfaa9.png

第二种,通过在GitHub仓库的Actions部分创建一个工作流文件,我们选择maven工作流。

5603340360de8b88245a0b12aa226a0f.png

当我们点击设置这个工作流时,就会看到下面预填的maven工作流。

a000f9e2644d142333517b207fa0de1f.png

这些作业是基于矩阵构建的。一个矩阵构建在每个工作流中最多可以生成256个作业。

我们将工作流配置为当GitHub事件发生时启动。在主分支上推送代码或提出拉取请求后,作业将被触发。本例中的主要作业是启动mvn包命令。由于在YAML文件中指定了,我们必须将修改提交到主分支上。

2

 测试工作流 

接下来,让我们测试一下上面的工作流。

0a61b105f903f379dbf4d825c72e9aed.png

启动工作流流程后,执行的配置会定义一些应该在Ubuntu容器内执行的操作。工作会对我在主分支上的git仓库进行检查,并设置JDK 1.8。然后,它启动mvn构建命令,并将所需的Maven包放入我的pom.xml中。最后,它运行测试并生成JAR文件。

3

  增强工作流

我们在文件中增加几个job:

compile job

test job

build job

下面是完整的文件:

YAML

name: Java CI with Maven
on:
  push:
    branches: [ master ]
  pull_request:
    branches: [ master ]
jobs:
  compile:
    runs-on: ubuntu-latest
    name: Running Java ${{ matrix.java }} compile
    steps:
    - uses: actions/checkout@v2
    - name: Set up JDK 1.8
      uses: actions/setup-java@v1
      with:
        java-version: 1.8
    - name: Compile code
      run: mvn compile
  test:
    runs-on: ubuntu-latest
    name: Running tests
    needs: compile
    steps:
      - uses: actions/checkout@v2
      - name: Set up JDK 1.8
        uses: actions/setup-java@v1
        with:
          java-version: 1.8
      - name: Run unit tests
        run: mvn test
  build:
    runs-on: ubuntu-latest
    name: Run mvn build and generate coverage report
    needs: test
    steps:
      - uses: actions/checkout@v2
      - name: Set up JDK 1.8
        uses: actions/setup-java@v1
        with:
          java-version: 1.8
      - name: Build with Maven
        run: mvn -B package --file pom.xml -Dmaven.test.skip=true
      - name: generate report codecov
        run: mvn cobertura:cobertura
      - name: Upload coverage
        if: success()
        run: |
          curl -s https://codecov.io/bash | bash
        env:
          CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
        shell: bash

我们使用加密的秘密来存储敏感信息。一个字段CODECOV_TOKEN,是一个从codecov.io中检索的令牌。它在Github环境中作为一个秘密被持久化。

一旦执行了动作,我们就可以在 "动作 "选项卡中看到结果。

589edb36c3641f6099fab64617ae76d4.png

在最后一步,我们需要添加一个作业来在远程服务器上部署jar文件。这个工作和前面的工作差不多。我们必须将可执行文件复制到远程服务器上,这个操作基于SFTP协议。

为了让这个工作顺利进行,我们将使用GitHub社区共享的action,我们将根据需要定制它们,garygrossgarten/github-action-scp@release和fifsky/ssh-action@master。然后,我们要在版本库的Github secrets部分添加秘密(ssh连接的环境变量)。

这些变量将在用 Github Actions 启动的容器中可用。

06a5a6b70ee22e97acab1f358d392d63.png

我们再把部署的job加上,代码如下:

YAML

deploy:
  runs-on: ubuntu-latest
  name: Deploy the JAR file to the remote server
  needs: build
  steps:
    - uses: actions/checkout@v2
    - name: Set up JDK 1.8
      uses: actions/setup-java@v1
      with:
        java-version: 1.8
    - name: Generate the package
      run: mvn -B package --file pom.xml -Dmaven.test.skip=true
    - name: Deploy the package to the remote server
      uses: garygrossgarten/github-action-scp@release
      with:
        local: target/workflow-github-actions-1.0-SNAPSHOT.jar
        remote: hacene/demo/actions/workflow-github-actions.jar # My remote directory
        host: ${{ secrets.HOST }}
        username: ${{ secrets.SSH_USER }}
        password: ${{ secrets.SSH_PASSWORD }}
    - name: Run a script on remote server (start the application)
      if: always()
      uses: fifsky/ssh-action@master
      with:
        command: |
          cd hacene/demo/actions/ && java -jar workflow-github-actions.jar &
        host: ${{ secrets.HOST }}
        user: ${{ secrets.SSH_USER }}
        pass: ${{ secrets.SSH_PASSWORD }}
        args: "-tt"
        # The & in the command runs the process on background
一旦有代码提交,你便可以在 Actions下看到如下界面:

4d63508cc63aa111146a20bcb5cc9076.png

整个部署工作运行完成后,可以看到如下界面:

1e0b3c25dd872a2c8667fdd225b7aae7.png

4

 总结 

希望你喜欢这篇文章,并学会如何使用Github动作来自动化你的CI/CD工作流。

就我个人而言,我曾经用Jenkins在一个CI平台上工作,需要很多先决条件来设置工作流程。所以,我非常惊讶于使用Github Actions的CI/CD管道的工作效果,完美无瑕,快速。我们可以利用这种灵活性来创建和维护定制化的开发工作流,从而实现软件开发生命周期流程的自动化。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值