标签: aws-codeartifact

AWS CodeArtifact:mvn部署:部署文件无法部署工件:无法传输工件401未经授权

我在尝试将 java 库 (jar) 发布到 AWS CodeArtifact Maven 存储库时遇到问题。当我尝试发布它时,我收到 HTTP 状态代码 401(未经授权)。这表明我做错了什么,比如缺少 CODEARTIFACT_AUTH_TOKEN 环境变量,或者使用了错误的 aws 凭证/配置文件等。但是 AWS CodeArtifact 非常简单:我们只需要:

  • 生成一个新的 CODEARTIFACT_AUTH_TOKEN 并将其设置为环境变量,
  • 使用 username=aws 和 password=${env.CODEARTIFACT_AUTH_TOKEN} 更新本地 Maven .m2/settings.xml 以指向 AWS CodeArtifact 服务器
  • 确保我们从有权访问 AWS CodeArtifact 域和 Maven 存储库的账户生成该令牌(如果我们无权访问,则会出错)。

...超级简单。然而,当我尝试使用我的设置“mvn部署文件”时,我收到 401 Unauthorized...请参阅下面的完整设置:

我通过 Cloudformation 模板设置了一个 AWS CodeArtifact 域和 Maven 存储库(如果需要,请忽略 NPM 和上游存储库):

AWSTemplateFormatVersion: "2010-09-09"

Description: CodeArtifact Domain, Maven repo, NPM repo, and upsteam repos 

Resources:
  CodeArtifactDomain:
    Type: AWS::CodeArtifact::Domain
    Properties:
      DomainName: mydomain
      PermissionsPolicyDocument:
        Version: 2012-10-17
        Statement:
          - Action:
              - codeartifact:CreateRepository
              - …
Run Code Online (Sandbox Code Playgroud)

amazon-web-services maven http-status-code-401 mvn-repo aws-codeartifact

6
推荐指数
1
解决办法
7534
查看次数

Dependabot 与 AWS CodeArtifact

我尝试将 Dependabot 与 AWS CodeArtifact 结合使用,但不断遇到身份验证问题。

Dependabot 无法对私有包注册表进行身份验证使用了以下私有包注册表并导致更新失败:###-###.d.codeartifact..amazonaws.com/npm/private。

日志:

代理| 2022/06/29 16:52:05 [022] 获取 https://###-###.d.codeartifact.###.amazonaws.com:443/npm/private/hermes-engine 代理 | 2022/06/29 16:52:06 [022] 401 https://###-###.d.codeartifact.###.amazonaws.com:443/npm/private/hermes-engine 代理 | 2022/06/29 16:52:06 [024] 获取 https://###-###.d.codeartifact.###.amazonaws.com:443/npm/private/hermes-engine 代理 | 2022/06/29 16:52:06 [024] 401 https://###-###.d.codeartifact.###.amazonaws.com:443/npm/private/hermes-engine 更新程序 | 信息 <job_408163671> 更新 Hermes-engine 时处理错误:private_source_authentication_failure {:source=>"###-###.d.codeartifact.###.amazonaws.com/npm/private"}

我尝试过使用不同的dependabot.yml配置,例如带有路径的完整 CodeArtifact URL 或使用token而不是用户名和密码。

我的dependabot.yml

version: 2
registries:
  npm-codeartifact:
    type: npm-registry
    url: https://<registry>-<account>.d.codeartifact.<region>.amazonaws.com
    username: aws
    password: ${{secrets.CODEARTIFACT_TOKEN}}

  - package-ecosystem: "npm"
    schedule:
      interval: "daily"
    registries:
      - npm-codeartifact
Run Code Online (Sandbox Code Playgroud)

我应该使用什么来使 dependentabot 与 CodeArtifact …

npm-registry dependabot aws-codeartifact

6
推荐指数
1
解决办法
1585
查看次数

使用 sbt 将工件发布到 AWS CodeArtifact

我正在尝试将工件发布到AWS CodeArtifactusing sbt,但我遇到了一些麻烦;

给定一个sbt项目,运行命令,sbt publish包将上传到存储库,但它仍保持状态Unfinished。AWS CodeArtifact文档说:

未完成:上次尝试发布未完成。目前,只有 Maven 包版本的状态可以为“未完成”。当客户端上传某个包版本的一个或多个资产但没有发布包含该版本的包的 maven-metadata.xml 文件时,可能会发生这种情况。

我使用的是sbt版本1.3.3,我没有使用插件,属性publishMavenStyletrue

我知道sbt-maven-resolver这里是存储库)解决了这个问题,但它似乎是一个“未关注的插件”,而且,使用它我会丢失有关发布过程的所有日志,我不信任它。

有人有同样的问题并以某种方式解决了吗?

publishing amazon-web-services maven sbt aws-codeartifact

5
推荐指数
1
解决办法
3010
查看次数

如何使用 AWS CodeArtifact *within* AWSCodeBuild 中的 Dockerfile

我正在尝试从 aws codebuild 中的 dockerbuild 中的 codeartifact 进行 pip install。

这篇文章并没有完全解决我的问题:https : //docs.aws.amazon.com/codeartifact/latest/ug/using-python-packages-in-codebuild.html

AWS CodeArtifct 的登录在预构建中;在 Docker 上下文之外。

但是我pip install我的 Dockerfile里面(我们从一个私有的 pypi 注册表中提取)。

我该如何做到这一点,而不是做一些可怕的事情,比如~/.config/pip.conf/在预构建中运行 login 命令后将env 变量设置为从读取派生的密码?

amazon-web-services aws-codeartifact

5
推荐指数
2
解决办法
528
查看次数

使用 AWS CodeArtifact 阻止某些公共包

我希望创建一个私有 CodeArtifact PyPI 存储库,其上游连接到公共 PyPI 存储库。私有仓库将存储具有特定前缀的包。

例子:

  • foo.数据库
  • foo.logging

如果从私有存储库请求的版本不可用,我想避免从公共 PyPI 存储库中提取上述包。任何带有foo前缀的包请求都应该被上游存储库阻止。

根据存储库策略文档...

codeartifact:ReadFromRepository 操作只能在存储库资源上使用。您不能将程序包的 Amazon 资源名称 (ARN) 作为资源,并使用 codeartifact:ReadFromRepository 作为允许对存储库中的程序包子集进行读取访问的操作。给定主体可以读取存储库中的所有包,也可以不读取任何包。

...我的印象是这是不可能的。有什么办法可以让这个工作吗?Artifactory 使用包含/排除模式来解决这个问题。我希望 CodeArtifact 中有类似的东西。

packaging pypi amazon-web-services aws-codeartifact

5
推荐指数
1
解决办法
830
查看次数

如何使用 Poetry 将 Python 包发布到 CodeArtifact?

尝试将 Poetry 包发布到 AWS CodeArtifact。它支持pipwhich 应该表明它也支持poetry,因为poetry可以上传到 PyPi 服务器。

我已经像这样配置了域:

export CODEARTIFACT_AUTH_TOKEN=`aws codeartifact get-authorization-token --domain XXXX --domain-owner XXXXXXXXXXXX --query authorizationToken --output text`
poetry config repositories.the_aws_repo https://aws:$CODEARTIFACT_AUTH_TOKEN@XXXX-XXXXXXXXXXXX.d.codeartifact.eu-central-1.amazonaws.com/pypi/XXXX/simple/
poetry config pypi-token.the_aws_repo $CODEARTIFACT_AUTH_TOKEN
Run Code Online (Sandbox Code Playgroud)

但是我在尝试发布包时收到 404:

? poetry publish --repository the_aws_repo -vvv

No suitable keyring backend found
No suitable keyring backends were found
Using a plaintext file to store and retrieve credentials
Publishing xxx (0.1.5) to the_aws_repo
 - Uploading xxx-0.1.5-py3-none-any.whl 100%

  Stack trace:

  7  ~/.poetry/lib/poetry/_vendor/py3.8/clikit/console_application.py:131 in run
      129?             parsed_args …
Run Code Online (Sandbox Code Playgroud)

python pip amazon-web-services python-poetry aws-codeartifact

4
推荐指数
2
解决办法
1653
查看次数

具有层缓存的 Docker 构建时秘密

我有一个 Dockerfile,它执行pip installAWS 代码工件中的一个包。安装需要身份验证令牌,因此我当前的方法是在构建脚本中生成动态/秘密存储库 URL,并将其作为构建参数传递到 Docker,这会导致我的 Dockerfile 中出现如下行:

ARG CORE_REPO_URL
ARG CORE_VERSION
RUN pip install -i $CORE_REPO_URL mylib_core==$CORE_VERSION
Run Code Online (Sandbox Code Playgroud)

在命令中使用 ARG 会RUN导致该层永远不会被缓存,因此即使库版本没有更改,该部分每次都会重建。

有没有更好的方法来做到这一点,以便在不更改的情况下使用层缓存CORE_VERSION

也许我应该aws在图像中安装工具链,以便可以在前面的步骤中生成动态存储库 URL(每次使用相同的命令,这样就不需要 ARG 并且希望缓存该层)?这样做的一个缺点是必须将 AWS 凭证放入映像中。docker secrets如果这是唯一的解决方案,我也许可以避免这种情况。

python amazon-web-services docker aws-codeartifact

3
推荐指数
1
解决办法
1861
查看次数

使用 aws codeartifact 和 MVN 构建规范

我一直在寻找一个示例构建规范,其中将 codeartifacts 与 mvn 集成。

这是我的buildpsec,以下是我的疑惑。

  1. 由于我们无法创建一个setting.xml,其中aws告诉我们提及服务器、镜像、配置文件和令牌,因此我们如何将依赖项上传到工件存储库。
  2. 我的目标是仅将生成的 jar 而不是 .m2/* 所有依赖项放入 artefact 存储库中,而且这是一个好方法吗?

buildspec file

version: 0.2 
phases: 
  install: 
    runtime-versions: 
      java: openjdk8 
    commands: 
      - pip3 install awscli --upgrade --user 
      - export CODEARTIFACT_TOKEN=`aws codeartifact get-authorization-token --domain $DOMAIN --domain-owner $ACCOUNT_ID --query authorizationToken --output text` 
  build: 
    commands: 
      - echo Build started on `date` 
      - mvn package 
artifacts: 
  type: zip 
  files: 
    - '/target/launcher-0.0.1-SNAPSHOT.jar' 
cache: 
  paths: 
    - '/root/.m2/**/*'.
Run Code Online (Sandbox Code Playgroud)

amazon-web-services aws-codebuild aws-codeartifact

2
推荐指数
1
解决办法
2160
查看次数

AWS CLI CodeArtifact:为 list-package-versions 子命令的 --package 标志提供什么值

问题陈述

我正在尝试查看 AWS CodeArtifact 中的特定 Maven 包部署了哪些版本。我无法通过 Web GUI 查看任何内容,因此我使用 AWS CLI。

当我运行以下命令时,aws codeartifact list-packages --domain kickingtires --repository kickingtires输出如下所示

包 maven edu.excelsior.api 核心

所以基本上在kickingtires存储库中有一个 Maven 工件:edu.excelsior.api:core。我已经部署了此项目的两个版本,并希望使用 AWS CLI 列出这些版本。

我尝试运行以下排列

aws codeartifact list-package-versions --domain kickingtires --repository kickingtires --format maven --package edu.excelsior.api

aws codeartifact list-package-versions --domain kickingtires --repository kickingtires --format maven --package edu.excelsior.api.core

aws codeartifact list-package-versions --domain kickingtires --repository kickingtires --format maven --package edu.excelsior.api:core

aws codeartifact list-package-versions --domain kickingtires --repository kickingtires --format maven --package "edu.excelsior.api"

aws …
Run Code Online (Sandbox Code Playgroud)

amazon-web-services maven aws-cli aws-codeartifact

2
推荐指数
1
解决办法
890
查看次数