我正在使用 Bitbucket Pipelines 构建一个 jar 文件并将其部署到 Spring Boot 服务器。
第一步是自动构建默认管道 jar 文件 (
pow-wow-0.0.2-SNAPSHOT.jar
),它成功完成了。
第二步是自定义管道复制jar文件 (
pow-wow-0.0.2-SNAPSHOT.jar
) 到 AWS S3 存储桶,但失败
因为它找不到构建的jar文件。
我有以下内容:
bitbucket-pipelines.yml
image: maven:3.9.0
pipelines:
default:
- parallel:
- step:
name: Build
caches:
- maven
script:
- echo 'Maven Build'
- mvn clean install -Dmaven.test.skip
- echo "$(date +%Y-%m-%d) $BITBUCKET_BUILD_NUMBER $BITBUCKET_COMMIT"
artifacts:
- target/pow-wow-0.0.2-SNAPSHOT.jar
- appspec.yml
custom:
upload-and-deploy-to-uat:
- step:
name: Upload to UAT S3
script:
- echo "Upload to AWS S3 Bucket on UAT $(date +%Y-%m-%d) (powwow-$BITBUCKET_BUILD_NUMBER-$BITBUCKET_COMMIT)"
- pipe: atlassian/aws-code-deploy:1.2.0
variables:
AWS_ACCESS_KEY_ID: $UAT_AWS_ACC_KEY
AWS_SECRET_ACCESS_KEY: $UAT_AWS_SEC_ACC_KEY
AWS_DEFAULT_REGION: $UAT_AWS_DEFAULT_REGION
COMMAND: 'upload'
ZIP_FILE: 'target/pow-wow-0.0.2-SNAPSHOT.zip'
APPLICATION_NAME: 'pow-wow'
S3_BUCKET: ${UAT_S3_BUCKET}
VERSION_LABEL: "powwow-${BITBUCKET_BUILD_NUMBER}-${BITBUCKET_COMMIT}"
- step:
name: Deploy to the UAT Server
script:
- echo "Deploy with AWS CodeDeploy to UAT Application Server $(date +%Y-%m-%d) (powwow-$BITBUCKET_BUILD_NUMBER-$BITBUCKET_COMMIT)"
- pipe: atlassian/aws-code-deploy:1.2.0
variables:
AWS_ACCESS_KEY_ID: $UAT_AWS_ACC_KEY
AWS_SECRET_ACCESS_KEY: $UAT_AWS_SEC_ACC_KEY
AWS_DEFAULT_REGION: $UAT_AWS_DEFAULT_REGION
COMMAND: 'deploy'
APPLICATION_NAME: 'pow-wow'
DEPLOYMENT_GROUP: 'deployment-group'
IGNORE_APPLICATION_STOP_FAILURES: 'true'
FILE_EXISTS_BEHAVIOR: 'OVERWRITE'
WAIT: 'true'
S3_BUCKET: ${UAT_S3_BUCKET}
VERSION_LABEL: 'powwow-${BITBUCKET_BUILD_NUMBER}-${BITBUCKET_COMMIT}'
输出(有错误):
INFO: Uploading target/pow-wow-0.0.2-SNAPSHOT.zip to S3.
Traceback (most recent call last):
File "/pipe.py", line 264, in <module>
pipe.run()
File "/pipe.py", line 254, in run
self.upload_to_s3()
File "/pipe.py", line 230, in upload_to_s3
with open(self.get_variable('ZIP_FILE'), 'rb') as zip_file:
FileNotFoundError: [Errno 2] No such file or directory: 'target/pow-wow-0.0.2-SNAPSHOT.zip'
附注我也尝试将其命名为
.jar
,但出现了相同的错误。
ZIP_FILE: 'target/pow-wow-0.0.2-SNAPSHOT.jar'
appspec.yml
version: 0.0
os: linux
files:
- source: target/pow-wow-0.0.2-SNAPSHOT.jar
destination: /home/jboss/bitbucket/pow-wow/pow-wow
hooks:
BeforeInstall:
- location: scripts/powwow-deploy.sh
错误是正确的,没有这样的文件。在您的管道定义中,您有
default
管道来创建文件。但工件仅保留在该管道运行中。由于您的上传位于自定义管道中,并且必须在不同的管道中运行,因此它们无法访问该文件。
要解决此问题,您需要将上传步骤设置为默认值,或者将构建步骤添加到自定义管道中。请注意,前者不能并行执行上传步骤(这对于当前设置来说没有意义,因为它是唯一的步骤),否则工件将不会出现在上传步骤中。