如何将TeamCity的artifacts文件夹上传到AWS S3存储桶?

时间:2016-04-25 19:21:09

标签: amazon-web-services amazon-s3 teamcity

我正在使用S3来托管静态网站,并且希望能够将TeamCity构建的结果上传到S3存储桶中。

2 个答案:

答案 0 :(得分:3)

有第三方插件:https://github.com/guardian/teamcity-s3-plugin

此外,我建议您在TeamCity跟踪器中观看此请求,因为在某些时候可以提供官方支持:https://youtrack.jetbrains.com/issue/TW-21560

答案 1 :(得分:3)

经过一段时间的努力,找到了解决方案。

使用AWS中的IAM角色启动在EC2实例中托管的TeamCity代理。

设置部署者IAM角色,可以访问S3存储桶并允许TeamCity IAM角色承担它。

然后使用AWS CLI命令将内容上传到存储桶。

示例(Powershell)

步骤1.请求帐户的临时凭证

#-----------------------------
# Get parameters
#-----------------------------
$RoleArn = "%param_deployer_arn%"
$ExternalId = "%param_assume_role_external_id%"
$Region = "%param_region%"
$SessionName = "%param_session_name%"

#-----------------------------
# AWS Authentication - Assume Role
#-----------------------------
$Response = (Use-STSRole -Region $Region -RoleArn $RoleArn -ExternalId $ExternalId -RoleSessionName $SessionName).Credentials
$SecretAccessKey = $Response.SecretAccessKey
$SessionToken = $Response.SessionToken
$AccessKeyId = $Response.AccessKeyId

#-----------------------------
# Set environment variables
#-----------------------------
"##teamcity[setParameter name='env.AWS_SECRET_ACCESS_KEY' value='$SecretAccessKey']"
"##teamcity[setParameter name='env.AWS_SECURITY_TOKEN' value='$SessionToken']"
"##teamcity[setParameter name='env.AWS_ACCESS_KEY_ID' value='$AccessKeyId']"

步骤2.(使用会话令牌和存储在环境变量中的访问密钥访问AWS)

重要提示:需要在TeamCity的不同步骤中完成)

#-----------------------------
# List S3 bucket content
#-----------------------------
aws s3 ls s3://%S3Bucket%