使用 Nexus repo 为 Maven 项目配置 CircleCI

Configure CircleCI for Maven project using Nexus repo

我正在为 java maven 项目使用外部 Nexus 存储库,并且我正在尝试配置 circleCI 配置。起初我需要以某种方式说 CircleCI 以在构建期间查看环境变量以获取凭据。 在 grade 驱动的 java 项目中,没有任何额外的配置一切正常,但在 maven 中它说无法访问 nexus。 有人有这方面的经验吗? 我是第一次配置CircleCI

UPD1:

为了获得授权,我将 usernamepasswordserver urlattributes 的环境变量添加到 CircleCI 组织设置页面的上下文中

我使用 this ORB 并且在那里我找到了我必须用作默认名称的环境变量的名称。

已创建 circleci 配置文件:

version: 2.1

orbs:
  nexus-platform-orb: sonatype/nexus-platform-orb@1.0.28

workflows:
  main:
    jobs:
      - nexus-platform-orb/nexusjob:
          context: MyContext

并且有这个错误:

Caught: java.io.FileNotFoundException: /tmp/workspace (Is a directory)
java.io.FileNotFoundException: /tmp/workspace (Is a directory)
    at NexusPublisher.run(NexusPublisher.groovy:59)

Exited with code exit status 1

但是当我添加command在里面创建文件并使用它时,我遇到了同样的问题。 circleci 正在寻找哪个文件或目录?

UPD1:

我稍微更新了我的配置文件:

version: 2.1

orbs:
  maven: circleci/maven@1.3.0
  nexus-platform-orb: sonatype/nexus-platform-orb@1.0.28

jobs:
  install-nexus:
    executor: nexus-platform-orb/nexus-platform-cli
    steps:
      - checkout
      - nexus-platform-orb/install

workflows:
  main:
    jobs:
      - install-nexus
      - nexus-platform-orb/nexusjob:
          context: MyContext
          workspace: tmp/workspace/
          requires:
            - install-nexus

结果我有一个错误运行这个作业:

/bin/sh: curl: not found

因为命令 nexus-platform-orb/install 包含这一行:

curl -L
      https://groovy.jfrog.io/artifactory/libs-release-local/org/codehaus/groovy/groovy-binary/<<
      parameters.groovy-version >>/groovy-binary-<< parameters.groovy-version
      >>.zip -o apache-groovy-binary.zip

但是添加命令安装 curl 又给我一个错误:

steps:
      - checkout
      - run: apk update && apk add curl curl-dev bash
      - nexus-platform-orb/install
#!/bin/sh -eo pipefail
apk update && apk add curl curl-dev bash
ERROR: Unable to lock database: Permission denied
ERROR: Failed to open apk database: Permission denied

Exited with code exit status 99

而且我不知道如何修复它,因为我找到的唯一方法是将 RUN root 添加到 Dockerfile。但它不起作用。

UPD2:

我花了一个多星期的时间来了解如何修复它并将我的解决方案作为答案发布。 希望它能为某人节省时间。

此问题的解决方法是手动说明用于获取凭据的确切文件。

我的 config.yml 文件最终是这样的:

version: 2.1

orbs:
  maven: circleci/maven@1.3.0

jobs:
  build:
    executor: maven/default
    working_directory: ~/my-project
    steps:
      - checkout
      - restore_cache:
          keys:
            - v1-dependencies-{{ checksum "pom.xml" }}
            - v1-dependencies-
      - run:
          name: Test
          command: |
            mvn -s ./settings.xml clean test
      - save_cache:
          paths:
            - ~/.m2
          key: v1-dependencies-{{ checksum "pom.xml" }}

workflows:
  main:
    jobs:
      - build

我不再需要 nexus 球体了。我使用 maven 球体作为 executor。 添加命令 mvn -s ./settings.xml clean test 到 运行 测试并说明文件 nexus 凭证。

settings.xml 文件:

<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>MYPROJECT</id>
            <username>*****</username>
            <password>*****</password>
        </server>
    </servers>
</settings>

和 link 到 Nexus 我在 pom.xml 文件中添加的存储库:

<repositories>
    <repository>
        <id> MYPROJECT </id>
        <name>*****</name>
        <url>https://nexus.*****/</url>
    </repository>
</repositories>

希望这个案例对某人有所帮助。