AWS Pipeline+Codebuild+ECR+EKS+公有Gitlab实现提交代码自动触发流水线
前言
云服务的优势在于可以轻松配置各个功能模块的自动化互操作,不同于jenkins整套pipeline都需要编写脚本,aws pipeline可以在图形化界面轻松编排整条流水线各个阶段的操作,可以在流程中穿插好多aws云服务,涵盖安全、自动化、应用部署相关的云服务,满足你对流水线的想象力。
aws codebuild可以实现ci的功能,由于它也是编写声明脚本嵌套linux命令,将应用自动部署至k8s也可以实现,但是它不具备满足pipeline多样化的需求
一、向git仓库上传相关文件
将Dockerfile、源码、k8s 创建POD的yaml以及Codebuild的buildspec.yml文件上传至git仓库
buildspec.yml需放在根命令,该文件作用是在codebuild运行的docker中执行命令,某种程度可以看作jenkins的脚本
version: 0.2
env:
variables:
REPO_URL: "https://gitlab.com/xxxx-group/xxxx-project.git"
BRANCH_NAME: "main"
REGISTRY_DOMAIN: "xxxxx.dkr.ecr.ap-northeast-1.amazonaws.com"
REPO: "spinnaker"
git-credential-helper: true #启用该选项可以实现通过aws集成的git仓库登录程序登录后,自动化克隆仓库内容至本地,无需执行git clone命令
phases:
install:
commands:
- yum install -y awscli
pre_build:
commands:
- echo "Clone repository"
- echo "Generate build tag"
- export
- export BUILD_TAG=$(git rev-parse --short HEAD)
- echo "Build tag:$BUILD_TAG"
- 'sed -i -e "s|<BUILD_TAG>|$BUILD_TAG|g" -e "s|<REPO>|$REPO|g" -e "s|<REGISTRY_DOMAIN>|$REGISTRY_DOMAIN|g" -e "s|<BRANCH_NAME>|$BRANCH_NAME|g" k8s.yaml'
build:
commands:
- echo "Login to ECR"
- "aws ecr get-login-password --region ap-northeast-1 | docker login --username AWS --password-stdin $REGISTRY_DOMAIN" #通过该命令无需密码直接登录ECR,当然在配置build阶段赋予容器的角色需要对ECR有相关操作权限
- echo "Build Docker image"
- docker build -t $REPO:$BUILD_TAG .
- docker tag $REPO:$BUILD_TAG $REGISTRY_DOMAIN/$REPO:$BUILD_TAG
post_build:
commands:
- echo "Push Docker image"
- docker push $REGISTRY_DOMAIN/$REPO:$BUILD_TAG
artifacts: #可以把从git仓库获取相关文件传递给pipeline之后的阶段,
files:
- k8s.yaml #EKS阶段需要通过该yaml通过kubectl生成pod
二、创建ECR私有仓库

三、创建AWS Codebuild
选择默认项目

源提供商选择GitLab,点击管理账户凭证
点击创建新的Gitlab连接,输入连接名称,点击连接到Gitlab,通过Gitlab凭证登录
点击保存
选择gitlab项目存储库,点击其他配置
深度选择Full,clone多级目录

webhook可以取消勾选,配置流水线的话,webhook触发在流水线进行,选默认左侧四项

默认不动,点选其他

勾选特权,超时时间可以根据需求改小一点,Codebuild服务以分钟为单位根据部署时间收费

计算选最低的,规格越高,价格越高,子网选择要注意、docker容器不会被配置公网ip,要选择路由表关联默认路由指向nat网关的子网,也就是私有子网,docker需要与互联网通信,这个没什么说的,同样安全组要选择放行出站流量的

勾选cloudwatch,可以输出docker执行命令的信息,方便排错

四、AWS Pipeline配置
选择构建自定义流水线


源阶段也需要添加gitlab,选择存储库,分支和完整克隆

webhook事件勾选在推送和拉取请求事件上启动管道,事件类型选择推送,筛选条件类型选择分支,并填入分支标签,aws pipeline会自动为gitlab创建webhook

构建阶段选择刚刚创建的codebuild,SourceArtifact代表源阶段的构件,就是git仓库自动克隆的内容,

测试和部署阶段跳过,之后在流水线中添加

在流水线中添加两个阶段,点击编辑

在build阶段之后添加Approved阶段,点击添加操作组

操作提供程序下载手动审核,可以根据需要通过sns主题向审批人发送消息

在Approved阶段后添加Test阶段,操作提供程序选择Amazon EKS

输入构建,默认BuildArtifact,是指从build阶段接受构件文件,构建文件就是git根目录buildspec.yml文件中artifact指定的文件,也就是k8s.yaml,该阶段需要根据这个文件创建pod,部署类型选择kubectl部署,

这里可以填写命名空间,也就是说yaml中可以不需要指定namespace,这个阶段实际上是执行kubectl apply -f xxx.yaml -n namespace 命令,方便一个yaml在多个不同命名空间的环境执行,和配置codebuild道理一样,子网需要选择私有子网,安全组也需要有出站规则,这个阶段生成的部署容器会自动下载kubectl工具,并通过aws eks update-kubeconfig命令自动提升对EKS api server的访问权限,当然EKS api server也要对流水线设置中创建或选择的iam角色有访问权限,具体怎么配置这里就先不讲了




更多推荐


所有评论(0)