使用Github Action來輔助專案管理

思捻如枫發表於2024-06-28

Github action 是一個Github官方提供的非常流行且速度整合 持續整合和持續交付(CI/CD)的工具。它允許你在GitHub倉庫中自動化、定製和執行你的軟體開發工作流。你可以發現、建立和分享用於執行任何你想要的工作的操作,包括CI/CD,並在完全定製的工作流中組合操作。

持續整合需要做如下的工作:就拿我們公司來講,有一個很嚴格和規範的流程來卡主開發提交程式碼並check其工作流來保證程式碼的質量和流程的規範化運作,這也是屬於專案管理的一部分,並透過長期實踐已融入血液中。

先來看看github actions都有哪些功能吧:AI時代不懂的問KIMI Prompt:
(一)假設你是一位github action持續整合專家,我有幾個關於action actions的問題想向你諮詢
(二)github action是什麼,請簡單介紹一下
(三)實際工作中都有哪些CI/CD的流程可以借鑑和使用github actions
(四)請結合一個實際軟體專案案例來幫我簡要分析下實施過程中github actions扮演的角色和重要的功能,要求邏輯清晰,簡潔,分條羅列要點,字數不超過500字,語言生動有趣富有表現力
(五)請結合實際專案,說幾個實用型的github actions的功能並給出解決方案
(六)在持續整合功能中具體可以做哪些工作並給出yaml配置資訊
(七)假定我在做一個Java持續整合的專案請給出github actions的yaml配置資訊 {此條prompt寫的不太清晰}
(八)假定我在做一個Java8的基於Gradle構建的持續整合的專案請給出github actions的yaml配置資訊,需要新增程式碼靜態檢查,code style, SonarLint和SonarQube檢查,findbugs檢查並發現issue郵件通知聯絡人功能
我挑選了一個我相對滿意的KIMI輸出的例子:

讓我們以一個流行的開源專案——一個名為“GreenThumb”的智慧植物監測應用為例,來看看GitHub Actions如何成為這個專案不可或缺的超級助手:

程式碼守衛:每當開發者提交程式碼,GitHub Actions 就像一個嚴格的門衛,立即檢查程式碼是否遵循專案規範。

自動化測試員:它啟動自動化測試,確保程式碼更改不會影響應用的智慧監測功能,就像園丁確保植物健康成長。

構建工匠:透過構建流程,GitHub Actions 將原始碼轉化為使用者可以下載和安裝的應用程式,就像將原材料加工成精美的工藝品。

安全偵探:它使用安全掃描工具,尋找程式碼中的潛在漏洞,保護應用免受惡意攻擊,就像偵探尋找線索。

部署嚮導:一旦程式碼透過所有檢查,GitHub Actions 將其部署到測試和生產環境,就像嚮導帶領遊客到達目的地。

文件編輯:它自動更新專案文件,為新貢獻者提供清晰的指導,就像圖書館裡的索引系統。

溝通大使:在關鍵步驟完成後,GitHub Actions 透過電子郵件、Slack等渠道傳送通知,確保團隊成員及時瞭解專案進展,就像宴會上的傳令官。

版本釋出者:它根據版本控制策略自動釋出新版本,簡化了釋出流程,就像酒莊定期推出新釀的葡萄酒。

GitHub Actions 在GreenThumb專案中扮演了多面手的角色,從程式碼提交到應用釋出,每一步都確保流程的順暢和高效,就像一個精心編排的交響樂團,每個成員都發揮著關鍵作用。

  

其中的第六點kimi也給出了程式碼:

name: Continuous Integration

on: [push, pull_request]

jobs:
  build-and-test:
    runs-on: ubuntu-latest

    steps:
    - name: Checkout code
      uses: actions/checkout@v2

    - name: Install dependencies
      run: npm install

    - name: Run tests
      run: npm test

    - name: Lint code
      run: npm run lint

    - name: Build project
      run: npm run build

    - name: Upload build artifacts
      uses: actions/upload-artifact@v2
      with:
        name: build
        path: dist/

    - name: Deploy to test environment
      if: success() # Only run if all previous steps succeeded
      run: |
        # Deploy script or command goes here
        echo "Deploying to test environment..."

    - name: Send notification
      if: failure()
      run: |
        # Notification script or command goes here
        echo "Sending failure notification..."

  第八點KIMI的答案:

name: Java CI with Gradle, SonarQube, and FindBugs

on: [push, pull_request]

jobs:
  build-and-analyze:
    runs-on: ubuntu-latest

    steps:
    - name: Checkout source code
      uses: actions/checkout@v2

    - name: Set up JDK 8
      uses: actions/setup-java@v2
      with:
        java-version: '8'
        distribution: 'adopt'

    - name: Cache Gradle packages
      uses: actions/cache@v2
      with:
        path: |
          ~/.gradle/caches
          ~/.gradle/wrapper
        key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*') }}
        restore-keys: ${{ runner.os }}-gradle-

    - name: Install dependencies
      run: gradle dependencies

    - name: Run Checkstyle for code style
      run: gradle checkstyleMain

    - name: Run SonarQube analysis
      env:
        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
      run: |
        gradle sonarqube
        # 確保替換下面的URL為你的SonarQube伺服器URL
        # sonar-scanner -Dsonar.projectKey=your_project_key -Dsonar.host.url=https://your.sonarqube.server

    - name: Run FindBugs
      run: gradle findbugsMain

    - name: Build project
      run: gradle build

    - name: Upload build artifact
      uses: actions/upload-artifact@v2
      with:
        name: java-app
        path: build/libs/*.jar

    - name: Deploy
      if: success() && github.ref == 'refs/heads/main'
      run: |
        # 這裡新增你的部署指令碼或命令
        echo "Deploying application..."

    - name: Send email notification on issue
      if: failure()
      env:
        EMAIL_ADDRESS: ${{ secrets.EMAIL_ADDRESS }}
        EMAIL_SERVER: ${{ secrets.EMAIL_SERVER }}
        EMAIL_PORT: ${{ secrets.EMAIL_PORT }}
        EMAIL_USERNAME: ${{ secrets.EMAIL_USERNAME }}
        EMAIL_PASSWORD: ${{ secrets.EMAIL_PASSWORD }}
      run: |
        # 這裡新增傳送郵件的指令碼或命令
        # 可以使用像curl這樣的命令列工具來傳送郵件
        echo "Sending email notification to ${EMAIL_ADDRESS}"
        # 以下是一個使用curl傳送郵件的示例
        # curl ... --mail-from ... --mail-rcpt ... -F ...

  

但是這次和00後的小朋友一起合作的Web3 駭客松專案(https://github.com/Sifotd)
我就發現專案管理中的諸多問題,由於前期他們還沒有養成提交程式碼規範化寫commit message的習慣,胡亂寫一堆message ,真讓人抓狂,人在專案中是不可控因素,那這應該是需要從流程的角度去hold住。

首先還是來看下需求,需要github action做哪些工作, github action的原理是什麼,原理決定了哪些需求可做哪些不可做,可做的如何實現,不可做的需要用什麼別的替代方案來做到。後期如何絲滑和貫徹落實,落實之後要建立反饋機制在下一個迭代週期中完善和改進。改進了還不行,需要把實踐的東西上升為形而上的方法論去不斷精進,唯獨這樣才能把工匠精神落到實處,在不斷耕耘中收貨成功的種子 。

讓github workflow來為我實現如下需求,整理如下:
1.github action可以做自動化部署
2.commit message check
3.程式碼質量靜態檢查,程式碼風格檢查

下期結合實際問題來編寫yaml程式碼並一一落地,並結合實際來驗證KIMI給出的答案可行性和落地效果。這是個令人興奮的工作,有了它能持續精進和打磨團隊,讓其高效而有質量的產出。流程和效率是一個相互博弈的過程,需要根據實際情況來辯證看待!
參考文章:
GitHub Actions - The Complete Guide
https://www.udemy.com/course/github-actions-the-complete-guide/
如何使用 GitHub Actions 實現開源專案的自動化
https://www.freecodecamp.org/chinese/news/automate-open-source-projects-with-github-actions/
Github action 部落格自動化部署:https://frostming.com/2020/04-26/github-actions-deploy/
https://www.freecodecamp.org/chinese/news/automate-open-source-projects-with-github-actions/
10 個你該瞭解的 GitHub Actions 進階技巧
https://cloud.tencent.com/developer/article/1782556

相關文章