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
- Compatible with Nexus 3 OSS
- Python API and command-line support
- Artefact management: list, delete, bulk upload and download.
- Repository management:
- Create hosted and proxy.
- Create apt, bower, docker, maven, npm, nuget, pypi, raw, rubygems, yum.
- Content type validation, version and write policy.
- Delete.
- Groovy script management: list, upload, delete, run.
- Clean-up policy management: create, list.
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.
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
Nexus will take a little while to start-up 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 plain-text).
Setup CLI 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
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 all commands, subcommands and options, run nexus3 -h.
CLI documentation
API
See API documentation.
Upgrade from 1.0.x
Version 2.0.0 has significant API changes from 1.0.0. In summary:
- Introduce a
NexusConfigclass to keep the service configuration separate from the client. NexusClientno long accepts configuration keyword arguments; instead it takes aNexusConfiginstance.- Moved all CLI code to the
clipackage and API code to theapipackage. - The
Repositoryclass has been rewritten to make it easier to add support for all repositories. Have a look at the manual pages for 2.x linked above. - Repository upload methods have been moved to their own module in
nexuscli.api.repository.uploadto, again, make it easier to support all repositories. - Documentation has been reviewed to include new topics and to automatically include any new classes in the html output that lives in read the docs.
- Unit tests have been refactored and re-organised to more closely match the
srcstructure.
If you need to stay on versoin 1.0.x for some reason, you can pin your
requirements (e.g.: 'nexus3-cli>=1.0.2,<2). Note that I will no longer
support 1.0.x, although I'm happy to review contributions.
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 or as
configured in ~/.nexus-cli. The configuration file can be created using
nexus3 login.
docker run -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
./tests/nexus-login $(docker exec nexus cat /nexus-data/admin.password)
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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file nexus3-cli-3.2.2.tar.gz.
File metadata
- Download URL: nexus3-cli-3.2.2.tar.gz
- Upload date:
- Size: 36.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/49.2.0 requests-toolbelt/0.9.1 tqdm/4.47.0 CPython/3.8.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b992309a5c4d584511d43e704d2b4dbeb53e8aeb92e814a6c9c1beda0500772a
|
|
| MD5 |
57b3e5b07156f30f42ec9e194a33fa24
|
|
| BLAKE2b-256 |
838b2625eaadb321113bb5be4f839f743e922c1c10408f48dc37ed05f52a410f
|
File details
Details for the file nexus3_cli-3.2.2-py3-none-any.whl.
File metadata
- Download URL: nexus3_cli-3.2.2-py3-none-any.whl
- Upload date:
- Size: 48.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/49.2.0 requests-toolbelt/0.9.1 tqdm/4.47.0 CPython/3.8.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
79d08f95c5236822ec8726970a16a5a337a0d22354308ab391996f2fe61c85af
|
|
| MD5 |
38cff0889249dfe8df46519287cab293
|
|
| BLAKE2b-256 |
8f12de31774c6a19ce6cd199bb3d360632e261cbd333b0592b89a6d3533669eb
|