如何在 Codemagic 脚本部分传递环境变量

How to pass environment variable in Codemagic scripts section

我正在使用 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:

部分得到的结果

New Build version ..

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

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

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