GitHub Actions使用實例

後端

後端代碼提交後,自動build(使用gradle)打包並將新的可執行jar包部署到指定服務器前端

實現

在項目根目錄的.github/workflows目錄下寫以下文件gradle_build.yamlvue

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 & 複製代碼

注意事項java

  1. 要在項目根目錄使用gradlew因此能夠事先在本地環境中,嘗試使用gradlew構建項目,保證配置沒有錯誤,而且應將gradlew可執行腳本加入到git庫中
  2. 使用gradlew配置項目時會在根目錄生成gradle/wrapper目錄,其中有gradle-wrapper.jargradle-wrapper.properties兩個文件,要將此目錄加入到git庫中
  3. gradle/wrapper/gradle-wrapper.properties配置文件複製到項目根目錄中,並加入到git庫中,保證gradle配置生效
  4. 在第六、7步驟中,須要遠程鏈接到指定的部署服務器,須要在GitHub項目界面中的Settings選項界面的Secret界面中點擊New repository secret添加配置信息,名字就是yaml文件中使用的配置屬性名
  5. 第6步驟中須要注意,會將source的目錄結構複製到target指定的文件夾中,因此放到一個臨時文件夾中
  6. 步驟7中,將目的jar包移動到目的目錄。刪除臨時文件夾,重啓服務,注意nohup指令,若是隻是寫做nohup bin/dockerhub &,GitHub Actions的執行流程會卡頓在此處

前端

前端代碼(Vue項目)提交後,自動打包並將新包部署到指定服務器node

實現

在項目根目錄的.github/workflows目錄下寫以下文件vue_build.yamlgit

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/"
複製代碼
相關文章
相關標籤/搜索