因此,我在服务器上与nexus3存储库一起运行了drone的自托管实例。现在,我有一个Java项目,应该在每次推送时进行构建,测试和部署,然后将它们部署到存储库中,直到我们进入部署部分为止,它都可以正常工作。我在官方网站上找到了用于插件的插件Maven Auth,该插件可以根据配置创建一个settings.xml,该插件可以正常工作(使我的管道通过cat输出了文件内容,并显示了有效的settings.xml文件)。下一步配置为运行
mvn deploy -B -s settings.xml
由于某种原因,maven不使用settings.xml中提供的用户名和密码(服务器始终返回未经授权的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->运行中的关系)。
显然,maven使用一个称为“ Authorization”的标头。内容为“基本” +用户名:使用base64编码的密码。
结果是,无人机实例发出的请求中的Authorization标头的内容格式不正确。解码后看起来像这样:
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