加载中...
Github Actions + Docker实现CI/CD
发表于:2024-02-01 |

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
# 使用 Maven 官方镜像作为构建环境
FROM maven:3.8.4-openjdk-8-slim AS build
# 复制项目文件到镜像中
COPY . /usr/src/project_name
# 设置工作目录
WORKDIR /usr/src/project_name
# 使用 Maven 构建项目,跳过测试
RUN mvn clean package -DskipTests

# 使用 OpenJDK 8 官方镜像作为运行环境
FROM openjdk:8-jdk-slim
# 将构建产生的 jar 文件复制到镜像中
COPY --from=build /usr/src/project_name/target/project_name-*.jar /usr/app/project_name.jar
# 设置工作目录
WORKDIR /usr/app
# 暴露 8080 端口
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
# 使用带有 Node.js 的 Docker 镜像
FROM node:16

# 设置工作目录
WORKDIR /app

# 复制 package.json 和 package-lock.json (如果存在)
COPY package*.json ./

# 安装项目依赖
RUN npm install --registry https://r.cnpmjs.org/

# 复制项目文件到工作目录
COPY . .

# 暴露容器的 8888 端口
EXPOSE 8888

# 启动 Vue 应用
CMD ["npm", "run", "test"]

3、打包镜像

对上述分别编写好的Dockerfile,均按照以下步骤进行镜像build和push

1
2
3
docker build
docker tag
docker push

此处以阿里云镜像仓库为例:

image-20240201141328591

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容器。

上一篇:
清理docker容器日志
下一篇:
在Ubuntu22.04上部署postgresql&pgvector