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

MaR*_*Bet 7 teamcity amazon-s3 amazon-web-services

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

MaR*_*Bet 5

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

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

设置一个有权访问 S3 存储桶的部署者 IAM 角色,并允许 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']"
Run Code Online (Sandbox Code Playgroud)

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

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

#-----------------------------
# List S3 bucket content
#-----------------------------
aws s3 ls s3://%S3Bucket%
Run Code Online (Sandbox Code Playgroud)

  • 您能展示一下如何在 TeamCity 上执行 CLI 步骤吗? (2认同)

Pav*_*her 4

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

另外,我建议在 TeamCity 跟踪器中关注此请求,因为在某些时候可以获得官方支持:https ://youtrack.jetbrains.com/issue/TW-21560