一种不错的学习型个人开发者的持续集成方案:GITHUB ACTION

发表于 2023-07-06 | linux

前言

我本身在传统行业和产品型公司工作,公司比较偏向传统的部署和更新方式让我很苦恼,外加上不是很好的pc性能,所以最近一直都在研究自动部署。

而github action是github本身推出的服务,它和我之前写过的drone非常类似,由开发者提供yml配置文件,然后部署服务通过读取yml,由上到下顺序执行。

github设置

点击new之后 图中都是预设,比如docker的,java的,我们先随便点一个。 左边区域是编写的区域,右边是插件仓库,插件仓库提供了各种别人写好的插件,比如:ftp、sftp、ssh、docker。

yml示例

name: java CI
 
 
on:
  push:
    branches: [ main ]
    paths-ignore:
      - 'README.md'
 
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - name: Set up JDK 17
        uses: actions/setup-java@v2
        with:
          java-version: '17'
          distribution: 'adopt'
      - name: Validate Gradle wrapper
        uses: gradle/wrapper-validation-action@v1.0.4
      - name: Make Gradlew Executable
        run: chmod +x ./gradlew
      - name: Build with Gradle
        uses: gradle/gradle-build-action@v2.1.4
        with:
          arguments: build
      - uses: mr-smithers-excellent/docker-build-push@v5
        name: Build & push Docker image
        with:
          image: inyaa/inyaa-admin
          tags: latest
          registry: ccr.ccs.tencentyun.com
          dockerfile: Dockerfile
          username: ${{ secrets.DOCKER_HUB_USERNAME }}
          password: ${{ secrets.DOCKER_HUB_PASSWORD }}
      - name: executing remote ssh commands using password
        uses: appleboy/ssh-action@master
        with:
          host: ${{ secrets.HOST }}
          username: ${{ secrets.USERNAME }}
          password: ${{ secrets.PASSWORD }}
          port: ${{ secrets.PORT }}
          script: 
            docker stop $(docker ps -a  grep "inyaa-admin"  awk '{print $1}')
            docker rm -f $(docker ps -a  grep inyaa-admin  awk '{print $1}')
            docker rmi $(docker images  grep inyaa-admin  awk '{print $3}')
            docker run -d -p 8080:8080 --name inyaa-admin --network inyaa --network-alias inyaa-admin --volume=/data/nginx/html/sitemap:/home/sitemap ccr.ccs.tencentyun.com/inyaa/inyaa-admin:latest
 

配置解释

可以看到,branches: [ main ]是指提交到mian这个分支,paths-ignore是指如果跳过,不执行部署的文件。 从上到下,我们可以解释一下: actions/checkout是指检出代码

actions/setup-java@v2是指设置开发环境,我这里是jdk 17,并且openjdk的版本是adopt

gradle/wrapper-validation-actiongradle/gradle-build-action这两个都是打包工具,因为我这里使用的是gradle,所以先wrapper后build。

mr-smithers-excellent/docker-build-push是指使用dockerfile打包,然后发布到docker仓库。

appleboy/ssh-action最后这个是ssh登陆到服务器部署。

追加说明

以上就是java部署的部分了。可以看到,经常会有类似${{ secrets.DOCKER_HUB_USERNAME }}这样的配置。 这个的意思是,服务器相关的配置,从github的secrets中读取,设置的地方如下图所示。