kind: pipeline type: exec name: CI-building clone: disable: true environment: GOOS: linux GOARCH: amd64 GOPROXY: https://proxy.golang.com.cn,direct GONOPROXY: gitea.bluettipower.com GOPRIVATE: gitea.bluettipower.com steps: - name: CI environment: GOPROXY: https://proxy.golang.com.cn,direct GONOPROXY: gitea.bluettipower.com GOPRIVATE: gitea.bluettipower.com CGO_ENABLED: 0 GOPATH: /root/go PROJECT_API_NAME: from_secret: PROJECT_API_NAME PROJECT_RPC_NAME: from_secret: PROJECT_RPC_NAME DOMAIN_PREFIX: from_secret: STAGE_DOMAIN_PREFIX command_timeout: 360s commands: - pwd - git config --global url."https://alanal:Alanal126com@gitea.bluettipower.com".insteadOf "https://gitea.bluettipower.com" - cd /bluetti/app_project - | if [ ! -d /bluetti/app_project/${DRONE_REPO_NAME} ]; then git clone https://gitea.bluettipower.com/bluettipower/${DRONE_REPO_NAME}.git ${DRONE_REPO_NAME} fi - cd /bluetti/app_project/${DRONE_REPO_NAME} - git checkout -- . - git pull - git switch ${DRONE_COMMIT_BRANCH} #- git branch --set-upstream-to=origin/${DRONE_COMMIT_BRANCH} ${DRONE_COMMIT_BRANCH} - git pull https://pywee:$${GIT_PWD}@gitea.bluettipower.com/Bluettipower/${DRONE_REPO_NAME}.git - export PATH=$PATH:/usr/local/go/bin - go env - go version - go mod tidy - go build -ldflags="-s -w" -o ./app api/*.go - docker build -f api/Dockerfile -t $${PROJECT_API_NAME}:latest . # - docker tag $${PROJECT_API_NAME}:latest 127.0.0.1:8091/bluetti/$${PROJECT_API_NAME}:${DRONE_COMMIT:0:10} - docker login harbor.bluettipower.com -u bluetti -p cjJXBbkHlvVWH2B # - docker push 127.0.0.1:8091/bluetti/$${PROJECT_API_NAME}:${DRONE_COMMIT:0:10} - docker tag $${PROJECT_API_NAME}:latest harbor.bluettipower.com/bluetti/$${PROJECT_API_NAME}:${DRONE_COMMIT:0:10} - docker push harbor.bluettipower.com/bluetti/$${PROJECT_API_NAME}:${DRONE_COMMIT:0:10} - echo "API构建完成, 你可以通过 docker pull harbor.bluettipower.com/bluetti/$PROJECT_API_NAME:${DRONE_COMMIT:0:10} 获取镜像" - | if [ -d "rpc" ]; then go build -ldflags="-s -w" -o ./rpc_app rpc/*.go docker build -f rpc/Dockerfile -t $${PROJECT_RPC_NAME}:latest . docker tag $${PROJECT_RPC_NAME}:latest harbor.bluettipower.com/bluetti/$${PROJECT_RPC_NAME}:${DRONE_COMMIT:0:10} docker push harbor.bluettipower.com/bluetti/$${PROJECT_RPC_NAME}:${DRONE_COMMIT:0:10} rm -rf ./rpc_app echo "RPC构建完成, 你可以通过 docker pull harbor.bluettipower.com/bluetti/$${PROJECT_RPC_NAME}:${DRONE_COMMIT:0:10} 获取镜像" fi - name: stage-publish environment: PROJECT_API_NAME: from_secret: PROJECT_API_NAME PROJECT_RPC_NAME: from_secret: PROJECT_RPC_NAME DOMAIN_PREFIX: from_secret: STAGE_DOMAIN_PREFIX when: branch: - feature/* - develop commands: - echo 1 $DOMAIN_PREFIX 2 - cd /bluetti/app_project/${DRONE_REPO_NAME} - docker compose down - export DOMAIN_PREFIX=$DOMAIN_PREFIX - export GIT_COMMIT=${DRONE_COMMIT:0:10} - export ENV="" - | if [ -d "rpc" ]; then echo $PROJECT_RPC_NAME 12345 docker tag $PROJECT_RPC_NAME:latest harbor.bluettipower.com/bluetti/$PROJECT_RPC_NAME:${DRONE_COMMIT:0:10} docker push harbor.bluettipower.com/bluetti/$PROJECT_RPC_NAME:${DRONE_COMMIT:0:10} docker images | grep $${PROJECT_RPC_NAME} | awk '{print $3}' | xargs docker rmi -f fi # - docker images | grep $${PROJECT_API_NAME} | awk '{print $3}' | xargs docker rmi -f - docker compose up -d volumes: - name: docker-sock host: path: /var/run/docker.sock trigger: branch: - develop - master - feature/* event: include: - push - merge_request --- kind: pipeline type: docker name: CI-Master-publish clone: disable: true depends_on: - CI-building steps: - name: prod-publish image: appleboy/drone-ssh environment: PROD_DOMAIN_PREFIX: from_secret: PROD_DOMAIN_PREFIX PROJECT_API_NAME: from_secret: PROJECT_API_NAME PROJECT_RPC_NAME: from_secret: PROJECT_RPC_NAME settings: host: from_secret: PROD_HOST_IP username: from_secret: PROD_HOST_NAME password: from_secret: PROD_HOST_PWD port: 22 command_timeout: 360s envs: [PROJECT_API_NAME,PROD_DOMAIN_PREFIX,PROJECT_RPC_NAME] script: - bash - git config --global url."https://alanal:Alanal126com@gitea.bluettipower.com".insteadOf "https://gitea.bluettipower.com" - cd /bluetti/app_project - | if [ ! -d /bluetti/app_project/${DRONE_REPO_NAME} ]; then git clone https://gitea.bluettipower.com/bluettipower/${DRONE_REPO_NAME}.git ${DRONE_REPO_NAME} fi - cd /bluetti/app_project/${DRONE_REPO_NAME} - git pull https://pywee:$${GIT_PWD}@gitea.bluettipower.com/Bluettipower/${DRONE_REPO_NAME}.git # - docker login 127.0.0.1:8091 -u admin -p HarborBluetti - git pull origin - git branch - git fetch origin - git checkout master - export ENV="-prod" - export DOMAIN_PREFIX=$${PROD_DOMAIN_PREFIX} - export GIT_COMMIT=${DRONE_COMMIT:0:10} # - docker compose down # - docker images | grep $${PROJECT_API_NAME} | awk '{print $3}' | xargs docker rmi -f # - docker images | grep $${PROJECT_RPC_NAME} | awk '{print $3}' | xargs docker rmi -f - docker pull harbor.bluettipower.com/bluetti/$PROJECT_API_NAME:${DRONE_COMMIT:0:10} - | if [ -d "rpc" ]; then docker pull harbor.bluettipower.com/bluetti/$PROJECT_RPC_NAME:${DRONE_COMMIT:0:10} fi - docker compose up -d retry: limit: 2 delay: 360s volumes: - name: docker-sock host: path: /var/run/docker.sock trigger: branch: - master event: include: - promote --- kind: pipeline type: docker name: promote/rollback steps: - name: stage-rollback image: appleboy/drone-ssh environment: PROJECT_API_NAME: from_secret: PROJECT_API_NAME PROJECT_RPC_NAME: from_secret: PROJECT_RPC_NAME DOMAIN_PREFIX: from_secret: DOMAIN_PREFIX settings: host: from_secret: STAGE_HOST_IP username: from_secret: STAGE_HOST_NAME password: from_secret: STAGE_HOST_PWD port: 22 command_timeout: 300s envs: [PROJECT_API_NAME,STAGE_DOMAIN_PREFIX,PROJECT_RPC_NAME] script: - cd /bluetti/app_project/${DRONE_REPO_NAME} - export GIT_COMMIT=${DRONE_COMMIT:0:10} - export DOMAIN_PREFIX=$${STAGE_DOMAIN_PREFIX} - export ENV="" - docker compose down - docker compose up -d - echo "版本已经更新到 ${DRONE_COMMIT:0:10}, ${DRONE_COMMIT_MESSAGE}" when: branch: - develop - name: prod-rollback image: appleboy/drone-ssh environment: PROJECT_API_NAME: from_secret: PROJECT_API_NAME PROJECT_RPC_NAME: from_secret: PROJECT_RPC_NAME PROD_DOMAIN_PREFIX: from_secret: PROD_DOMAIN_PREFIX settings: host: from_secret: PROD_HOST_IP username: from_secret: PROD_HOST_NAME password: from_secret: PROD_HOST_PWD port: 22 command_timeout: 300s envs: [PROJECT_API_NAME,PROD_DOMAIN_PREFIX,PROJECT_RPC_NAME] script: - cd /bluetti/app_project/${DRONE_REPO_NAME} - export GIT_COMMIT=${DRONE_COMMIT:0:10} - export DOMAIN_PREFIX=$${PROD_DOMAIN_PREFIX} - export ENV="-prod" - docker compose down - docker compose up -d - echo "版本已经更新到 ${DRONE_COMMIT:0:10}, ${DRONE_COMMIT_MESSAGE}" when: branch: - master volumes: - name: docker-sock host: path: /var/run/docker.sock trigger: event: - rollback --- kind: pipeline type: docker name: CI-notify depends_on: - CI-building clone: disable: true steps: - name: notify image: drillster/drone-email settings: host: smtp.qiye.aliyun.com username: alanal@poweroak.com password: KRLdCsdDGrI8Uko port: 465 from: alanal@poweroak.com when: status: - failure - name: send-dingtalk-notification image: lddsb/drone-dingtalk-message volumes: - name: dingtalk-tpl path: /data settings: token: 95b118a31f95c328b1c5f7f52622997d77b69da9d393b0700fc8eb33ed551713 secret: SECb355ff4ba5b05b5325d4c67d3f6637c75613668c248ad9cc97355fe266fe1b6a # token: 8a47605751760b1b1af660e67c2f39bdf9f83c672a18ab872412e99c78b0e5c0 # secret: SEC0dfa30e4e8acfae69e7bf42b19c2feff5d302d2667de3aa4ba8cff46e867758a type: markdown debug: false tpl: /data/dingtalk_${DRONE_BUILD_EVENT}.tpl tips_title: 后端上线通知 when: status: - success event: - promote - rollback branch: # - develop - master volumes: - name: dingtalk-tpl host: path: /bluetti/drone/data