Nexus Repository Manager - miwanek/Omami GitHub Wiki

Wprowadzenie - czyli do czego służy Nexus


Wytwarzanie aplikacji potrafi być bardzo złożonym procesem, nad którym pracują liczne zespoły deweloperów. Projekt może wykorzystywać wiele plików źródłowych, bibliotek czy pluginów, często pochodzących ze źródeł zewnętrznych. W celu łatwiejszego zarządzania setkami plików są one zbierane w komponenty, tj. artefakty. Aby każdy z deweloperów miał dostęp do wykorzystywanych w projekcie artefaktów w odpowiedniej wersji, są one utrzymywane w specjalnym binarnym repozytorium (analogicznie jak system kontroli wersji przechowuje pliki źródłowe projektu i ich kolejne wersje). Dodatkowo repozytorium to pozwala na zarządzanie artefaktami, sprawdzanie ich licencji czy wyświetlanie informacji o ich bezpieczeństwie. Przykłady narzędzi dostarczających takich funkcjonalności to m.in. Inedo ProGet, Apache Archiva i Sonatype Nexus Repository Manager.

Nexus jako serwer proxy cachuje artefakty lokalnie na dysku, co pozwala na swobodną pracę deweloperów bez obaw, że przestaną mieć możliwość pobierania artefaktów z zewnątrz, bądź że wykorzystywane przez nich artefakty przestaną być dostępne w sieci.

Konfiguracja Nexusa na serwerze


Aby każdy członek teamu deweloperów wytwarzającego aplikację miał odpowiednie artefakty potrzebne do działania projektu należy skonfigurować Nexusa na odpowiednim serwerze, do którego team ma dostęp. W tym celu warto posiłkować się obszerną dokumentacją dostępną na stronie Sonatype Help.

Pobieramy i rozpakowujemy najnowszą wersję Nexusa (odpowiednią dla naszego systemu operacyjnego) poprzez oficjalną stronę Sonatype lub z poziomu CLI (wszystkie przykładowe komendy konfiguracji poniżej działają pod systemem Linux):

wget https://download.sonatype.com/nexus/3/latest-unix.tar.gz
tar -xvzf nexus-latest-bundle.tar.gz

Tworzymy nowego użytkownika na potrzeby Nexusa (pamiętając by upewnić się, że będzie on mógł uruchomić usługę nexus):

adduser nexus

W pliku bin/nexus.rc przypisujemy stworzonego użytkownika:

run_as_user="nexus"

Następnie tworzymy dowiązanie symboliczne do skryptu startowego $installdir/bin/nexus w folderze /etc/init.d/nexus:

sudo ln -s /opt/nexus-<version>/bin/nexus /etc/init.d/nexus

Przechodzimy do folderu /etc/init.d i uruchamiamy skrypt przy pomocy update-rc.d (podobnym narzędziem, które można wykorzystać jest chkconfig, jednak w przypadku Ubuntu nie jest ono dalej wspierane):

cd /etc/init.d
sudo update-rc.d nexus defaults
sudo service nexus start

Po uruchomieniu usługi możemy sprawdzić czy przebiegło ono pomyślnie:

tail -f /opt/sonatype-work/nexus3/log/nexus.log

Dostęp do Nexusa jest na porcie 8081. Aby dostać się do interfejsu Nexusa i zarządzać artefaktami (będąc na maszynie uruchamiającej usługę) wchodzimy pod adres http://localhost:8081/. Domyślne dane logowania to:

username: admin
password: admin123 

Dodawanie własnych repozytoriów


Po konfiguracji i uruchomieniu Nexusa mamy dostępną listę domyślnych repozytoriów mavenowych (takich jak maven-central czy maven-public). Możemy dodać własne repozytorium, w tym celu wybieramy u góry ekranu Server configuration and administration, a następnie zakładkę Repository -> Repositories. Tam po wciśnięciu Create repository wybieramy typ repozytorium, podajemy jego nazwę oraz dostosowujemy ustawienia.

Wysyłanie plików do repozytorium


Wysyłanie pliku do repozytorium można wykonać dwojako - poprzez interfejs Nexusa z poziomu przeglądarki oraz poprzez skrypt budujący nasz projekt (najpopularniejsze narzędzia budujące takie jak Gradle czy Maven wspierają poprzez różne pluginy publikowanie artefaktów do repozytorium). W tym celu należy zaaplikować dodatkowy plugin (na przykład Maven Plugin lub Maven Publish Plugin dostępne dla Gradle'a) oraz sprecyzować pliki do wysłania wraz z docelowym repozytorium. Dla przykładu dla plugina Maven Publish Plugin należy uzupełnić sekcję publishing:

apply plugin: 'maven-publish'

publishing {
	publications {
		yourPublishName( MavenPublication ) {
			artifact file("<path_to_your_file>")
		}
	}
	repositories {
		repositories {
			maven {
				url = 'http://www.example.com/repository'
				credentials{
					username "root"
					password "root"
				}
			}
		}
	}
}
⚠️ **GitHub.com Fallback** ⚠️