logo
2
10
WeChat Login

Action 迁移 CNB 的疑问#38

Resolved
created 2025-08-13
Edit
  1. Github Action 通过 strategy.matrix 并行测试多 OS /语言版本组合,这个在 CNB 上如何实现?同样,如果想要运行非容器化任务(如 macOS 应用编译)这个如何实现?

    jobs:
     test:
       runs-on: ${{ matrix.os }}
       strategy:
       matrix:
         os: [ubuntu-latest, windows-latest, macos-latest]
         node: [14, 16, 18]
       steps:
         - name: Check Node.js ${{ matrix.node }} on ${{ matrix.os }}
           run: node --version
         - ...
     build_macos_app:
         runs-on: macos-12
         steps:
         - name: Build Xcode project
             run: xcodebuild -project ***
         - ...
    
  2. Action 提供 Self-hosted Runner 自托管运行器,这样可访问内网服务(数据库,私有仓库等)。后续是否支持自托管?后续能否类似 act 这样可以在本地进行调试?

    jobs:
      build:
        runs-on: [self-hosted, gpu]
    
  3. Action 支持通过 upload-artifact/download-artifact 实现产物跨流水线传递。CNB 现在可以通过 Volume 来解决这个问题,但是感觉不是很方便,希望官方能出一个解决方案。

    jobs:
      define-matrix:
        runs-on: ubuntu-latest
    
        outputs:
          colors: ${{ steps.colors.outputs.colors }}
    
        steps:
          - name: Define Colors
            id: colors
            run: |
              echo 'colors=["red", "green", "blue"]' >> "$GITHUB_OUTPUT"
    
      produce-artifacts:
        runs-on: ubuntu-latest
        needs: define-matrix
        strategy:
          matrix:
            color: ${{ fromJSON(needs.define-matrix.outputs.colors) }}
    
        steps:
          - name: Define Color
            env:
              color: ${{ matrix.color }}
            run: |
              echo "$color" > color
          - name: Produce Artifact
            uses: actions/upload-artifact@v4
            with:
              name: ${{ matrix.color }}
              path: color
    
      consume-artifacts:
        runs-on: ubuntu-latest
        needs:
          - define-matrix
          - produce-artifacts
        strategy:
          matrix:
            color: ${{ fromJSON(needs.define-matrix.outputs.colors) }}
    
        steps:
          - name: Retrieve Artifact
            uses: actions/download-artifact@v4
            with:
              name: ${{ matrix.color }}
    
          - name: Report Color
            run: |
              cat color
    
  1. Action 支持通过 concurrency 控制一组作业/工作流运行的并发。例如,一组作业/工作流在运行时,主分支上有了新的推送(紧急修复 bug),这时应该取消上一个并发组的运行,并且启动新运行。

  2. Action 支持通过 working-directory 设置默认的工作目录,CNB 中好像没有(或许没找到...)

  3. CNB 现在好像只支持作业级环境变量/密钥设置,不支持设置工作流级环境变量/密钥?

下面的应该不属于这个主题~

  1. 文档还需要完善,里面示例代码太少了,编写代码时还需要在帮助文档和最佳实践仓库来回跳转,希望能在文档中添加了一些简单的示例代码。
  2. 云构建中只能删除具体的日志,不能删除整个任务?
assigned self
added labels
有效问题
added labels
优质问题
Developer
  1. 如果只是多语言版本组合见探讨关于制作构建环境版本参数的实践思路 · Issue #16,多系统的话cnb基于docker,目前没有计划开放kvm,所以macos/windows平台的编译目前只有交叉编译和在自己的机器上跑两个选择,自托管runner需要去feedback提出feature请求,目前只能自己实现
  2. 在1中解释了
  3. cnb目前也有官方插件可以提供产物的上传与下载,见附件,不过目前只支持附在commit下面或者发布release,可能需要自己做一定的处理
  4. 目前暂时没有官方方式实现,你可以在写工作流的时候进行检测,如果有在运行的工作流就用api接口进行停止
  5. 目前没有官方功能,你可以通过脚本任务手动切换
  6. 详见流水线语法 | 云原生构建指定环境变量。可以定义一组环境变量,在任务执行中使用。对当前 Pipeline 内的非插件任务均有效。

下面的两个问题也回答了吧:

  1. 请在官方feedback提出建议
  2. 为了安全审计考虑,开发团队希望所有日志都可追溯,暂不支持删除构建记录,如果一定需要删除可以考虑重建仓库~
3
added labels
擂主团已回答

围观围观

@haorwen(haorwen)

详见流水线语法 | 云原生构建指定环境变量。可以定义一组环境变量,在任务执行中使用。对当前 Pipeline 内的非插件任务均有效。

文档里给出的是作业级,也就是不支持工作流级的?

Developer

@haorwen(haorwen)

详见流水线语法 | 云原生构建指定环境变量。可以定义一组环境变量,在任务执行中使用。对当前 Pipeline 内的非插件任务均有效。

文档里给出的是作业级,也就是不支持工作流级的?

@Ryanjie(Jaime) pipeline就是流水线级啊()

1

目前暂时没有官方方式实现,你可以在写工作流的时候进行检测,如果有在运行的工作流就用api接口进行停止

这个 api 接口是?或者说相关接口文档在哪?

Developer

这个 api 接口是?或者说相关接口文档在哪?

@Ryanjie(Jaime) 文档地址https://api.cnb.cool/,可以先查询构建列表然后停止一个构建

2

@Ryanjie(Jaime) pipeline就是流水线级啊()

@haorwen(haorwen) 我以为我弄错了... cnb 现在的就是设置任务级的环境变量,并不是流水线级的。

https://cnb.cool/prevailna/workflows-test/-/build/logs/cnb-du6-1j2jqcodb 这个是测试

2921a0c0-df13-4a49-8431-b59dd3542009.png
Developer

@haorwen(haorwen) 我以为我弄错了... cnb 现在的就是设置任务级的环境变量,并不是流水线级的。

@Ryanjie(Jaime) Pipeline: 表示一个流水线,包含一个或者多个阶段 Stage,每个 Stage 依次执行。
Stage: 表示一个构建阶段,可以由一个或者多个任务 Job 组成。
Job: 最基本的任务执行单元。

你的意思是想设置整个文件级别的env?所有pipeline共用吗,那么目前暂不支持,你可以使用yaml的锚点语法实现差不多的效果

1

@Ryanjie(Jaime) Pipeline: 表示一个流水线,包含一个或者多个阶段 Stage,每个 Stage 依次执行。
Stage: 表示一个构建阶段,可以由一个或者多个任务 Job 组成。

@haorwen(haorwen) 所以 VAR 应该定义为为工作流级的吧(范围:所有工作流)

你的意思是想设置整个文件级别的env?所有pipeline共用吗,那么目前暂不支持,你可以使用yaml的锚点语法实现差不多的效果

看来只能使用 yaml 的语法了。补充:import 虽然没有 schema 错误提示,但是实验后也不能读取

Resolved ISSUE

谢谢大佬的耐心解答 @haorwen(haorwen)

removed labels
优质问题
Assignee
(haorwen)
Label
擂主团已回答
有效问题
Priority
None yet
Time period
-
Property
Add custom properties to record and label key information
Participant