关于FreeBe的项目的CICD方案
大约 2 分钟
关于FreeBe的项目的CICD方案
为了方便开发、测试和运维,这边建议采用两套服务器搭建开发环境和测试环境,采用GitHub作为代码托管,SonarCloud进行代码质量控制,DockerHub作为镜像托管,Git Action作为流水线控制,腾讯云作为服务器。 这样每次开发完成代码更新,测试链接就可以实时展示更新后的产品,方便demo展示和进行测试。 具体的流程如下面的流程图
自动化部署流程
开发环境的自动化部署
- 开发人员进行本地开发,将代码push到GitHub的dev分支
- GitAction监听到push后执行自动化部署脚本
- 编译代码并导出目标文件
- git Action登录dockerHub进行docker镜像构建
- git Action登录腾讯云服务器进行docker镜像拉取及部署
测试环境的自动化部署
和开发环境基本一致,只有dev分支合并到Master分支时进行自动化部署。
测试流程
待定
自动化QA
待定
具体实现相关内容
以freebe的前端代码自动化部署为例。 在项目目录.github/workflows下添加git action流程文件ci.yaml 其中DOCKER_USERNAME、DOCKER_PASSWORD可以在github项目的setting下Secrets创建对应的密钥。
name: GitHub Actions Build and Deploy Demo
on:
push:
branches:
- dev
jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v2
with:
persist-credentials: false
- name: Install and Build //打包
run: |
yarn install
yarn export
- name: Log in to Docker Hub //登录dockerHub
uses: docker/login-action@f054a8b539a109f9f41c372932f1ae047eff08c9
with:
username: ${{ secrets.DOCKER_USERNAME }} //dockerHub的用户名
password: ${{ secrets.DOCKER_PASSWORD }} //dockerHub的密码
- name: Extract metadata (tags, labels) for Docker
id: meta
uses: docker/metadata-action@98669ae865ea3cffbcbaa878cf57c20bbf1c6c38
with:
images: xxx/freebe //dockerHub中的仓库名称
- name: Build and push Docker image //创建docker镜像
uses: docker/build-push-action@ad44023a93711e3deb337508980b4b5e9bcdc5dc
with:
context: .
push: true
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
- name: ssh docker login //登录腾讯云及部署镜像
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.TENCENT_CLOUD_IP }}
username: ${{ secrets.TENCENT_CLOUD_NAME }}
password: ${{ secrets.TENCENT_CLOUD_PASSWORD }}
script: cd ~ && sh deploy.sh ${{ secrets.DOCKER_USERNAME }} ${{ secrets.DOCKER_PASSWORD }}
其中的部署镜像脚本depoy.sh需要放置在腾讯云中,参考内容如下: 其中xxx/freebe 为对应的dockerHub仓库镜像
echo -e "---------docker Login--------"
docker login --username=$1 --password=$2
echo -e "---------docker Stop--------"
docker stop freebe
echo -e "---------docker Rm--------"
docker rm freebe
docker rmi xxx/freebe:dev
echo -e "---------docker Pull--------"
docker pull xxx/freebe:dev
echo -e "---------docker Create and Start--------"
docker run --rm -d -p 80:80 --name freebe xxx/freebe:dev
echo -e "---------deploy Success--------"
项目的根目录下需要添加DockerFile,参考内容如下:
FROM nginx
COPY ./out /usr/share/nginx/html
EXPOSE 80
一个自动化部署的案例请参考:自动化部署案例