version: 8 jobs: - name: Build and Deploy mqtt_power on myagent agentMatcher: name_is("myagent") # 确保 "myagent" 是您 OneDev 中 agent 的确切名称 # 如果 myagent 是通过标签选择的,请使用类似 agentMatcher: has_tag("your-agent-tag") 的形式 jobSecrets: # <-- 添加此部分以声明 Job 需要的 Secrets - name: DB_ROOT_PASSWORD - name: DB_NAME - name: DB_USER - name: DB_PASSWORD - name: MQTT_USER - name: MQTT_PASSWORD steps: - checkout # OneDev 会自动检出与触发事件相关的代码 - group: "Prepare Environment and Build" steps: - shell: "sh" # 或者 powershell -Command,取决于您的 agent 环境 # 如果 agent 是 Windows,并且您希望使用 PowerShell,请将 shell 改为 "powershell" # 并在下面的 commands 中使用 PowerShell 语法 commands: | echo "Running on agent: $ONEDEV_AGENT_NAME" echo "Workspace: $ONEDEV_WORKSPACE" echo "Generating .env file for Docker Compose..." # 使用 @secret:SECRET_NAME@ 语法从 OneDev Job Secrets 获取值 # 确保在 OneDev 项目的 Job Secrets 中定义了这些 secret,并且名称与此处一致 echo "MYSQL_ROOT_PASSWORD=@secret:DB_ROOT_PASSWORD@" > .env echo "MYSQL_DATABASE=@secret:DB_NAME@" >> .env echo "MYSQL_USER=@secret:DB_USER@" >> .env echo "MYSQL_PASSWORD=@secret:DB_PASSWORD@" >> .env echo "SPRING_DATASOURCE_URL=jdbc:mysql://mysql-db:3306/@secret:DB_NAME@?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&useSSL=false" >> .env echo "SPRING_DATASOURCE_USERNAME=@secret:DB_USER@" >> .env echo "SPRING_DATASOURCE_PASSWORD=@secret:DB_PASSWORD@" >> .env echo "SPRING_MQTT_BROKER_HOST=emqx-broker" >> .env # docker-compose 服务名 echo "SPRING_MQTT_BROKER_PORT=1883" >> .env echo "SPRING_MQTT_USERNAME=@secret:MQTT_USER@" >> .env echo "SPRING_MQTT_PASSWORD=@secret:MQTT_PASSWORD@" >> .env # 使用 $ONEDEV_BUILD_NUMBER 保证客户端 ID 唯一性 echo "SPRING_MQTT_CLIENT_ID_BACKEND=springboot-mqtt-client-backend-$ONEDEV_BUILD_NUMBER" >> .env echo "SPRING_MQTT_LOG_CLIENT_ID=springboot-mqtt-log-client-$ONEDEV_BUILD_NUMBER" >> .env echo ".env file generated." # cat .env # 可选: 在构建日志中打印 .env 内容以供调试 echo "Ensuring docker-compose.yml is present..." if [ ! -f docker-compose.yml ]; then echo "ERROR: docker-compose.yml not found in workspace root ($ONEDEV_WORKSPACE/docker-compose.yml)!" exit 1 fi echo "Stopping existing services (if any)..." docker-compose -f docker-compose.yml down --remove-orphans || echo "No services were running or an error occurred during down, continuing..." echo "Building Docker images locally for springboot-app and nextjs-app..." # 确保 docker-compose.yml 中的 build context 指向正确 # 例如: springboot-init-main 和 charging_web_app # 并且服务名称 'springboot-app' 和 'nextjs-app' 与 docker-compose.yml 中的定义一致 docker-compose -f docker-compose.yml build --no-cache springboot-app nextjs-app echo "Starting all services via Docker Compose..." docker-compose -f docker-compose.yml up -d echo "Deployment process finished." docker-compose -f docker-compose.yml ps # 显示正在运行的服务状态 triggers: - type: "BRANCH_UPDATE" # 当分支有代码推送时触发 params: branches: "main,master" # 监听的分支,请根据您的实际主分支名称修改 # paths: # 可选:仅当特定路径下的文件发生变化时才触发 # includes: # - "springboot-init-main/**" # - "charging_web_app/**" # - "docker-compose.yml" # - ".onedev-buildspec.yml"