首页 > 解决方案 > 如何在 Codemagic 脚本部分中传递环境变量

问题描述

我正在使用 Codemagic CI/CD 构建 Flutter 应用程序。在脚本部分下,我为每个功能使用单独的部分。像这样:

scripts: 
    - name: Fetch the build number
        script: | 
            touch major.txt
            touch minor.txt
            touch patch.txt

            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')

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

但是在这里,我获得的 major_verison、minor_version 等的值没有传递到下一节,因为我编写了脚本来分离这些功能。这是我从Print the build number部分得到的结果:

新的构建版本..

我知道如果我在一个部分下添加这些命令会起作用,但是有没有办法将我们在一个部分中创建的变量传递给另一个部分?

标签: codemagic

解决方案


这是 shell 解释器方面的限制。只能将环境变量从父进程传递给子进程(例如,如果您运行另一个 bash 脚本或任何命令)。

在您的情况下,每个script部分都运行一个新的 shell 会话,并且您无权访问上一个会话中的环境变量。要克服此限制,您可以使用文件来保存和读取版本值或将所有命令移动到同script一部分。


推荐阅读