#amazon-web-services #yaml #aws-codepipeline
Вопрос:
Когда мы создавали проект, он был развернут на промежуточной разработке (см. ниже используемый шаблон yaml). Теперь всякий раз, когда мы совершаем это, мы делаем это. Теперь наша проблема в том, что нам нужна среда разработки и производства с ручным этапом утверждения от стадии разработки до выпуска. Мы добавили два этапа, как показано на рисунке ниже (утверждение и предложение).
Может ли кто-нибудь помочь сказать, как я могу изменить свой приведенный ниже код YAML, чтобы сказать :
если $CODEBUILD_BUILD_STAGE == ‘prod’ target_bucket = $S3_BUCKET_PROD, ТО ЕЩЕ target_bucket = $S3_BUCKET_DEV
Это мой код без этапов утверждения и продвижения :
version: 0.2
env:
variables:
S3_BUCKET: "s3-frontend"
phases:
install:
runtime-versions:
nodejs: 10
pre_build:
commands:
- echo Installing source NPM dependencies
- cd project
# Install node dependancies.
- npm install
- npm install -g @angular/cli@"~9.1.1"
build:
commands:
- echo Build started on `date`
- export NODE_OPTIONS=--max_old_space_size=16384
#building
- ng build --aot --configuration=production --build-optimizer --stats-json --output-path=dist/en
post_build:
commands:
#only run frontend update when the build is success
- bash -c "if [ /"$CODEBUILD_BUILD_SUCCEEDING/" == /"0/" ]; then exit 1; fi"
- aws s3 rm s3://$S3_BUCKET --recursive
#generating root language
- aws s3 cp dist/en s3://$S3_BUCKET --recursive
artifacts:
files:
- '**/*'
cache:
paths:
- '/root/.m2/**/*'
- '/root/.npm/**/*'
- 'build/**/*'
- 'node_modules/**/*'
Ответ №1:
Я считаю, что с CodeBuild соглашение заключается в том, чтобы установить var при вызове проекта, поскольку я думаю, что каждая строка представляет собой отдельную оболочку. Так, например, с ведрами в качестве параметров «S3_BUCKET_DEV» и «S3_BUCKET_PROD» в шаблоне cloudformation:
- Name: Dev
ActionTypeId:
Category: Build
Owner: AWS
Provider: CodeBuild
Version: "1"
Configuration:
ProjectName: !Ref DeployProj
EnvironmentVariables: !Sub |
[
{"name":"S3_BUCKET","value":"${S3_BUCKET_DEV}","type":"PLAINTEXT"}
]
InputArtifacts:
- Name: Whatever
RunOrder: 2
- Name: Prod
ActionTypeId:
Category: Build
Owner: AWS
Provider: CodeBuild
Version: "1"
Configuration:
ProjectName: !Ref DeployProj
EnvironmentVariables: !Sub |
[
{"name":"S3_BUCKET","value":"$S3_BUCKET_PROD","type":"PLAINTEXT"}
]
InputArtifacts:
- Name: Whatever
RunOrder: 2
Комментарии:
1. Здравствуйте, извините, что я не ознакомлен с такого рода структурой, которую вы предоставили. Я больше работаю над кодом YAML. Если я правильно понял ваш код, вы запустите сборку кода дважды, в то время как требование состоит в том, чтобы запустить ее один раз. Затем проверьте : если MANUAL_APPROVAL исходит от пользователя, перейдите в PROD
2. Чтобы попытаться уточнить, вы не устанавливаете переменную в buildspec, а передаете переменную в codebuild при выполнении проекта в своем конвейере. Переменная принадлежит Этапу/Действию в определении конвейера кода. Мой пример показывает, как это сделать в Cloudformation. Если вы не используете Cloudformation, вы можете отредактировать определение конвейера в консоли и задать там переменную.