使用 Nexus repo 为 Maven 项目配置 CircleCI
Configure CircleCI for Maven project using Nexus repo
我正在为 java maven 项目使用外部 Nexus
存储库,并且我正在尝试配置 circleCI 配置。起初我需要以某种方式说 CircleCI
以在构建期间查看环境变量以获取凭据。
在 grade
驱动的 java 项目中,没有任何额外的配置一切正常,但在 maven
中它说无法访问 nexus。
有人有这方面的经验吗?
我是第一次配置CircleCI
UPD1:
为了获得授权,我将 username
、password
、server url
和 attributes
的环境变量添加到 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>
希望这个案例对某人有所帮助。
我正在为 java maven 项目使用外部 Nexus
存储库,并且我正在尝试配置 circleCI 配置。起初我需要以某种方式说 CircleCI
以在构建期间查看环境变量以获取凭据。
在 grade
驱动的 java 项目中,没有任何额外的配置一切正常,但在 maven
中它说无法访问 nexus。
有人有这方面的经验吗?
我是第一次配置CircleCI
UPD1:
为了获得授权,我将 username
、password
、server url
和 attributes
的环境变量添加到 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>
希望这个案例对某人有所帮助。