Bitbucket Pipeline构建产物丢失问题求助
解决Bitbucket Pipeline部署Symfony到Azure App Service缺失vendor和Webpack文件的问题
问题根源
你的Pipeline配置里,第二步「Frontend assets」只把public/**作为artifacts传递给部署步骤,第一步生成的vendor目录没有被继续传递,导致部署环节根本没有vendor文件夹。另外,前端构建步骤直接执行yarn add --dev @symfony/webpack-encore不符合常规流程,应该先安装项目已定义的依赖。
具体修复步骤
1. 让vendor目录贯穿全流程
修改第二步的artifacts配置,同时包含vendor/**和public/**,确保第一步生成的vendor能传递到部署步骤:
- step: name: Frontend assets image: node:20.9.0 caches: - node script: - yarn install # 先安装项目依赖,不要直接单独添加encore - yarn run encore production - ls -l $BITBUCKET_CLONE_DIR - echo "Frontend assets build complete" artifacts: - vendor/** # 新增此行,传递vendor目录到下一步 - public/**
2. 验证部署前的文件状态(关键排查步骤)
在部署步骤中添加两行ls命令,提前确认vendor和Webpack生成的文件存在后再打包,方便快速定位问题:
- step: &deploy-production name: Deployment deployment: Production script: - ls -l $BITBUCKET_CLONE_DIR - ls -l $BITBUCKET_CLONE_DIR/vendor # 检查vendor目录是否存在 - ls -l $BITBUCKET_CLONE_DIR/public/build # 检查Webpack构建产物是否存在 - sudo apt-get update - sudo apt-get install zip - zip -r bundle.zip . -x "*.git*" "*.yml" "*.env" # 给排除项加引号,避免空格解析问题 - pipe: atlassian/azure-web-apps-deploy:1.1.0 variables: AZURE_APP_ID: $AZURE_APP_ID AZURE_PASSWORD: $AZURE_PASSWORD AZURE_TENANT_ID: $AZURE_TENANT_ID AZURE_RESOURCE_GROUP: $AZURE_RESOURCE_GROUP AZURE_APP_NAME: 'my-app' ZIP_FILE: 'bundle.zip'
3. 优化Composer安装(可选)
如果你的Symfony项目需要运行安装脚本,可以去掉--no-scripts参数,确保依赖安装环节完整执行:
- composer install --no-interaction --prefer-dist --optimize-autoloader --no-dev
修复后的完整Pipeline配置
pipelines: branches: main: - step: name: Build image: composer:2.6 script: - composer install --no-interaction --prefer-dist --optimize-autoloader --no-dev - ls -l $BITBUCKET_CLONE_DIR - echo "Installing composer dependencies complete" caches: - composer artifacts: - vendor/** - public/** - step: name: Frontend assets image: node:20.9.0 caches: - node script: - yarn install - yarn run encore production - ls -l $BITBUCKET_CLONE_DIR - echo "Frontend assets build complete" artifacts: - vendor/** - public/** - step: &deploy-production name: Deployment deployment: Production script: - ls -l $BITBUCKET_CLONE_DIR - ls -l $BITBUCKET_CLONE_DIR/vendor - ls -l $BITBUCKET_CLONE_DIR/public/build - sudo apt-get update - sudo apt-get install zip - zip -r bundle.zip . -x "*.git*" "*.yml" "*.env" - pipe: atlassian/azure-web-apps-deploy:1.1.0 variables: AZURE_APP_ID: $AZURE_APP_ID AZURE_PASSWORD: $AZURE_PASSWORD AZURE_TENANT_ID: $AZURE_TENANT_ID AZURE_RESOURCE_GROUP: $AZURE_RESOURCE_GROUP AZURE_APP_NAME: 'my-app' ZIP_FILE: 'bundle.zip'
内容的提问来源于stack exchange,提问作者Masinde Muliro
相关产品推荐
相关产品推荐

