美文网首页
GitHub搭建自己的持续集成

GitHub搭建自己的持续集成

作者: 臻甄 | 来源:发表于2024-04-16 16:58 被阅读0次

    什么是持续集成

    • 代码开发 -> 代码提交 -> 服务器编译、测试、打包 -> 服务器部署(大规模部署用 docker)
    • 上面这套流程中除了前两个,其他的都自动执行,就是CI(持续集成)。

    什么是GitHub Actions

    • GitHub Actions 是 GitHub 推出的持续集成服务,于 2018 年 10 月推出。
    • 之前是怎么做的:通过Webhook接入Jenkins
    • 现在更方便:Github直接提供服务器帮忙做编译、测试、打包的工作,不需要额外搭建CI了
    • 每一个操作都是一个action,很多操作叠加起来就是很多的actions
    • 本质上就是每次提交代码到github仓库后,github会自动创建一个虚拟机(可以是Ubuntu、Mac、Windows),来执行一段或者多段指令。
    • 切换到 Action 选项板可以看到很多workflow的模板。

    Github Actions的使用限制

    • 每个 Workflow 中 job 最多可以执行6个小时
    • 每个 Workflow 中最多可以执行72小时
    • 每个 Workflow 中的 job 最多可以排队24小时
    • 在一个github库中的所有Action中,一个小时最多可以执行1000个API的请求
    • 并发工作数: Linux 20,Mac: 5
    • 硬件限制:目前Github只支持3类操作系统(Ubuntu、Mac、Windows),配置如下
      (1)2 core CPUs
      (2)7 GB of RAM memory
      (3)14GB of SSD disk space

    Actions市场

    自己编写Action

    name: my_nam # 根据自己需求命名
    on:  # 表示触发条件,比如当代码push到master分支的时候触发,则
      push:  # 这里代表单个事件,也可以写成 [push, workflow_dispatch] 多个事件
        branches:
          - master
      pull_request: # 也可以新增单个事件
        branches:
          - main
    
    jobs:  # 表示实际需要执行的工作,比如下面的例子代表使用Ubuntu执行构建工作,执行步骤上使用了appleboy/ssh-action这个仓库的能力
      build:
        name: Build
        runs-on: ubuntu-latest
        steps: # 每个job由多个step构成,会从上到下依次执行
          - name: executing remote ssh commands using password  # 步骤名
            uses: appleboy/ssh-action@master  #  引用其他的workflows文件
    

    举个例子:跑起来Actions只是为了单纯打印一句话

    name: Test
    on: 
      push:
        branches:
        - develop
      pull_request:
        branches:
        - develop
    
    jobs:
      my-job:
        name: Greeting for PARL
        runs-on: ubuntu-latest
        steps:
        - name: Print a greeting
          env:
            MY_VAR: Hi there! My name is
            FIRST_NAME: Hello world
          run: |
            echo $MY_VAR $FIRST_NAME
    

    举个例子:push后让代码执行单测

    name: CI
    on: push
    
    jobs:
      ci:
        runs-on: ubuntu-latest
        steps:
          - name: Checkout repo
            run: |
              rm -rf ${{github.event.repository.name}}
              git clone https://${{github.repository_owner}}:${{github.token}}@github.com/${{github.repository}}
              git -C "${{github.workspace}}/${{github.event.repository.name}}" checkout ${{github.ref}}
          - name: Python unittest
            run: |
              python3 -m venv venv
              source venv/bin/activate
              cd ${{github.event.repository.name}}
              pip3 install -r requirements.txt
              pre-commit run -a
              python3 -m unittest discover -v
          - name: Cleanup
            run: |
              rm -rf venv
              rm -rf ${{github.event.repository.name}}
    

    举个例子:push后自动登录自己的服务器,编译打包

    name: remote ssh command
    on:
      push:
        branches:
          - master
    jobs:
      build:
        name: Build
        runs-on: ubuntu-latest
        steps:
          - name: executing remote ssh commands using password
            uses: appleboy/ssh-action@master
            with: # 根据文件的说明,添加所需的配置参数:从这里开始因为涉及登录账号密码,可以在 settings->secrets 里配置下面的变量,不会被泄露出去
              host: ${{ secrets.HOST }}
              username: ${{ secrets.USERNAME }}
              password: ${{ secrets.PASSWORD }}
              command_timeout: 5m
              script: |   # 登录完成之后会连续执行这里的命令
                cd ~/test
                git pull origin master
                yarn
                yarn build
    

    进阶配置

    • 可以使用matrix并发的在不同的配置或者操作系统中执行单测。详见Matrix配置项
    • 接收用户输入:可以等用户输入一个关键的信息,再执行整个流程。
    • Nightly 构建:用户指定任何重复任务的触发时间,比如每天凌晨两点执行任务如下所示:
    on: 
      schedule: 
        - cron: '0 18 * * *' 
    

    相关文章

      网友评论

          本文标题:GitHub搭建自己的持续集成

          本文链接:https://www.haomeiwen.com/subject/yoijxjtx.html