dart_frog后端 发版的正确方式

1,339 阅读2分钟

前提

在linux上利用git clone出来的工程进行版本代码同步。如下图:

image.png 这是一个被git管控起来的工程。

发版步骤

当后端代码更新之后,按照如下步骤进行操作,可以将最新代码逻辑部署到服务器

1. git pull

拉最新代码

2. 切换到 dart_frog_server,并且执行 npx prisma generate

它的作用是,构建符合当前平台特有的的数据库查询引擎类:

image.png

3. 执行 dart_frog build生成可执行文件

prisma的坑.png

4. 修改上一步build中的dockerfile文件

将最后的这么几行修改一下,

这是原文:

# Build minimal serving image from AOT-compiled `/server` and required system
# libraries and configuration files stored in `/runtime/` from the build stage.
FROM scratch
COPY --from=build /runtime/ /
COPY --from=build /app/bin/server /app/bin/


# Start server.
CMD ["/app/bin/server"]

这是修改之后:

# # Build minimal serving image from AOT-compiled `/server` and required system
# # libraries and configuration files stored in `/runtime/` from the build stage.
# FROM scratch
# COPY --from=build /runtime/ /
# COPY --from=build /app/bin/server /app/bin/


# Start server.
CMD ["bin/server"]

这是prisma官方的bug

5. 创建/更新 docker镜像

记得先切换到 build目录下: 执行 docker build . -t dart-frog-app

6. 启动docker服务

docker run -i -t -p 8080:8080 dart-frog-app

如果8080端口被占用的话,使用其他端口。

或者找出谁在占用,将它stop。 docker ps , docker stop [进程id]

进一步优化

像是这一整套流程,应该是可以使用 sh脚本来编写逻辑,然后直接执行脚本。后面再研究。

我希望它的整体流程是:

  1. 通过git clone或者pull 指定github上的仓库的指定分支
  2. 执行 npx prisma generate 同步数据库引擎类
  3. 执行 dart_frog build 生成build目录
  4. 修改 build目录中的 dockerfile文件
  5. 生成新的docker镜像 docker build . -t dart-frog-app
  6. 按照名称停止docker服务
  7. 启动刚刚创建的 docker服务

写了个基本的git拉取远程仓库的脚本,但是执行时发现存在如下问题: -bash: ./backend.sh: /bin/bash^M: bad interpreter: No such file or director

查了一下,发现我是从win上将脚本拷贝到linux上,两个系统的换行符貌似不太一样。所以拷贝过去之后必须用如下命令转化一下。

sed -i 's/\r$//' xxx.sh

目前脚本原文如下:

#!/bin/bash

my_echo() {
    echo " "
    echo " "
    echo " "
    echo "[MY_LOG] $1"
}



REPO_DIR="/dartBackend/sh_Test/gitRoot"
BRANCH="master"
GIT_URL="git@github.com:13217300237/dart_frog_server.git"

# Extracting repository name from Git URL
REPO_NAME=$(basename -s .git $GIT_URL)

if [ -d "$REPO_DIR/$REPO_NAME" ]; then
  my_echo " ----> 本地工程已存在,直接拉取..."
  cd "$REPO_DIR/$REPO_NAME"
  git pull origin $BRANCH
else
  my_echo " ----> 首次克隆工程"
  git clone -b $BRANCH $GIT_URL "$REPO_DIR/$REPO_NAME"
  cd "$REPO_DIR/$REPO_NAME"
fi

my_echo " ----> 执行 npx prisma generate"
# 生成引擎类
npx prisma generate
# 先删除该目录
my_echo " ----> 删除 build 目录"
rm -r ./build
# 生成可执行目录
my_echo " ----> 生成 新的 build 目录"
dart_frog build

# 将docker文件进行修改
# 文件路径
FILE_PATH="./build/Dockerfile"

my_echo " ----> 更正 $FILE_PATH 的内容"
# 使用 sed 命令修改指定行的内容
sed -i '25,27d; s/CMD \[\"\/app\/bin\/server\"\]/CMD \[\"bin\/server\"\]/' "$FILE_PATH"

# 生成新的docker镜像
IMAGE_NAME="dart-frog-app"
CONTAINER_NAME="huasihuaiyi_server"

my_echo " ----> 停止并删除现有docker容器"
docker stop $CONTAINER_NAME
docker rm $CONTAINER_NAME

my_echo " ----> 生成新的docker镜像"
cd ./build
docker build . -t $IMAGE_NAME

my_echo " ----> 启动新的docker容器"
docker run --name $CONTAINER_NAME -p 8080:8080 $IMAGE_NAME

my_echo "部署成功....."

目前在自测中。等有了更好的版本再更新上来。