• 使用Github Action来辅助项目管理


    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输出的例子:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    让我们以一个流行的开源项目——一个名为“GreenThumb”的智能植物监测应用为例,来看看GitHub Actions如何成为这个项目不可或缺的超级助手:
     
    代码守卫:每当开发者提交代码,GitHub Actions 就像一个严格的门卫,立即检查代码是否遵循项目规范。
     
    自动化测试员:它启动自动化测试,确保代码更改不会影响应用的智能监测功能,就像园丁确保植物健康成长。
     
    构建工匠:通过构建流程,GitHub Actions 将源代码转化为用户可以下载和安装的应用程序,就像将原材料加工成精美的工艺品。
     
    安全侦探:它使用安全扫描工具,寻找代码中的潜在漏洞,保护应用免受恶意攻击,就像侦探寻找线索。
     
    部署向导:一旦代码通过所有检查,GitHub Actions 将其部署到测试和生产环境,就像向导带领游客到达目的地。
     
    文档编辑:它自动更新项目文档,为新贡献者提供清晰的指导,就像图书馆里的索引系统。
     
    沟通大使:在关键步骤完成后,GitHub Actions 通过电子邮件、Slack等渠道发送通知,确保团队成员及时了解项目进展,就像宴会上的传令官。
     
    版本发布者:它根据版本控制策略自动发布新版本,简化了发布流程,就像酒庄定期推出新酿的葡萄酒。
     
    GitHub Actions 在GreenThumb项目中扮演了多面手的角色,从代码提交到应用发布,每一步都确保流程的顺畅和高效,就像一个精心编排的交响乐团,每个成员都发挥着关键作用。

      

    其中的第六点kimi也给出了代码:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    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的答案:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    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

  • 相关阅读:
    酷开系统 | 酷开科技助推大屏营销价值提升
    艾美捷EndoGrade卵清蛋白重组示例说明
    Tomcat服务的部署及配置优化
    基于chatgpt的聊天机器人
    EKP接口开发Webservice服务和Restservice服务以及定时任务Demo
    网页设计前端作品(大一)HTML+CSS
    华为数通方向HCIP-DataCom H12-821题库(单选题:221-240)
    树形结构之父子节点查询
    《C++代码简洁之道》学习笔记:C++代码整洁的基本规范
    [统计机器学习]SVM
  • 原文地址:https://www.cnblogs.com/qinweiping/p/18272764