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

Jenkins Docker流水线Maven Deploy至AWS CodeArtifact报401认证失败

容器内Jenkins流水线Maven Deploy到AWS CodeArtifact报401未授权的排查方案

可能的原因及解决方法

1. 环境变量未正确传递给Maven进程

你在Jenkins脚本中定义的CODEARTIFACT_AUTH_TOKEN是Groovy变量,并未暴露给sh执行的shell环境,导致Maven无法读取到该变量,最终使用空密码请求CodeArtifact引发401。

解决方法:
将变量导出为shell环境变量,或通过withEnv传递:

// 方法1:在sh块中导出变量
sh """
export CODEARTIFACT_AUTH_TOKEN=${CODEARTIFACT_AUTH_TOKEN}
mvn --version
mvn deploy -s settings.xml
"""

// 方法2:使用withEnv包裹sh执行
withEnv(["CODEARTIFACT_AUTH_TOKEN=${CODEARTIFACT_AUTH_TOKEN}"]) {
    sh '''
    mvn --version
    mvn deploy -s settings.xml
    '''
}

2. Maven Settings.xml加载优先级或路径问题

你在Dockerfile中将settings.xml放到了/usr/share/maven/ref/,但Jenkinsfile中执行mvn deploy -s settings.xml时,若项目代码中没有该文件,Maven会尝试加载默认路径的配置,可能导致认证配置未生效。

解决方法:

  • 确认项目代码中是否包含正确的settings.xml,或直接指定容器内的配置文件路径:
    mvn deploy -s /usr/share/maven/ref/settings.xml
    
  • 或在Dockerfile中将配置复制到Maven默认加载路径:
    COPY settings.xml /root/.m2/settings.xml
    

3. 挂载的.m2目录覆盖配置或存在权限问题

你在Docker启动参数中挂载了/jenkins/docker/repo:/root/.m2,该目录可能包含旧的settings.xml(未配置CodeArtifact认证),或目录权限导致Maven无法读取正确配置。

解决方法:

  • 暂时移除挂载参数,重新运行流水线,若问题解决则说明挂载目录存在问题:
    agent {
        dockerfile {
            label 'docker'
            // 注释掉挂载行
            // args '-v /jenkins/docker/repo:/root/.m2'
        }
    }
    
  • 检查挂载目录下的settings.xml内容,确保其包含正确的服务器认证配置。

4. AWS CodeArtifact令牌有效性问题

虽然你通过aws codeartifact get-authorization-token生成了令牌,但可能存在令牌截断、过期或权限不足的情况。

解决方法:

  • 在Jenkins日志中确认echo CODEARTIFACT_AUTH_TOKEN输出的令牌完整无换行/空格;
  • 在容器内用curl测试令牌有效性:
    curl -u aws:${CODEARTIFACT_AUTH_TOKEN} https://<your-domain>.d.codeartifact.eu-central-1.amazonaws.com/maven/my-snapshots/
    
    若返回200则令牌有效,否则重新生成令牌并检查AWS CLI命令参数(如domain-owner是否正确)。

5. Maven Deploy插件版本兼容性问题

你使用的maven-deploy-plugin:3.1.1可能存在与AWS CodeArtifact的认证兼容性问题。

解决方法:
在项目pom.xml中升级插件版本:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-deploy-plugin</artifactId>
            <version>3.1.2</version> <!-- 或最新稳定版本 -->
        </plugin>
    </plugins>
</build>

6. IAM用户权限不足

Jenkins使用的AWS-Jenkins-User可能缺少CodeArtifact部署所需的权限,虽然本地正常,但本地可能使用了不同的AWS凭证。

解决方法:
确保该IAM用户拥有以下权限:

  • codeartifact:GetAuthorizationToken
  • codeartifact:PutPackageVersion
  • codeartifact:PutPackageVersionAsset
  • codeartifact:UpdatePackageVersionStatus

可在IAM控制台为用户添加包含上述权限的策略。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 16:34:57