GitHub Actions使用实例

1,300 阅读2分钟

后端

后端代码提交后,自动build(使用gradle)打包并将新的可执行jar包部署到指定服务器

实现

在项目根目录的.github/workflows目录下写如下文件gradle_build.yaml

name: Java CI with Gradle
# 设置触发条件
# 1. 对main分支执行push操作或者pull request操作时触发
on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]
# CI/CD 任务流程
jobs:
  build:
    # 指定构建容器环境
    runs-on: ubuntu-latest
    steps:
    # 1:下载源码(拉取代码到构建容器中)
    - name: Checkout
      uses: actions/checkout@master
    # 2. 设置Java环境
    - name: Set up JDK 11
      uses: actions/setup-java@v1
      with:
        java-version: 11
    # 3. 设置gradlew执行权限
    - name: Grant execute permission for gradlew
      run: chmod +x gradlew
    # 4. 缓存构建缓存
    - name: Cache Gradle packages
      uses: actions/cache@v2
      with:
        path: |
          ~/.gradle/caches
          ~/.gradle/wrapper
        key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
        restore-keys: |
          ${{ runner.os }}-gradle-
    # 5. 项目构建
    - name: Build with Gradle
      run: ./gradlew build -x test
    # 6. 部署到服务器
    - name: Copy file via scp
      uses: appleboy/scp-action@master
      env:
        HOST: ${{ secrets.HOST }}
        USERNAME: ${{ secrets.USERNAME }}
        PORT: ${{ secrets.PORT }}
        KEY: ${{ secrets.SSHKEY }}
      with:
        source: "build/libs/dockerhub-1.0.1.jar"
        target: "/opt/dockerhub-1.0.1/temp"
    # 7. 重启服务
    - name: Deploy
      uses: appleboy/ssh-action@master # 使用ssh链接服务器
      with:
        host: ${{ secrets.HOST }}
        username: ${{ secrets.USERNAME }}
        key: ${{ secrets.SSHKEY }}
        port: ${{ secrets.PORT }}
        script: |
          mv /opt/dockerhub-1.0.1/temp/build/libs/dockerhub-1.0.1.jar /opt/dockerhub-1.0.1/lib/
          rm -rf /opt/dockerhub-1.0.1/temp
          cd /opt/dockerhub-1.0.1/
          jps |grep DockerHubService | awk '{print $1}' | xargs kill -9
          nohup bin/dockerhub > nohup.out 2> nohup.err < /dev/null &

注意事项

  1. 要在项目根目录使用gradlew所以可以事先在本地环境中,尝试使用gradlew构建项目,保证配置没有错误,并且应将gradlew可执行脚本加入到git库中
  2. 使用gradlew配置项目时会在根目录生成gradle/wrapper目录,其中有gradle-wrapper.jargradle-wrapper.properties两个文件,要将此目录加入到git库中
  3. gradle/wrapper/gradle-wrapper.properties配置文件复制到项目根目录中,并加入到git库中,保证gradle配置生效
  4. 在第6、7步骤中,需要远程连接到指定的部署服务器,需要在GitHub项目界面中的Settings选项界面的Secret界面中点击New repository secret添加配置信息,名字就是yaml文件中使用的配置属性名
  5. 第6步骤中需要注意,会将source的目录结构复制到target指定的文件夹中,所以放到一个临时文件夹中
  6. 步骤7中,将目的jar包移动到目的目录。删除临时文件夹,重启服务,注意nohup指令,如果只是写作nohup bin/dockerhub &,GitHub Actions的执行流程会卡顿在此处

前端

前端代码(Vue项目)提交后,自动打包并将新包部署到指定服务器

实现

在项目根目录的.github/workflows目录下写如下文件vue_build.yaml

name: VUE-CI
on:
  push:
    branches: [ master ]
  pull_request:
    branches: [ master ]
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@master
      - name: set up node env
        uses: actions/setup-node@master
      - name: Installing project dependencies
        run: yarn
      - name: Building the project
        run: npm run build
      # 使用ssh链接服务器,清空旧的部署
      - name: Deploy
        uses: appleboy/ssh-action@master 
        with:
          host: ${{ secrets.HOST }}
          username: ${{ secrets.USERNAME }}
          key: ${{ secrets.SSHKEY }}
          port: ${{ secrets.PORT }}
          script: |
            rm -rf /opt/dvclab/
            mkdir -p /opt/dvclab/
      # 拷贝打包好的文件
      - name: Copy file via scp
        uses: appleboy/scp-action@master
        env:
          HOST: ${{ secrets.HOST }}
          USERNAME: ${{ secrets.USERNAME }}
          PORT: ${{ secrets.PORT }}
          KEY: ${{ secrets.SSHKEY }}
        with:
          source: "./dist/"
          target: "/opt/dvclab/"