前言

云服务的优势在于可以轻松配置各个功能模块的自动化互操作,不同于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角色有访问权限,具体怎么配置这里就先不讲了

Logo

中国智能体开发者社区,聚焦智能体与大模型开发,提供前沿资讯、实用工具链、开源项目及行业案例。通过技术沙龙、开发者大赛等活动,促进经验交流与协作,助力开发者快速构建创新智能应用。

更多推荐