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

GitLab流水线部署EC2遇AWS credentials重复段错误的解决问询

问题解决:GitLab CI部署EC2时AWS凭证文件重复段错误

问题原因

GitLab CI Runner如果复用运行环境(比如容器、虚拟机),之前部署生成的/root/.aws/credentials文件不会自动清空。每次执行aws configure写入凭证时,会重复添加[default]段,导致Python的configparser解析时抛出DuplicateSectionError。

可行解决方案

方案1:执行认证前清理AWS凭证文件

在每次部署脚本开头,先清空或删除AWS相关配置文件,避免残留内容:

  • 直接删除整个AWS配置目录(简单粗暴):
    rm -rf ~/.aws || true
    mkdir -p ~/.aws
    
  • 仅清空凭证文件(保留其他可能的配置):
    > ~/.aws/credentials && > ~/.aws/config
    
  • 精准删除[default]段(适合需要保留其他配置的场景):
    sed -i '/\[default\]/,/^\[/d' ~/.aws/credentials  # 删除default段及后续到下一个段前的内容
    

方案2:用环境变量传递AWS凭证(推荐)

Ansible和AWS CLI都支持通过环境变量读取认证信息,完全不需要写入本地文件,从根源避免文件残留问题:
在GitLab CI配置中直接定义环境变量:

deploy_job:
  stage: deploy
  variables:
    AWS_ACCESS_KEY_ID: "$AWS_ACCESS_KEY"  # 从GitLab项目变量中读取
    AWS_SECRET_ACCESS_KEY: "$AWS_SECRET_KEY"
    AWS_DEFAULT_REGION: "us-east-1"  # 替换为你的EC2区域
  script:
    - ansible-playbook deploy.yml

错误日志示例

Traceback (most recent call last):
  File "/usr/local/bin/ansible-playbook", line 10, in <module>
    sys.exit(main())
  File "/usr/lib/python3/dist-packages/ansible/cli/playbook.py", line 157, in main
    cli.run()
  ...
  File "/usr/lib/python3.8/configparser.py", line 1064, in add_section
    raise DuplicateSectionError(section)
configparser.DuplicateSectionError: [default]

原CI配置示例及修改

原问题配置(导致重复段)

deploy_job:
  stage: deploy
  script:
    - aws configure set aws_access_key_id $AWS_ACCESS_KEY
    - aws configure set aws_secret_access_key $AWS_SECRET_KEY
    - aws configure set default.region $AWS_REGION
    - ansible-playbook deploy.yml

修改后配置(清理文件方式)

deploy_job:
  stage: deploy
  script:
    - rm -rf ~/.aws || true
    - mkdir -p ~/.aws
    - aws configure set aws_access_key_id $AWS_ACCESS_KEY
    - aws configure set aws_secret_access_key $AWS_SECRET_KEY
    - aws configure set default.region $AWS_REGION
    - ansible-playbook deploy.yml

思路验证

你提出的「清理相关认证信息」思路是正确的,能直接解决重复段问题。但更推荐使用环境变量方案,因为它符合CI/CD流水线的无状态运行原则,减少文件操作带来的潜在问题,同时简化脚本逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 13:50:45