我需要将python文件的内容打印到YAML文件中,而不会弄乱YAML文件的缩进。 YAML文件中执行此操作的部分是对将传递到Bash脚本中的命令的描述,因此我们需要使用Bash脚本语法来完成。例如,下面的硬编码代码WORKS。请注意,“ cat”行如何以适当的缩进输出script.py的内容:
诀窍是在尝试从另一个文件读取Python时将其转换为该格式。实际上,为了创建该屏幕截图,我必须在文件生成后实际进入文件并添加一堆空格,以便看起来正确。添加空格后,文件按预期工作。在手动编辑之前,错误的输出如下所示:
有趣的是,python的第一行(绿色箭头)从正确的行开始。但是其余的线一直在左边缘,并且是错误的(红色箭头)。
这是我用来将我的代码(在script.py中)放入buildspec的代码:
注意:$ {Script}是对我的script.py文件的引用。该变量正在文件的其他位置设置。
version: 0.2
phases:
install:
commands:
- apt-get update -y
build:
commands:
- git config --global credential.helper '!aws codecommit credential-helper $@'
- git config --global credential.UseHttpPath true
- |
cat >> scrypt.py <<EOL
${Script}
EOL
答案 0 :(得分:1)
所以问题在于,将include.script的内容替换为$ {Script}的!Include函数并不关心我们是否位于YAML文件中,因此只要有新行,它就可以一直把它们扔到左边。
有两种解决方法。首先,我们可以简单地在script.py本身中添加空格,以便当其值替换为$ {Script}时,它们会放置在正确的位置。
我们最终要做的是(因为第一种方法非常hacky并且难以维护)是放弃尝试包含文件的尝试,而intead实际上只是将整个script.py内容粘贴到YAML文件中,即$ {Script}最初的位置。所以结果看起来像这样:
version: 0.2
phases:
install:
commands:
- apt-get update -y
build:
commands:
- git config --global credential.helper '!aws codecommit credential-helper $@'
- git config --global credential.UseHttpPath true
- pip3 install --quiet boto3
- pip3 install --quiet GitPython
- |
cat > script.py <<EOL
import boto3
import git
etc. etc. etc.
EOL
- python script.py