主要参考资料
B站乐鑫信息科技《【乐鑫全球开发者大会】DevCon23 #15 |通过 CI/CD 进行流水线开发》
pytest-embedded乐鑫文档: https://docs.espressif.com/projects/pytest-embedded/en/latest/api.html
目录
- CI/CD简介
- 乐鑫内部CI/CD测试
- GitLab CI/CD
- GitHub Actions
CI/CD简介
CI(Continuous Integration,持续集成)/CD(Continuous Delivery,持续交付/Continuous Deployment,持续部署)属于DevOps的概念,指将传统开发过程中的代码构建、测试、部署以及基础设施配置等一系列流程的人工干预转变为自动化。使用CI/CD,代码经由开发人员更改后,可进行自动化测试并完成交付和部署。恰当的CI/CD管道可使计算机停机时间最小化,从而更快发布代码。
乐鑫内部CI/CD测试
- idf-build-apps
idf-build-apps的作用只有两个,找到编译文件和编译。 - pytest-embeded
GitLab CI/CD
stages:- build- deploybefore_script:- echo "Preparing the environment..."build_job:stage: buildscript:- echo "Building the project..."- make builddeploy_job:stage: deployscript:- echo "Deploying the project..."- make deploy
- stages定义了两个阶段:build和deploy。这表示流水线将按照这个顺序先执行build阶段,然后执行deploy阶段。
- before_script是所有作业执行之前的钩子(hook),在这里输出了准备环境的信息。
- build_job是build阶段的一个作业,它将执行script部分定义的命令,比如回显"Building the project…"和执行make build命令。
- deploy_job是deploy阶段的一个作业,它也将执行script部分定义的命令,比如回显"Deploying the project…"和执行make deploy命令。
GitHub Actions
GitHub的CI/CD功能是通过GitHub Actions实现的。GitHub Actions允许你在GitHub仓库中直接构建、测试和部署代码。与GitLab CI/CD类似,你可以定义多个工作流程(workflows)和作业(jobs),并在不同的阶段执行不同的任务。
name: CI/CD Workflowon: [push, pull_request]jobs:build:runs-on: ubuntu-lateststeps:- uses: actions/checkout@v2- name: Set up JDK 1.8uses: actions/setup-java@v1with:java-version: 1.8- name: Build projectrun: ./gradlew builddeploy:needs: buildruns-on: ubuntu-latestif: github.event_name == 'push' && github.ref == 'refs/heads/main'steps:- uses: actions/checkout@v2- name: Set up Node.jsuses: actions/setup-node@v1with:node-version: '12'- name: Deploy projectrun: npm run deployenv:CI: true
- name: 定义了工作流程的名称。
- on: 指定触发工作流程的事件,这里使用了push和pull_request。
- jobs: 包含了一个或多个作业的定义。
- build: 定义了build作业,它将在Ubuntu最新版本上运行。
- steps: 包含了作业需要执行的步骤。
- uses: 使用了actions市场中的actions/checkout@v2动作来检出代码。
- name和run: 定义了步骤的名称和要运行的命令。
- deploy: 定义了deploy作业,它依赖于build作业的成功完成(needs: build),并且只有在推送到main分支时才会运行(if条件)。
- env: 定义了部署步骤所需的环境变量。
- build: 定义了build作业,它将在Ubuntu最新版本上运行。