如何使用 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

中找到