You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Codemagic的scripts分段中传递自定义环境变量?

问题原因

Codemagic 中每个独立的 script 段都会运行在单独的子shell进程中,普通shell变量的作用域仅限当前shell,因此不会自动传递到后续的脚本段。

解决方案1(官方推荐:通过全局环境文件传递)

Codemagic 提供了内置的全局环境变量文件 $CM_ENV,你只需要将需要共享的变量写入该文件,后续所有脚本段都可以直接读取这些变量。
修改后的配置示例:

scripts: 
    - name: Fetch the build number
      script: | 
          major_version=$(curl --header "PRIVATE-TOKEN: ${GITLAB_PERSONAL_ACCESS_TOKEN}" "https://gitlab.com/api/v4/projects/${GITLAB_PROJECT_ID}/variables/DEVOPS_IOS_MAJOR_VERSION" | jq -r '.value')
          minor_version=$(curl --header "PRIVATE-TOKEN: ${GITLAB_PERSONAL_ACCESS_TOKEN}" "https://gitlab.com/api/v4/projects/${GITLAB_PROJECT_ID}/variables/DEVOPS_IOS_MINOR_VERSION" | jq -r '.value')
          patch_version=$(curl --header "PRIVATE-TOKEN: ${GITLAB_PERSONAL_ACCESS_TOKEN}" "https://gitlab.com/api/v4/projects/${GITLAB_PROJECT_ID}/variables/DEVOPS_IOS_PATCH_VERSION" | jq -r '.value')

          # 将变量写入全局环境文件,后续脚本可直接读取
          echo "major_version=$major_version" >> $CM_ENV
          echo "minor_version=$minor_version" >> $CM_ENV
          echo "patch_version=$patch_version" >> $CM_ENV

    - name: Print the build number
      script: |
          echo "New Build version $major_version.$minor_version.$patch_version"

这个方法不需要额外处理文件,是跨脚本传递变量的最优方案。

解决方案2(通过临时文件传递)

你已经在脚本中创建了三个txt文件,只需要将变量值写入文件,后续脚本读取文件内容即可:
修改后的配置示例:

scripts: 
    - name: Fetch the build number
      script: | 
          major_version=$(curl --header "PRIVATE-TOKEN: ${GITLAB_PERSONAL_ACCESS_TOKEN}" "https://gitlab.com/api/v4/projects/${GITLAB_PROJECT_ID}/variables/DEVOPS_IOS_MAJOR_VERSION" | jq -r '.value')
          minor_version=$(curl --header "PRIVATE-TOKEN: ${GITLAB_PERSONAL_ACCESS_TOKEN}" "https://gitlab.com/api/v4/projects/${GITLAB_PROJECT_ID}/variables/DEVOPS_IOS_MINOR_VERSION" | jq -r '.value')
          patch_version=$(curl --header "PRIVATE-TOKEN: ${GITLAB_PERSONAL_ACCESS_TOKEN}" "https://gitlab.com/api/v4/projects/${GITLAB_PROJECT_ID}/variables/DEVOPS_IOS_PATCH_VERSION" | jq -r '.value')

          # 将变量值写入本地文件
          echo $major_version > major.txt
          echo $minor_version > minor.txt
          echo $patch_version > patch.txt

    - name: Print the build number
      script: |
          # 从本地文件读取变量值
          major_version=$(cat major.txt)
          minor_version=$(cat minor.txt)
          patch_version=$(cat patch.txt)
          echo "New Build version $major_version.$minor_version.$patch_version"

内容的提问来源于stack exchange,提问作者Neron Joseph

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 04:39:02