You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Jenkinsfile中动态获取AWS账号ID用于CloudFormation通知ARN

可行的解决方法

方法1:通过AWS CLI动态获取账号ID

在Jenkins Pipeline中,利用aws sts get-caller-identity命令获取当前凭证对应的AWS账号ID,存入变量后直接引用,无需硬编码。

方式A:全局环境变量定义

修改Pipeline的environment块,添加账号ID的动态获取逻辑:

environment {
    PWD = "/var/lib/jenkins/workspace/${JOB_NAME}"
    AWS_REGION = "us-east-1"
    AWS_DEFAULT_REGION = "us-east-1"
    AWS_MAX_ATTEMPTS = "10"
    AWS_RETRY_MODE = "standard"
    // 动态获取当前AWS账号ID并去除换行符
    ACCOUNT_ID = sh(
        script: "aws sts get-caller-identity --query Account --output text",
        returnStdout: true
    ).trim()
}

之后在cfnUpdate中直接引用该变量:

cfnUpdate (
    stack: "tigo-cognito-${params.ENV}-master",
    url: "https://s3.amazonaws.com/${params.DEPLOYMENT_BUCKET_NAME}/${params.ENV}/infra/master.yml",
    paramsFile: "./infra/params/${params.ENV}/cf-params-master.json",
    timeoutInMinutes:90,
    notificationARNs: ["arn:aws:sns:${AWS_REGION}:${ACCOUNT_ID}:CW-Notifications"]
)

方式B:阶段内临时获取

如果不需要全局变量,可在Update Cloudformation阶段内临时获取账号ID:

stage("Update Cloudformation") {
    steps {
        script {
            def accountId = sh(
                script: "aws sts get-caller-identity --query Account --output text",
                returnStdout: true
            ).trim()
            cfnUpdate (
                stack: "tigo-cognito-${params.ENV}-master",
                url: "https://s3.amazonaws.com/${params.DEPLOYMENT_BUCKET_NAME}/${params.ENV}/infra/master.yml",
                paramsFile: "./infra/params/${params.ENV}/cf-params-master.json",
                timeoutInMinutes:90,
                notificationARNs: ["arn:aws:sns:${AWS_REGION}:${accountId}:CW-Notifications"]
            )
        }
    }
}

注意:确保Jenkins节点已安装AWS CLI,且withAWS块已正确关联目标凭证,保证CLI命令能获取到对应环境的账号ID。

方法2:在CloudFormation模板中直接定义通知ARN

允许修改CloudFormation模板的情况下,使用AWS内置伪参数AWS::AccountId和AWS::Region自动构建ARN,无需在Jenkinsfile中传递该参数:

# 在CloudFormation模板的根节点添加NotificationARNs配置
AWSTemplateFormatVersion: '2010-09-09'
Description: Cognito Master Stack
NotificationARNs:
  - !Sub "arn:aws:sns:${AWS::Region}:${AWS::AccountId}:CW-Notifications"

此时Jenkinsfile的cfnUpdate可以移除notificationARNs参数,由模板自行处理通知配置。

方法3:利用Jenkins AWS插件内置变量

若使用Jenkins官方AWS插件(如aws-credentials),部分版本会自动注入AWS_ACCOUNT_ID环境变量,可直接引用:

notificationARNs: ["arn:aws:sns:${AWS_REGION}:${AWS_ACCOUNT_ID}:CW-Notifications"]

注意:不同插件版本的变量名可能存在差异,需在Jenkins节点上打印环境变量确认可用性。

内容的提问来源于stack exchange,提问作者Aniruddha J

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 20:05:09