如何在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
相关产品推荐
相关产品推荐

