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