如何使用 drone.io 在 Maven 存储库中授权
How to authorize in a maven repository using drone.io
所以我在我的服务器上获得了 self-hosted drone 运行ning 实例以及一个 nexus3 存储库。
现在我有一个 java 项目,应该在每次推送时构建、测试然后部署到存储库中,在我们到达部署部分之前它工作正常。我在插件的官方网站上找到了插件,Maven Auth 它应该根据配置创建一个 settings.xml,它可以工作(使我的管道通过 cat 输出文件的内容并显示有效settings.xml 文件)。
下一步配置为运行
mvn deploy -B -s settings.xml
出于某种原因,maven 不使用 settings.xml 中提供的用户名和密码(服务器总是 returns 未授权 401 错误)
整个.drone.yml:
kind: pipeline
name: default
type: docker
steps:
- name: compile
image: maven:3-jdk-8
commands:
- mvn compile -B -U
when:
event:
- push
- name: test
image: maven:3-jdk-8
commands:
- mvn test -B
when:
event:
- push
- name: authenticate
image: robertstettner/drone-mvn-auth
settings:
servers:
- id: some-id (same in pom.xml distribution repos)
username: username
password:
from_secret: repo_password
- name: deploy_repo
image: maven:3-jdk-8
commands:
- mvn deploy -B -gs settings.xml
when:
event:
- push
为什么这行不通的一些建议太棒了!提前致谢!
编辑 2:
所以我进一步调查并在我的服务器上安装了 mitmproxy 来分析流量(客户端 -> Nginx SSL 终止代理 -> mitmproxy -> 运行ning nexus)。
为了授权显然 maven 使用了一个名为 "Authorization" 的 header。并且内容是 "Basic " + username:password base64 编码。
事实证明,无人机实例发出的请求中的授权 header 内容格式错误。解码后看起来像这样:
Authorization: Basic USERNAME:[object Object]
而不是
Authorization: Basic USERNAME:password
我将尝试绕过
password:
from_secret: repo_password
并希望 settings.xml 文件生成正确
在尝试了多个小时(并失败)后试图让这个插件工作后,我现在决定使用自定义步骤来创建 settings.xml 使用环境变量。
只需将密码 "repo_username" 设置为用户名,将密码 "repo_password" 设置为密码,就可以了。
- name: create settings.xml
image: alpine:latest
environment:
REPO_ID: sytm-nexus
REPO_USERNAME:
from_secret: repo_username
REPO_PASSWORD:
from_secret: repo_password
commands:
- echo '<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 https://maven.apache.org/xsd/settings-1.0.0.xsd"><servers><server><id>'$REPO_ID'</id><username>'$REPO_USERNAME'</username><password>'$REPO_PASSWORD'</password></server></servers></settings>' > settings.xml
编辑:由于该解决方案对我来说太老套了,我创建了自己的无人机插件,可以在 here
中找到
所以我在我的服务器上获得了 self-hosted drone 运行ning 实例以及一个 nexus3 存储库。 现在我有一个 java 项目,应该在每次推送时构建、测试然后部署到存储库中,在我们到达部署部分之前它工作正常。我在插件的官方网站上找到了插件,Maven Auth 它应该根据配置创建一个 settings.xml,它可以工作(使我的管道通过 cat 输出文件的内容并显示有效settings.xml 文件)。 下一步配置为运行
mvn deploy -B -s settings.xml
出于某种原因,maven 不使用 settings.xml 中提供的用户名和密码(服务器总是 returns 未授权 401 错误)
整个.drone.yml:
kind: pipeline
name: default
type: docker
steps:
- name: compile
image: maven:3-jdk-8
commands:
- mvn compile -B -U
when:
event:
- push
- name: test
image: maven:3-jdk-8
commands:
- mvn test -B
when:
event:
- push
- name: authenticate
image: robertstettner/drone-mvn-auth
settings:
servers:
- id: some-id (same in pom.xml distribution repos)
username: username
password:
from_secret: repo_password
- name: deploy_repo
image: maven:3-jdk-8
commands:
- mvn deploy -B -gs settings.xml
when:
event:
- push
为什么这行不通的一些建议太棒了!提前致谢!
编辑 2: 所以我进一步调查并在我的服务器上安装了 mitmproxy 来分析流量(客户端 -> Nginx SSL 终止代理 -> mitmproxy -> 运行ning nexus)。
为了授权显然 maven 使用了一个名为 "Authorization" 的 header。并且内容是 "Basic " + username:password base64 编码。
事实证明,无人机实例发出的请求中的授权 header 内容格式错误。解码后看起来像这样:
Authorization: Basic USERNAME:[object Object]
而不是
Authorization: Basic USERNAME:password
我将尝试绕过
password:
from_secret: repo_password
并希望 settings.xml 文件生成正确
在尝试了多个小时(并失败)后试图让这个插件工作后,我现在决定使用自定义步骤来创建 settings.xml 使用环境变量。 只需将密码 "repo_username" 设置为用户名,将密码 "repo_password" 设置为密码,就可以了。
- name: create settings.xml
image: alpine:latest
environment:
REPO_ID: sytm-nexus
REPO_USERNAME:
from_secret: repo_username
REPO_PASSWORD:
from_secret: repo_password
commands:
- echo '<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 https://maven.apache.org/xsd/settings-1.0.0.xsd"><servers><server><id>'$REPO_ID'</id><username>'$REPO_USERNAME'</username><password>'$REPO_PASSWORD'</password></server></servers></settings>' > settings.xml
编辑:由于该解决方案对我来说太老套了,我创建了自己的无人机插件,可以在 here
中找到