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.
- Task management: list, run, show stop.
- Security management: realms.
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
NexusConfig
class to keep the service configuration separate from the client. NexusClient
no long accepts configuration keyword arguments; instead it takes aNexusConfig
instance.- Moved all CLI code to the
cli
package and API code to theapi
package. - The
Repository
class 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.upload
to, 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
src
structure.
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.
Filename, size | File type | Python version | Upload date | Hashes |
---|---|---|---|---|
Filename, size nexus3_cli-4.1.0-py3-none-any.whl (71.0 kB) | File type Wheel | Python version py3 | Upload date | Hashes View |
Filename, size nexus3-cli-4.1.0.tar.gz (46.0 kB) | File type Source | Python version None | Upload date | Hashes View |
Hashes for nexus3_cli-4.1.0-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 844a8657b422f9a6cb7c2c48cdb34318794207b65863cf22f07b17cafb3a5d46 |
|
MD5 | 5d37ad5ebc8c9008b96e8ee8478a48e2 |
|
BLAKE2-256 | 7ca60bcc079fc13a56e75e944df810732fc3bcee1862085ae8f6a9910db55bd3 |