编写一个Bash脚本,用于将image推送到使用Terraform创建的ECR存储库中

动机

当我们思考到需要频繁进行「push」操作时,执行命令也变得麻烦起来。

目录结构设计

在Makefile中执行scripts目录下的脚本。
将脚本直接放置在根目录下也不会改变代码。

.
├── Makefile
├── scripts
└── terraform

前提是必须的 (The premise is necessary)

我们需要从Terraform获取ECR存储库的URL。
在这里,我们可以通过terraform output来获取URL。
也可以直接将URL硬编码。

output "region" {
  description = "AWS region"
  value       = var.region
}

output "ecr-user-url" {
  description = "user ECR repository url"
  value       = aws_ecr_repository.user.repository_url
}

程式碼

创建push-image.sh脚本。

#!/bin/bash

# cd from root dir
cd ./terraform

REGION=`terraform output region`
REGION=`sed -e 's/^"//' -e 's/"$//' <<<"$REGION"`

由于Terraform的输出值带有双引号,因此需要将其移除。
在上述代码中,将Terraform的输出值赋给了REGION变量,并且再次将双引号移除后重新赋值。

当准备好所需的变量后,构建、标记和推送图像。
下面的代码是向其中一个微服务user的图像进行推送。

#!/bin/bash

# cd from root dir
cd ./terraform

PRODUCT_NAME=example
REGION=`terraform output region`
REGION=`sed -e 's/^"//' -e 's/"$//' <<<"$REGION"`
ECR_USER_URL=`terraform output ecr-user-url`
ECR_USER_URL=`sed -e 's/^"//' -e 's/"$//' <<<"$ECR_USER_URL"`

# back to root dir
cd ../

aws ecr get-login-password --region $REGION | docker login --username AWS --password-stdin $ECR_USER_URL
docker build . -t $PRODUCT_NAME-user -f ./build/package/docker/user/Dockerfile
docker tag $PRODUCT_NAME-user:latest $ECR_USER_URL
docker push $ECR_USER_URL

なお、aws ecrコマンドを実行するには、.aws/credentialsにアクセスキーなどが必要である。
これがない場合はaws configureで作成しよう。

Dockerfileのファイルパスやタグは適宜書き換えてほしい。

docker loginのusernameはAWSのまま変えてはいけない。
あなたのユーザネームを使うわけではないので注意しよう。

广告
将在 10 秒后关闭
bannerAds