我想将Jenkins的战争部署到云端。
您能否告诉我如何将Jenkins在本地部署到AWS Bean Stalk?
我尝试使用Jenkins后期处理插件将工件复制到S3,但是我收到以下错误:
ERROR: Failed to upload files java.io.IOException: put Destination [bucketName=https:, objectName=/s3-eu-west-1.amazonaws.com/bucketname/test.war]:
com.amazonaws.AmazonClientException: Unable to execute HTTP request: Connect to s3.amazonaws.com/s3.amazonaws.com/ timed out at hudson.plugins.s3.S3Profile.upload(S3Profile.java:85) at hudson.plugins.s3.S3BucketPublisher.perform(S3BucketPublisher.java:143)
答案 0 :(得分:1)
已就此做了一些工作。
基本上,这只是添加一个构建后任务来运行标准命令行部署脚本。
在引用页面中,假设您在Jenkins上安装了构建后任务插件并安装了AWS命令行工具:
第1步
在Jenkins作业配置屏幕中,添加“构建后操作”并选择插件“将工件发布到S3存储桶”,指定源(在我们的示例中,我们使用Maven,因此源是target / .war和destination是您的S3存储桶名称)
第2步
然后,在上面的同一部分(“构建后操作”)中添加一个“构建后任务”(如果你没有它,这是Maven repo中的一个插件)并将其拖到“Publish”下面工件到S3桶“。重要的是我们要确保在继续脚本之前将war文件上传到S3。
在构建后任务部分中,请确保选中“仅在以前的所有步骤都成功后运行脚本”框
在脚本文本区域中,放入脚本的路径以自动部署(在下面的步骤3中描述)。对我们来说,我们这样做:
<path_to_script_file>/deploy.sh "$VERSION_NUMBER" "$VERSION_DESCRIPTION"
$ VERSION_NUMBER和$ VERSION_DESCRIPTION是Jenkins的构建参数,必须在触发部署时指定。这两个变量都将用于AEB部署
第3步
脚本
#!/bin/sh
export AWS_CREDENTIAL_FILE=<path_to_your aws.key file>
export PATH=$PATH:<path to bin file inside the "api" folder inside the AEB Command line tool (A)>
export PATH=$PATH:<path to root folder of s3cmd (B)>
//get the current time and append to the name of .war file that's being deployed.
//This will create a unique identifier for each .war file and allow us to rollback easily.
current_time=$(date +"%Y%m%d%H%M%S")
original_file="app.war"
new_file="app_$current_time.war"
//Rename the deployed war file with the new name.
s3cmd mv "s3://<your S3 bucket>/$original_file" "s3://<your S3 bucket>/$new_file"
//Create application version in AEB and link it with the renamed WAR file
elastic-beanstalk-create-application-version -a "Hoiio App" -l "$1" -d "$2" -s "<your S3 bucket>/$new_file"