我在尝试将 java 库 (jar) 发布到 AWS CodeArtifact Maven 存储库时遇到问题。当我尝试发布它时,我收到 HTTP 状态代码 401(未经授权)。这表明我做错了什么,比如缺少 CODEARTIFACT_AUTH_TOKEN 环境变量,或者使用了错误的 aws 凭证/配置文件等。但是 AWS CodeArtifact 非常简单:我们只需要:
...超级简单。然而,当我尝试使用我的设置“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
我尝试将 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 …
我正在尝试将工件发布到AWS CodeArtifactusing sbt,但我遇到了一些麻烦;
给定一个sbt项目,运行命令,sbt publish包将上传到存储库,但它仍保持状态Unfinished。AWS CodeArtifact文档说:
未完成:上次尝试发布未完成。目前,只有 Maven 包版本的状态可以为“未完成”。当客户端上传某个包版本的一个或多个资产但没有发布包含该版本的包的 maven-metadata.xml 文件时,可能会发生这种情况。
我使用的是sbt版本1.3.3,我没有使用插件,属性publishMavenStyle是true。
我知道sbt-maven-resolver(这里是存储库)解决了这个问题,但它似乎是一个“未关注的插件”,而且,使用它我会丢失有关发布过程的所有日志,我不信任它。
有人有同样的问题并以某种方式解决了吗?
我正在尝试从 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 变量设置为从读取派生的密码?
我希望创建一个私有 CodeArtifact PyPI 存储库,其上游连接到公共 PyPI 存储库。私有仓库将存储具有特定前缀的包。
例子:
如果从私有存储库请求的版本不可用,我想避免从公共 PyPI 存储库中提取上述包。任何带有foo前缀的包请求都应该被上游存储库阻止。
根据存储库策略文档...
codeartifact:ReadFromRepository 操作只能在存储库资源上使用。您不能将程序包的 Amazon 资源名称 (ARN) 作为资源,并使用 codeartifact:ReadFromRepository 作为允许对存储库中的程序包子集进行读取访问的操作。给定主体可以读取存储库中的所有包,也可以不读取任何包。
...我的印象是这是不可能的。有什么办法可以让这个工作吗?Artifactory 使用包含/排除模式来解决这个问题。我希望 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
我有一个 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如果这是唯一的解决方案,我也许可以避免这种情况。
我一直在寻找一个示例构建规范,其中将 codeartifacts 与 mvn 集成。
这是我的buildpsec,以下是我的疑惑。
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) 我正在尝试查看 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) maven ×3
python ×2
aws-cli ×1
dependabot ×1
docker ×1
mvn-repo ×1
npm-registry ×1
packaging ×1
pip ×1
publishing ×1
pypi ×1
sbt ×1