84 lines
2.4 KiB
YAML
84 lines
2.4 KiB
YAML
stages:
|
|
- build
|
|
- deploy
|
|
|
|
build_image:
|
|
stage: build
|
|
image: docker:26.0.0
|
|
services:
|
|
- name: docker:dind
|
|
tags:
|
|
- gitlab-release-ci
|
|
variables:
|
|
CI_DEBUG_TRACE: "true"
|
|
IMAGE_NAME: "doc_ai"
|
|
|
|
before_script:
|
|
- echo "start build image"
|
|
- docker info || { echo "Docker is not running"; exit 1; }
|
|
- docker ps || { echo "Docker daemon is not available"; exit 1; }
|
|
- echo "$DOCKER_PASSWORD" | docker login --username=$DOCKER_USERNAME --password-stdin $ACR_REGISTRY_URL
|
|
- docker login -u $DOCKER_USERNAME -p $DOCKER_PASSWORD $ACR_REGISTRY_URL
|
|
|
|
script:
|
|
- docker build -t $ACR_REGISTRY_URL/bitwsd/$IMAGE_NAME:${CI_COMMIT_SHA:0:9} .
|
|
- docker push $ACR_REGISTRY_URL/bitwsd/$IMAGE_NAME:${CI_COMMIT_SHA:0:9}
|
|
|
|
only:
|
|
- main
|
|
|
|
deploy_image:
|
|
stage: deploy
|
|
variables:
|
|
PORT: 8024
|
|
IMAGE_NAME: "doc_ai"
|
|
tags:
|
|
- shell-excutor
|
|
script:
|
|
- |
|
|
for host in $DEPLOY_HOSTS; do
|
|
echo "Deploying to $host ..."
|
|
# 通过 SSH 执行远程命令
|
|
ssh $DEPLOY_USER@$host "
|
|
# 停止并删除旧容器(如果存在)
|
|
docker stop $IMAGE_NAME || true
|
|
docker rm $IMAGE_NAME || true
|
|
# 登录容器仓库
|
|
echo \"$DOCKER_PASSWORD\" | docker login --username=$DOCKER_USERNAME --password-stdin $ACR_REGISTRY_URL
|
|
# 拉取新镜像
|
|
docker pull $ACR_REGISTRY_URL/bitwsd/$IMAGE_NAME:${CI_COMMIT_SHA:0:9}
|
|
# 启动新容器
|
|
docker run -d --name $IMAGE_NAME \
|
|
-p $PORT:8024 \
|
|
--restart unless-stopped \
|
|
$ACR_REGISTRY_URL/bitwsd/$IMAGE_NAME:${CI_COMMIT_SHA:0:9}
|
|
"
|
|
echo "Deployed to $host"
|
|
done
|
|
only:
|
|
- main
|
|
|
|
deploy_image_dev:
|
|
stage: deploy
|
|
variables:
|
|
PORT: 8024
|
|
BRANCH: "test"
|
|
APP_NAME: "doc_ai"
|
|
ENV: "dev"
|
|
tags:
|
|
- shell-excutor
|
|
before_script:
|
|
- echo "$DOCKER_PASSWORD" | docker login --username=$DOCKER_USERNAME --password-stdin $ACR_REGISTRY_URL
|
|
- docker login -u $DOCKER_USERNAME -p $DOCKER_PASSWORD $ACR_REGISTRY_URL
|
|
script:
|
|
- echo "Working in $CI_PROJECT_DIR"
|
|
- git config --global --add safe.directory $CI_PROJECT_DIR
|
|
- git pull origin $BRANCH
|
|
- docker stop $APP_NAME || true
|
|
- docker rm $APP_NAME || true
|
|
- docker build -t $APP_NAME .
|
|
- docker run -d --name $APP_NAME -p $PORT:8024 --restart unless-stopped $APP_NAME -env dev
|
|
- echo "Deployed Go binary on Aliyun ECS with ${ENV} environment"
|
|
only:
|
|
- test
|