Nexus Repository Manager 3 on Kubernetes
This article shows how to run Nexus Repository Manager 3 on Kubernetes.
1. Prerequisites
-
A working Kubernetes cluster. See Kubernetes on Windows Subsystem for Linux (WSL) 2 using kind and Docker Engine.
2. Create deployment configuration
$ cat <<\EOF > nexus-repository-manager-values.yaml
ingress:
enabled: false
nexus:
env:
- name: NEXUS_CONTEXT (1)
value: nexus (1)
livenessProbe:
path: /nexus (2)
readinessProbe:
path: /nexus (2)
EOF
| 1 | Set the context path for Nexus web server. This helps in routing ingress requests prefixed with this path to Nexus server. |
| 2 | Set probe paths equal to the context path of Nexus server. |
|
We disable the ingress templates that come with Nexus Helm chart, because they use |
3. Deploy
Install Nexus Repository Manager using Helm chart.
$ helm repo add sonatype https://sonatype.github.io/helm3-charts/
$ helm repo update
$ kubectl create namespace "nexus"
$ helm install \
nexus-repository-manager \
sonatype/nexus-repository-manager \
--version 37.3.0 \
--values nexus-repository-manager-values.yaml \
--namespace nexus
Create ingress.
cat <<EOF | kubectl apply -n nexus -f -
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: nexus-repository-manager
spec:
rules:
- http:
paths:
- path: /nexus (1)
pathType: Prefix
backend:
service:
name: nexus-repository-manager
port:
number: 8081
EOF
| 1 | Route requests prefixed with /nexus to Nexus server. This value must be equal to /<nexus-server-context-path>. |
Test ingress.
$ curl -I http://<ingress-host-port>/nexus
HTTP/1.1 302 Found
...
4. Initial setup
Obtain admin password.
POD_NAME=$(kubectl get pods -n nexus -l "app.kubernetes.io/name=nexus-repository-manager,app.kubernetes.io/instance=nexus-repository-manager" -o jsonpath="{.items[0].metadata.name}")
kubectl -n nexus exec -it ${POD_NAME} -- cat /nexus-data/admin.password
Open <ingress-host-port>/nexus in browser and sign in as admin using the password obtained in previous step.
Nexus will prompt you to change the admin password. Set a new password of your choice. In our examples, we will use the password Admin00!.
Nexus will ask if you want to enable anonymous access so that, by default, users can search, browse and download components from repositories without credentials. Because ours is a private Nexus server used for experiments only, we can enable anonymous access.
5. Test
Download an artifact from Maven Central.
curl -fsSLO \
https://search.maven.org/remotecontent?filepath=junit/junit/4.13.2/junit-4.13.2.jar
Try uploading the artifact to Nexus.
curl -v \
-u 'admin:Admin00!' \
-X POST \
'http://<ingress-host-port>/nexus/service/rest/v1/components?repository=maven-releases' \
-F maven2.groupId=junit \
-F maven2.artifactId=junit \
-F maven2.version=4.13.2 \
-F maven2.generate-pom=true \
-F maven2.asset1=@junit-4.13.2.jar \
-F maven2.asset1.extension=jar
rm junit-4.13.2.jar
Try downloading the latest version of the artifact from Nexus.
$ curl -L \
-X GET \
-H "accept: application/json" \
"http://<ingress-host-port>/nexus/service/rest/v1/search/assets/download?sort=version&repository=maven-releases&maven.groupId=junit&maven.artifactId=junit&maven.extension=jar"
-o junit-4.13.2.jar
$ jar tvf junit-4.13.2.jar
0 Sat Feb 13 17:31:36 IST 2021 META-INF/
. . .
Cleanup:
-
Delete the artifact using Nexus web console.
-
rm junit-4.13.2.jar
6. Cleanup
Delete deployment configuration.
$ rm --force --verbose nexus-repository-manager-values.yaml