GitLab CI/CD (6) AWS Docker Build
GitLab
CI
CD
AWS
Docker
ECR
底下我們要推到 AWS ECR 用到的 yaml 檔
image: docker:19.03.11
variables:
AWS_CONTAINER_PATH: xxxxxx.dkr.ecr.us-east-2.amazonaws.com
AWS_SOURCE_IMAGE_NAME: cicdTest
dockerBuildAWS:
stage: deploy-Docker-Build
script:
- docker run -e AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID -e AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY --rm amazon/aws-cli ecr get-login-password --region us-east-2 | docker login --username AWS --password-stdin $AWS_CONTAINER_PATH
- DOCKER_BUILDKIT=1 docker build . -t $AWS_SOURCE_IMAGE_NAME
- docker tag $AWS_SOURCE_IMAGE_NAME $AWS_CONTAINER_PATH/$AWS_SOURCE_IMAGE_NAME
- docker push $AWS_CONTAINER_PATH/$AWS_SOURCE_IMAGE_NAME
- docker logout $AWS_CONTAINER_PATH
前面我們講 Pipeline 沒有說到 variables 這個關鍵字
這個關鍵字是在 yaml 檔定義變數,可以在整個 yaml 檔裡面取用
方便修改調整
開啟 AWS ECR 的部分我們這邊就不贅述了
這邊只需要 AWS IAM 上面建好一個使用者,擁有 AmazonEC2ContainerRegistryFullAccess / AmazonEC2ContainerServiceFullAccess 的權限
把 IAM 使用者的 Access key ID 跟 Secret access key 存在 environment variables 裡面
分別是 AWS_ACCESS_KEY_ID 跟 AWS_SECRET_ACCESS_KEY
接下來,我們需要使用 Docker 登入 AWS ECR
然後就會遇到問題是,我們要怎樣可以有可以下 aws 指令的環境
既然我們跑在 Docker 環境下,那就來去找找有沒有 AWS 的 image 可以使用
找了一下 Docker hub,可以發現 AWS 官方有 amazon/aws-cli 這一個 image
那我們就直接使用這一個 image 來登入吧
我們來拆解一下 script 第一行的指令
可以分成
docker run \
-e AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID \
-e AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY \
--rm amazon/aws-cli
這一段就是把 AWS_ACCESS_KEY_ID 跟 AWS_SECRET_ACCESS_KEY 放進 amazon/aws-cli image 執行
(第一段 aws) ecr get-login-password --region us-east-2
這一段就要給 amazon/aws-cli 執行的指令(第一段於是在當下環境打了 aws
)
docker login \
--username AWS \
--password-stdin $AWS_CONTAINER_PATH
這一段就是官方說明的 Docker 登入 AWS ECR 指令的第二部分,就不贅述了
接下來就是
Docker Build
Docker Tag
Docker Push
最後記得要
docker logut
docker logut
docker logut
很重要要講三次
跑完你就可以去網站上看到 image 已經推上去了
—- 我是分隔線 —-
如果在過程中遇到 Cannot perform an interactive login from a non TTY device
的錯誤訊息
只要確認輸入的帳號密碼是對的,就可以解決(個人一開始也是被這個搞了很久,才發現 environment variables 沒弄好)
打完收工