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

如何获取Jenkins构建创建的ECS Fargate容器公网IP并输出到控制台

ECS Fargate公网IP查询+Jenkins控制台输出方案

前置要求

  • Jenkins运行节点(或构建Agent)已提前安装AWS CLI
  • Jenkins使用的AWS访问身份(IAM角色/访问密钥)具备以下权限:
    • ecs:ListTasks
    • ecs:DescribeTasks
    • ec2:DescribeNetworkInterfaces
  • Fargate任务已开启公网IP分配,且部署在公有子网下

公网IP查询命令

无jq依赖版本(直接使用AWS CLI内置query参数)

将命令中的你的ECS集群名、你的AWS区域、你的ECS服务名替换为实际值即可直接运行:

export AWS_DEFAULT_REGION=你的AWS区域
ECS_CLUSTER_NAME="你的ECS集群名"
ECS_SERVICE_NAME="你的ECS服务名"

aws ecs describe-tasks --cluster $ECS_CLUSTER_NAME \
--tasks $(aws ecs list-tasks --cluster $ECS_CLUSTER_NAME --service-name $ECS_SERVICE_NAME --desired-status RUNNING --query 'taskArns[*]' --output text) \
--query 'tasks[*].attachments[*].details[?name==`networkInterfaceId`].value' --output text \
| xargs aws ec2 describe-network-interfaces --network-interface-ids \
--query 'NetworkInterfaces[*].Association.PublicIp' --output text

依赖jq的简化版本

如果运行环境已安装jq工具,可以使用以下更易维护的命令:

export AWS_DEFAULT_REGION=你的AWS区域
ECS_CLUSTER_NAME="你的ECS集群名"
ECS_SERVICE_NAME="你的ECS服务名"

aws ecs list-tasks --cluster $ECS_CLUSTER_NAME --service-name $ECS_SERVICE_NAME --desired-status RUNNING \
| jq -r '.taskArns[]' \
| xargs aws ecs describe-tasks --cluster $ECS_CLUSTER_NAME --tasks \
| jq -r '.tasks[].attachments[].details[] | select(.name=="networkInterfaceId") | .value' \
| xargs aws ec2 describe-network-interfaces --network-interface-ids \
| jq -r '.NetworkInterfaces[].Association.PublicIp'

集成到Jenkins流水线输出

Declarative Pipeline 示例

直接在你的现有部署ECS的阶段后,新增以下阶段即可:

pipeline {
    agent any
    environment {
        ECS_CLUSTER_NAME = "替换为你的集群名"
        ECS_SERVICE_NAME = "替换为你的服务名"
        AWS_DEFAULT_REGION = "替换为你的AWS区域"
        // AWS凭证建议存储在Jenkins凭证管理器,此处引用对应凭证ID即可
        AWS_ACCESS_KEY_ID = credentials('aws-access-key-id')
        AWS_SECRET_ACCESS_KEY = credentials('aws-secret-access-key')
    }
    stages {
        // 你原有构建、推送镜像、部署ECS的阶段此处省略
        stage('部署后等待初始化') {
            steps {
                // 等待30秒确保Fargate任务完成启动、分配公网IP
                sleep 30
            }
        }
        stage('输出Fargate公网IP') {
            steps {
                sh '''
                echo "==================== 本次部署服务公网IP ===================="
                aws ecs describe-tasks --cluster $ECS_CLUSTER_NAME \
                --tasks $(aws ecs list-tasks --cluster $ECS_CLUSTER_NAME --service-name $ECS_SERVICE_NAME --desired-status RUNNING --query 'taskArns[*]' --output text) \
                --query 'tasks[*].attachments[*].details[?name==`networkInterfaceId`].value' --output text \
                | xargs aws ec2 describe-network-interfaces --network-interface-ids \
                --query 'NetworkInterfaces[*].Association.PublicIp' --output text
                echo "==========================================================="
                '''
            }
        }
    }
}

自由风格项目配置

直接在构建步骤的「执行shell」模块,追加上述查询命令即可,执行后的IP会直接打印在Jenkins构建控制台中。

注意事项

  • 若服务配置了多副本,上述命令会输出所有运行中任务的公网IP
  • 若查询结果为空,优先检查任务是否开启公网IP分配、所在子网是否为公有子网、任务是否已完全启动
  • 等待时间可根据你的服务启动速度自行调整,避免任务未初始化完成导致查询无结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 16:57:05