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