文章目录
- aws(学习笔记第三十八课) codepipeline-build-deploy-github-manual
- 学习内容:
-
- 1. 整体架构
- 2. 代码分析
-
- 2.1 创建`ImageRepo`,并设定给`FargateTaskDef`
- 2.2 创建`CodeBuild project`
- 2.3 对`CodeBuild project`赋予权限(`ECR`的`image repo`)
- 2.4 生成`lambda`函数触发`codebuild`的首次执行
- 2.5 创建`vpc`和`ecs cluster`
- 2.5 创建`Application Loader Balancer`
- 2.6 创建`fargate service`
- 2.6.1 创建`fargate service`
- 2.6.1 在`fargate service`上进行`application target group`的`attach`
- 2.7 创建`code pipeline`
- 2.8 创建`code pipeline`
- 3 执行`CDK`
aws(学习笔记第三十八课) codepipeline-build-deploy-github-manual
- 使用
codepipeline-build-deploy
学习内容:
- 使用
codepipeline
,★代码库不采用codecommit
,而是github
- 使用
codebuild
- 使用
codedeploy
1. 整体架构
1.1 代码链接
1.2 全体处理架构
2. 代码分析
2.1 创建ImageRepo
,并设定给FargateTaskDef
# Creates an Elastic Container Registry (ECR) image repository
image_repo = ecr.Repository(self, "ImageRepo")
# Creates a Task Definition for the ECS Fargate service
fargate_task_def = ecs.FargateTaskDefinition(self, "FargateTaskDef")
fargate_task_def.add_container(
"Container",
container_name="web",
image=ecs.ContainerImage.from_ecr_repository(image_repo),
port_mappings=[{
"containerPort": 80}]
)
注意,这里并没有指定具体的image
的URI
以及tag
,这里只是指定了Image Repo(ECR)
。后面会在CodeBuildStage
阶段build
出来docker image
,并且接在CodeDeployStage
阶段将该docker image
部署到Fargate Service
。
2.2 创建CodeBuild project
# CodeBuild project that builds the Docker image
build_image = codebuild.Project(
self, "BuildImage",
build_spec=codebuild.BuildSpec.from_source_filename(
"buildspec.yaml"),
source=codebuild.Source.git_hub(
owner="bufanli", # TODO: Replace with your GitHub username
repo="web_app", # TODO: Replace with your GitHub repository name
branch_or_ref="main",
),
environment=codebuild.BuildEnvironment(
privileged=True
),
environment_variables={
"AWS_ACCOUNT_ID": codebuild.BuildEnvironmentVariable(value=os.getenv('CDK_DEFAULT_ACCOUNT') or ""),
"REGION": codebuild.BuildEnvironmentVariable(value=os.getenv('CDK_DEFAULT_REGION') or ""),
"IMAGE_TAG": codebuild.BuildEnvironmentVariable(value="latest"),
"IMAGE_REPO_NAME": codebuild.BuildEnvironmentVariable(value=image_repo.repository_name),
"REPOSITORY_URI": codebuild.BuildEnvironmentVariable(value=image_repo.repository_uri),
"TASK_DEFINITION_ARN": codebuild.BuildEnvironmentVariable(value=fargate_task_def.task_definition_arn),
"TASK_ROLE_ARN": codebuild.BuildEnvironmentVariable(value=fargate_task_def.task_role.role_arn),
"EXECUTION_ROLE_ARN": codebuild.BuildEnvironmentVariable(value=fargate_task_def.execution_role.role_arn)
}
这里,设定build_spec
文件,在app/buildspec.yml
中,
- 设定
pre_build
登录ecr (Amazon Elastic Container Registry(ECR)
,方便之后的向ecr
进行镜像的登录。commands: - echo Logging in to Amazon ECR... - aws --version - aws ecr get-login-password --region $REGION | docker login --username AWS --password-stdin $AWS_ACCOUNT_ID.dkr.ecr.$REGION.amazonaws.com
- 进行
build
处理
这里的commands: - 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.$REGION.amazonaws.com/$IMAGE_REPO_NAME:$IMAGE