Skip to main content

A python-based CLI for Sonatype Nexus OSS 3

Project description

nexus3-cli

A python-based command-line interface and API client for Sonatype's Nexus OSS 3.

Features

  1. Compatible with Nexus 3 OSS. It may work with the commercial release, but it's untested.
    1. Nexus versions tested
  2. Python API and command-line support.
  3. Artefact management: list, delete, bulk upload and download.
  4. Repository management:
    1. Create hosted and proxy.
    2. Create apt, bower, docker, maven, npm, nuget, pypi, raw, rubygems, yum.
    3. Content type validation, version and write policy.
    4. Delete.
  5. Groovy script management: list, upload, delete, run.
  6. Clean-up policy management: create, list.
  7. Task management: list, run, show stop.
  8. Security management: realms.
  9. Blob store management: list, show, create, delete, update (API only).

The actions above are performed using the Nexus REST API if the endpoint is available, otherwise a Groovy script is used.

Please note that some Nexus 3 features are not currently supported. Assistance implementing missing support is very welcome. Please have a look at the issues and contribution guidelines.

Installation

The nexus3-cli package is available on PyPi. You can install using pip / pip3:

pip install nexus3-cli

There's also a Docker image with nexus3-cli pre-installed.

Enable Groovy scripts

Some of the functionality in this client was written before the Nexus REST API exposed the necessary endpoints. For this reason, you may need to enable Groovy script execution in your instance.

See the FAQ in this blog post and the example nexus.properties in this project.

If you decide to leave Groovy scripts disabled in your Nexus 3 instance, you need to disable its use in this client. This can be done by editing the ~/.nexus-cli configuration and changing groovy_enabled to false. Alternatively, you can export the NEXUS3_GROOVY_ENABLED=false environment variable.

Usage

Command line

For a quick start, use the sonatype/nexus3 Docker image:

docker run -d --rm -p 127.0.0.1:8081:8081 --name nexus sonatype/nexus3

This container will take a while to start the first time you run it. You can tell when it's available by looking at the Docker instance logs or browsing to http://localhost:8081.

On older versions of the nexus3 Docker image, the default admin password is admin123; on newer versions it's automatically generated and you can find it by running docker exec nexus cat /nexus-data/admin.password.

The login command will store the service URL and your credentials in ~/.nexus-cli (warning: restrictive file permissions are set but the contents are saved in cleartext).

Set up credentials:

$ nexus3 login
Nexus OSS URL (http://localhost:8081):
Nexus admin username (admin):
Nexus admin password (admin123):
Verify server certificate (True):

Configuration saved to /Users/thiago/.nexus-cli

Alternatively, you can define environment variables NEXUS3_PASSWORD, NEXUS3_USERNAME, NEXUS3_URL, NEXUS3_API_VERSION, and NEXUS3_X509_VERIFY.

List repositories:

$ nexus3 repository list
Name              Format   Type     URL
maven-snapshots   maven2   hosted   http://localhost:8081/repository/maven-snapshots
maven-central     maven2   proxy    http://localhost:8081/repository/maven-central
nuget-group       nuget    group    http://localhost:8081/repository/nuget-group
nuget.org-proxy   nuget    proxy    http://localhost:8081/repository/nuget.org-proxy
maven-releases    maven2   hosted   http://localhost:8081/repository/maven-releases
nuget-hosted      nuget    hosted   http://localhost:8081/repository/nuget-hosted
maven-public      maven2   group    http://localhost:8081/repository/maven-public

Create a repository:

nexus3 repository create hosted raw reponame

Do a recursive directory upload:

$ mkdir -p /tmp/some/deep/test/path
$ touch /tmp/some/deep/test/file.txt /tmp/some/deep/test/path/other.txt
$ cd /tmp; nexus3 up some/ reponame/path/
Uploading some/ to reponame/path/
[################################] 2/2 - 00:00:00
Uploaded 2 files to reponame/path/

Nota Bene: nexus3-cli interprets a path ending in / as a directory.

List repository contents:

$ nexus3 ls reponame/path/
path/some/deep/test/path/other.txt
path/some/deep/test/file.txt

For a usage message for commands, subcommands and options, run nexus3 -h. CLI documentation

API

See API documentation.

Development

The automated tests are configured in .gitlab-ci.yml. To run tests locally, install the package with test dependencies and run pytest:

pip install [--user] -e .[test]
pip install [--user] pytest faker
pytest -m 'not integration'

Integration tests require a local Nexus instance listening on 8081/tcp or as configured in ~/.nexus-cli. The configuration file can be created using nexus3 login.

docker run -v $(pwd)/tests/fixtures/nexus-data/etc:/nexus-data/etc -d --rm -p 127.0.0.1:8081:8081 --name nexus sonatype/nexus3
./tests/wait-for-nexus.sh  # the Nexus instance takes a while to be ready
# use the random admin password generated by the Nexus container to login
nexus3 login -U "http://localhost:8081" -u admin -p $(docker exec nexus cat /nexus-data/admin.password) --no-x509_verify
pytest -m integration
docker kill nexus

Nota Bene: if you re-run integration tests without re-creating or cleaning-up the dev Nexus instance, test will fail because some objects created during tests will already exist.

Pull requests are welcome; please see CONTRIBUTING.md.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

nexus3-cli-4.2.1.tar.gz (46.8 kB view details)

Uploaded Source

Built Distribution

nexus3_cli-4.2.1-py3-none-any.whl (71.3 kB view details)

Uploaded Python 3

File details

Details for the file nexus3-cli-4.2.1.tar.gz.

File metadata

  • Download URL: nexus3-cli-4.2.1.tar.gz
  • Upload date:
  • Size: 46.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.0 CPython/3.12.4

File hashes

Hashes for nexus3-cli-4.2.1.tar.gz
Algorithm Hash digest
SHA256 d8250876ee5b54fb11699da792185013e1e28425fbac7b0389d6e61705d73e85
MD5 b6398d35945d7fea620612a3de5c5f54
BLAKE2b-256 7a964b7d071d95499ae5c3b53614caaf4e301daf4e94e0d456ecbc97fb69bf49

See more details on using hashes here.

File details

Details for the file nexus3_cli-4.2.1-py3-none-any.whl.

File metadata

  • Download URL: nexus3_cli-4.2.1-py3-none-any.whl
  • Upload date:
  • Size: 71.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.0 CPython/3.12.4

File hashes

Hashes for nexus3_cli-4.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 c41a164e985f4a4f825d582619aaa5f4680b64f9525ed186033e83d50943302a
MD5 e27b23cb7c3ea68bfdf3f1d8845aa8c3
BLAKE2b-256 69d9202fd9774acc6cee8bae396b24fa523a8f558ee7940588682df4f4456b1d

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page