简单来说,我要实现的功能是当某分支提交代码之后,自动拉取代码,自动打镜像,自动推倒AWS服务器

项目前端是Angular,后端API部分是Python

ci脚本与代码平台关系不大,主要靠dockerfile文件

首先根目录下

Circle CI - 前端部分_前端

 文件:

## ====================================================
#
# Angular CircleCI 2.1 configuration file
#
# ====================================================

version: 2.1
orbs:
node: circleci/node@4.8.0 #我这个需要老node版本
jobs:
build-nonprod-web:
working_directory: /home/circleci/xxx #这个根据自己实际情况
executor: node/default
steps:
- checkout:
path: /home/circleci/xxx #这个根据自己实际情况
- setup_remote_docker:
version: 20.10.17
- run: npm install
- run:
command: npm run build
no_output_timeout: 30m #我这build 时间很长 所以用了个时间限制
- run:
name: Install awscli #装aws,可以用orbs
command: |
sudo apt update
sudo apt install python3-venv python3-pip
python3 -m venv venv
. venv/bin/activate
pip install awscli
- run:
name: Build and push Docker image
command: |
eval "docker build -f Dockerfile.nonprod.ca -t $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/groweriq/nonprod/web:build-$CIRCLE_BUILD_NUM . " #这里Dockerfile.nonprod.ca 是我的docker file名,默认的名字可以不指定-f 具体看docker 文档
- run:
name: Push image
command: |
. venv/bin/activate
eval $(aws ecr get-login --region $AWS_DEFAULT_REGION --no-include-email)
eval "docker push $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/xxx:build-$CIRCLE_BUILD_NUM"
eval "docker tag $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/xxx:build-$CIRCLE_BUILD_NUM $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/xxx:latest"
eval "docker push $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/xxx:latest"
workflows:
build_nonprod_web:
jobs:
- build-nonprod-web:
context: xxx_AWS_CONTEXT #circle ci上的context,具体看文档。用来配置变量的
filters:
branches:
only: development-circleci #分支名

主要终点是docker的配置信息,如果你本地docker 镜像能正常build,且能访问,那么问题不大。

我docker 文件只是装了个nginx服务

Circle CI - 前端部分_AWS_02

我build 到dist文件夹下面是/dist/uat,所以我这是这个,具体看自己的。 nginx.conf 同理

基本上这样就能在ci build成功。

我遇到了本地docker 镜像打完之后,刷新404问题,就是nginx conf配置的问题。 有错看日志