【问题标题】:AWS code build with env variables from build-spec.yml使用 build-spec.yml 中的环境变量构建 AWS 代码
【发布时间】:2020-05-21 12:05:19
【问题描述】:

我是这个代码构建的新手。我正在尝试在“代码构建中的环境变量选项卡”中定义环境变量,并使用 buildspec.yml 中定义的那些环境变量。这样做的目的是使用 proces.env.REACT_APP_SOME_SPACE 在 react 应用程序中访问,它应该提供预期的值,以便它可以用于 API 调用。

buildspec.yml

env:
 variables:
// I understand this is plain text. But SOME_TOKEN provided below is defined in the aws code build as an environment variable having a value under environment tab
REACT_APP_SOME_TOKEN: ${SOME_TOKEN} 
REACT_APP_SOME_SPACE: ${SOME_SPACE}
REACT_APP_BASE_URL: 'https://myurl'
REACT_APP_REQUEST_TIMEOUT: '10000'
REACT_APP_SERVICE_API_KEY: ${SERVICE_API_KEY}
...
phases:
install:
commands:
- echo "Building ${CODEBUILD_WEBHOOK_TRIGGER}"
...

例如,我在 process.env.REACT_APP_SOME_TOKEN 中看到的只是“${SOME_TOKEN}”或以明文形式提供的任何内容,而不是环境选项卡中为变量“REACT_APP_SOME_TOKEN”定义的 env 值。 我尝试了以下变体,但没有任何效果:

REACT_APP_SOME_SPACE: ${SOME_SPACE}
REACT_APP_SOME_SPACE: '${SOME_SPACE}'
REACT_APP_SOME_SPACE: {SOME_SPACE}
REACT_APP_SOME_SPACE: $SOME_SPACE

问题:

  1. 这是正确的做法吗?如果没有,请告诉我并提供详细信息
  2. 我看到aws中的参数存储是用来存储密钥的。但是想知道如何在 process.env 或 react 应用程序中的其他一些环境变量中引用它,这样我就可以在我的 api 调用中使用它来传递它。

我所说的环境选项卡在 aws 代码构建中的意思。

【问题讨论】:

标签: amazon-web-services aws-codebuild


【解决方案1】:

variables 只是key: value 的映射。此时,不会使用您为容器指定的环境变量。

这在documentation 中使用$PATH 举例说明:

设置一个名为 PATH 的环境变量,其值为 $PATH:/usr/share/ant/bin,然后 /usr/local/sbin:/usr/local/bin 被 文字值替换强> $PATH:/usr/share/ant/bin。

因此,您的变量 REACT_APP_SOME_TOKEN 设置为 ${SOME_TOKEN} 的字面值,解释了为什么您稍后将它们作为纯文本值获取。

例如,要将REACT_APP_SOME_TOKEN 设置为${SOME_TOKEN} 的实际值,可以在pre_build 中执行以下操作:

  pre_build:
    commands:
      - export REACT_APP_SOME_TOKEN=${SOME_TOKEN}

或者,在您的构建项目中,您可以考虑直接使用REACT_APP_SOME_TOKEN,而不是定义SOME_TOKEN,然后将其分配给REACT_APP_SOME_TOKEN

附: bash 中的源文件示例:

myenvvars.sh:

export A=3
export B=4

构建规范(模拟)

#!/bin/bash

source ./myenvvars.sh

echo ${A}
echo ${B}

【讨论】:

  • 非常感谢您的快速回复,其背后的逻辑是有道理的。确实解决了。如果变量数量增加,可以通过不同的文件导出选项。目前我有 5 到 6 个要导出的变量,我目前正在根据您建议的解决方案进行操作。
  • @Brad 很高兴它成功了。是的,这应该是可能的。您可以将文件与变量捆绑在一起,然后在 buildspec.yml 中 source 它们。
  • 应该是另一个 .spec 文件还是可以在任何文件中。您能否举个例子,因为很难在线查看可用的文档。也只是想知道如果我们使用parameter_store,我们如何导出它?
  • @Brad 我在答案中提供了基本示例。您将变量保存在一个文件中,例如 myenvvars.sh,然后在您的 buildspec 中获取它。我没有真正的 buildspec.yml 来测试,因为我现在没有运行任何构建,但我认为这个想法应该很清楚。显然,您必须将其调整为真实的 buildspec.yml 并在 commands 部分中提供源代码。
  • 太棒了。再一次感谢你。你为我保存了这个周末。导出变量的第一个答案是否与 parameter_store 的工作方式相同,因为我可能最终也会这样做。我阅读了如何包含在 parameter_store 中,但不确定如何导出它。
猜你喜欢
  • 2019-02-10
  • 2020-05-19
  • 2020-08-18
  • 1970-01-01
  • 2017-04-26
  • 1970-01-01
  • 2022-10-15
  • 1970-01-01
  • 2015-04-15
相关资源
最近更新 更多