Nuestro team de especialistas pasados muchos días de trabajo y de juntar de datos, dimos con los datos necesarios, nuestro deseo es que resulte útil para ti en tu trabajo.
Solución:
Cuando crea una compilación de código, puede pasar variables de entorno.
"name": "sample-docker-project",
"source":
"type": "S3",
"location": "codebuild-region-ID-account-ID-input-bucket/DockerSample.zip"
,
"artifacts":
"type": "NO_ARTIFACTS"
,
"environment":
"type": "LINUX_CONTAINER",
"image": "aws/codebuild/docker:17.09.0",
"computeType": "BUILD_GENERAL1_SMALL",
"environmentVariables": [
"name": "AWS_DEFAULT_REGION",
"value": "region-ID"
,
"name": "AWS_ACCOUNT_ID",
"value": "account-ID"
,
"name": "IMAGE_REPO_NAME",
"value": "Amazon-ECR-repo-name"
,
"name": "IMAGE_TAG",
"value": "latest"
]
,
"serviceRole": "arn:aws:iam::account-ID:role/role-name",
"encryptionKey": "arn:aws:kms:region-ID:account-ID:key/key-ID"
Luego, en su buildspec.yml puede referirlos como variables de entorno regulares con $IMAGE_REPO_NOMBRE .
version: 0.2
phases:
pre_build:
commands:
- echo Logging in to Amazon ECR...
- $(aws ecr get-login --no-include-email --region $AWS_DEFAULT_REGION)
build:
commands:
- echo Build started on `date`
- echo Building the Docker image...
- docker build -t $IMAGE_REPO_NAME:$IMAGE_TAG .
- docker tag $IMAGE_REPO_NAME:$IMAGE_TAG $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$IMAGE_REPO_NAME:$IMAGE_TAG
post_build:
commands:
- echo Build completed on `date`
- echo Pushing the Docker image...
- docker push $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$IMAGE_REPO_NAME:$IMAGE_TAG
Lo que no puede hacer es crear solo 1 compilación de código y pasarle variables como un script, por lo que necesita crear 2 compilaciones de código, pero 1 buildspec.yml.
Más información aquí: https://docs.aws.amazon.com/codebuild/latest/userguide/sample-docker.html
Según la documentación, puede utilizar el siguiente formato:
env:
variables:
key: "value"
key: "value"
Otro enfoque será preparar un script y un YAML con todas las variables de configuración necesarias.
El archivo de script yaml_to_envvars.sh (modificado desde aquí https://stackoverflow.com/a/21189044/2275126):
#!/bin/bash
prefix=$2
s='[[:space:]]*' w='[a-zA-Z0-9_]*' fs=$(echo @|tr @ ' 34')
sed -ne "s|^($s):|1|"
-e "s|^($s)($w)$s:$s["'](.*)["']$s$|1$fs2$fs3|p"
-e "s|^($s)($w)$s:$s(.*)$s$|1$fs2$fs3|p" $1 |
awk -F$fs '
indent = length($1)/2;
vname[indent] = $2;
for (i in vname) if (i > indent) delete vname[i]
if (length($3) > 0)
vn=""; for (i=0; i
El archivo YAML configuración.yml:
common:
key1: value1
dev:
key2: value2
test:
key3: value3
y en tu pre_construir sección comandos ejecuta lo siguiente:
- chmod u+x yaml_to_envvars.sh
- ./yaml_to_envvars.sh settings.yml > variables.env
- |-
for NEWVAR in $(cat variables.env); do
export $NEWVAR
done
Entonces tendrá variables disponibles dentro de su buildspec como:
$ echo $conf_common_key1
value1
$ echo $conf_dev_key2
value2
$ echo $conf_test_key3
value3
Reseñas y calificaciones
Si te ha resultado útil este post, agradeceríamos que lo compartas con más entusiastas de la programación de este modo contrubuyes a extender esta información.