Github Actions & Docker实现 CI / CD
1、阿里云容器镜像服务
容器镜像服务 (aliyun.com)
根据步骤新建如下几个实例
1、镜像仓库;
2、命名空间
3、访问凭证(docker login时的密码)
2、Dockerfile
编写对应项目的Dockerfile文件。此处以一个springboot后端以及vue前端为例。
2.1、Springboot
project_name
为项目名,Dockerfile内容如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| FROM maven:3.8.4-openjdk-8-slim AS build
COPY . /usr/src/project_name
WORKDIR /usr/src/project_name
RUN mvn clean package -DskipTests
FROM openjdk:8-jdk-slim
COPY --from=build /usr/src/project_name/target/project_name-*.jar /usr/app/project_name.jar
WORKDIR /usr/app
EXPOSE 8080
ENTRYPOINT ["java","-jar","project_name.jar"]
|
2.2、Vue
project_name
为项目名,Dockerfile内容如下:
因为这里是一个toB的项目,并发性能要求不高,甲方希望尽可能简单化,因此没有使用到 nginx和 k8s的技术。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| FROM node:16
WORKDIR /app
COPY package*.json ./
RUN npm install --registry https://r.cnpmjs.org/
COPY . .
EXPOSE 8888
CMD ["npm", "run", "test"]
|
3、打包镜像
对上述分别编写好的Dockerfile,均按照以下步骤进行镜像build和push
1 2 3
| docker build docker tag docker push
|
此处以阿里云镜像仓库为例:

4、编写.github/worlflows/main.yml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| name: Build and Deploy
on: push: branches: [ master ] pull_request: branches: [ master ]
jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2
- name: Build the Docker image run: | docker version docker login --username=${{ secrets.DOCKER_USERNAME }} --password=${{ secrets.DOCKER_PASSWORD }} registry.cn-shanghai.aliyuncs.com docker build . --file Dockerfile --tag registry.cn-shanghai.aliyuncs.com/springyu/kirinea-admin-backend:2.0 docker push registry.cn-shanghai.aliyuncs.com/springyu/kirinea-admin-backend:2.0
- name: Deploy to Server uses: appleboy/ssh-action@master with: host: ${{ secrets.HOST }} username: ${{ secrets.SSH_USERNAME }} password: ${{ secrets.SSH_PASSWORD }} script: | cd /deploy ./start.sh
|
其中build阶段编译打包镜像,delply阶段到指定服务器运行指定脚本进行pull、run容器。