Инструменты пользователя

Инструменты сайта


service:nexus

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слеваПредыдущая версия
Следующая версия
Предыдущая версия
service:nexus [12.04.2025 06:57] – [apt] viacheslavservice:nexus [04.09.2025 20:22] (текущий) – [Удаление] viacheslav
Строка 104: Строка 104:
 $cred = 'admin:admin' $cred = 'admin:admin'
  
-$files = (dir $folder -Recurse -File).FullName+# Пути к файлам jar и pom 
 +$files = (dir $folder -Recurse -File -include "*.jar","*.pom").FullName 
 +# Добавить файлы SHA-1, у кого их нет 
 +$files |% { 
 +    if (-not (Test-Path $_)) { 
 +        "Making SHA-1 for $_" 
 +        (Get-FileHash $_ -Algorithm SHA1).hash.tolower() |Out-File ($_ + ".sha1") -Encoding default -NoNewline 
 +    } 
 +
 +# Пути к файлам jar, pom и sha1 
 +$files = (dir $folder -Recurse -File -include "*.jar","*.pom","*.sha1").FullName
  
 +# Закачка со счётчиком
 +$overall = $files.count
 +$c = 1
 foreach ($f in $files) { foreach ($f in $files) {
     $url = $f.Replace("$folder","$repo").Replace('\','/')     $url = $f.Replace("$folder","$repo").Replace('\','/')
 +    "Файл $c из $overall (осталось $($overall - $c))"
     "$f ->`n$url`n"     "$f ->`n$url`n"
     & curl.exe -ksu $cred -T $f $url     & curl.exe -ksu $cred -T $f $url
 +    $c++
 } }
 </code> </code>
 +
 +Загрузка в snapshot-репозиторий (пример из Teamcity). Формат - ''component-1.0.0-20250901.173542-1.war''
 +<code bash>
 +war_path=$(find /opt/%conf_name%/target -name '*.war')
 +version=$(date +'%%Y%%m%%d.%%H%%M%%S')
 +curl -ku admin:admin -T "$war_path" \
 +"http://k3:8081/repository/repo-snapshot/com/company/example/%conf_name%/1.0.0-SNAPSHOT/%conf_name%-1.0.0-${version}-%build.number%.war"
 +</code>
 +[[https://help.sonatype.com/en/maven-repositories.html#snapshot|Maven repositories - Snapshot]]
 ==== Docker ==== ==== Docker ====
 Предполагается, что Nexus опубликован просто по HTTP и сам запущен в Докере. Предполагается, что Nexus опубликован просто по HTTP и сам запущен в Докере.
Строка 356: Строка 380:
  
 ==== curl ==== ==== curl ====
 +Последняя версия компонента
 +<code bash>
 +& curl.exe -Lvku admin:admin -o "C:\temp\$artifact-$destinationVersion.$ext" \
 +"http://k3:8081/service/rest/v1/search/assets/download?sort=version&repository=repo-snapshot&group=com.company.example&name=${artifact}&extension=${ext}"
 +</code>
 +[[https://help.sonatype.com/en/search-api.html#downloading-the-latest-version-of-an-asset|Downloading the Latest Version of an Asset]]
 +
 Скачивание всего репозитория. В зависимости от типа репозитория (здесь пример для maven-репы), регулярку для sed надо корректировать. Скачивание всего репозитория. В зависимости от типа репозитория (здесь пример для maven-репы), регулярку для sed надо корректировать.
 <code bash> <code bash>
Строка 527: Строка 558:
 ubuntu2204-sec  apt    proxy  http://k3:8081/repository/ubuntu2204-sec  ubuntu2204-sec  apt    proxy  http://k3:8081/repository/ubuntu2204-sec 
 </code> </code>
 +
 +==== Список всех версий артефакта ====
 +Если артефактов много, то нужно учитывать pagination, т. к. все за один запрос не выведутся.
 +
 +Powershell
 +<code powershell>
 +$cred = 'admin:admin'
 +$artifact = 'lunar-flashback-mixins'
 +$ext = 'jar'
 +$report = @()
 +$token = 0
 +$query = "http://k3.workgroup:8081/service/rest/v1/search/assets?maven.artifactId=${artifact}&maven.classifier&maven.extension=${ext}"
 +do {
 +    if ($token -eq 0) {$url = $query}
 +    else {$url = $query + "&continuationToken=${token}"}
 +    $search = curl.exe -X GET -sLu $cred $url |ConvertFrom-Json
 +    $report += $search.items
 +    $token = $search.continuationToken
 +} while ($token)
 +# Вывести список: версия, время загрузки, ссылка
 +$report |select @{n='version';e={$_.maven2.version}},@{n='uploaded';e={$_.lastModified -as [datetime]}},downloadurl |sort uploaded
 +</code>
 +
 +Bash
 +<code bash>
 +#!/bin/bash
 +
 +cred='admin:admin'
 +artifact='lunar-flashback-mixins'
 +ext='jar'
 +token=1
 +query="http://k3.workgroup:8081/service/rest/v1/search/assets?maven.artifactId=${artifact}&maven.classifier&maven.extension=${ext}"
 +# Если токен не обрезать, то будет ошибка "Value too great for base", т. к. число слишком большое
 +while [[ ${token:0:5} -ne "null" ]]; do
 +  case ${token:0:5} in
 +    1) url=$query ;;
 +    *) url=$(echo -n "${query}&continuationToken=${token}") ;;
 +  esac
 +  search=$(curl -X GET -sLu $cred $url)
 +  report+="$(jq -r .items[] <<< $search)"
 +  token=$(jq -r .continuationToken <<< $search)
 +done
 +
 +echo "$report"
 +
 +# Вывести список: версия, время загрузки, ссылка
 +jq -r '. | "\(.maven2.version) \(.lastModified) \(.downloadUrl)"' <<< $report
 +</code>
 +https://stackoverflow.com/questions/28164849/using-jq-to-parse-and-display-multiple-fields-in-a-json-serially
 ===== Удаление ===== ===== Удаление =====
 <code powershell> <code powershell>
Строка 535: Строка 615:
 } }
 </code> </code>
 +
 +Удаление старых артефактов (''$report'' из [[nexus#список_всех_версий_артефакта|списка всех версий артефакта]])
 +<code powershell>
 +$selection = $report |select @{n='version';e={$_.maven2.version}},downloadurl |sort uploaded
 +# Здесь из версий 0.0.123 выборка по первой цифре версии патча.
 +# Если последняя версия 0.0.888, будут удалены все версии <= 0.0.699.
 +($selection |group {$_.version -replace '.*\.(\d).*','$1'} |select -SkipLast 2).group |% {
 +    curl.exe -X DELETE -Lu $cred $_.downloadurl
 +    if ($?) {"$($_.version) удалена"}
 +    else {write-host -fore red "Ошибка при удалении $($_.version)"}
 +}
 +</code>
 +
 +==== Удаление старых артефактов, превышающих заданный лимит по количеству ====
 +bash
 +<code bash>
 +#!/bin/bash
 +
 +# Лимит хранимых сборок
 +keep=5
 +
 +echo "### Очистка Nexus от старых сборок ###"
 +assets=($(curl -su admin:admin 'http://k3.workgroup:8081/service/rest/v1/search/assets?repository=maven-snapshots&name=toml&sort=version' |jq -r .items[].downloadUrl |tr ' ' '\n'))
 +to_del="${assets[@]:$keep}"
 +
 +if [[ -n $to_del ]]; then
 +  echo "Удаляются следующие сборки, превышающие лимит $keep:"
 +  basename -a $to_del
 +  for i in $to_del; do
 +    curl -su admin:admin -X DELETE $i
 +  done
 +else
 +echo "Всего сборок в Nexus - ${#assets[@]}, лимит $keep не превышен"
 +fi
 +</code>
 +
 ==== Docker ==== ==== Docker ====
 [[https://support.sonatype.com/hc/en-us/articles/360009696054-How-to-delete-docker-images-from-Nexus-Repository-3|How to delete docker images from Nexus Repository 3]]\\ [[https://support.sonatype.com/hc/en-us/articles/360009696054-How-to-delete-docker-images-from-Nexus-Repository-3|How to delete docker images from Nexus Repository 3]]\\
Строка 642: Строка 758:
  
 предполагаемое решение: https://github.com/sonatype/nexus-public/issues/449 предполагаемое решение: https://github.com/sonatype/nexus-public/issues/449
 +
 +==== Maven не может найти версию из указанного диапазона ====
 +Ошибка при сборке, несмотря на то, что в Нексусе есть версии в указанном диапазоне:
 +<code>
 +OUTPUT> Caused by: org.eclipse.aether.collection.DependencyCollectionException: Failed to collect dependencies at ru.dft.platform:crypto-func:jar:[1.0.0,1.1.0)
 +OUTPUT> Caused by: org.eclipse.aether.resolution.VersionRangeResolutionException: No versions available for ru.dft.platform:crypto-func:jar:[1.0.0,1.1.0) within specified range
 +</code>
 +Если указать точную версию, всё работает.
 +
 +Причина в том, что в Нексусе нет файла ''maven-metadata.xml''. Если его добавить (в корень каталога артефакта, не внутрь каталогов его версий), диапазон начинает работать.
 +
 +<file xml maven-metadata.xml>
 +<metadata modelVersion="1.1.0" class=" FB_FW_ext ProxyPlugin2">
 +  <groupId>ru.dft.platform</groupId>
 +  <artifactId>crypto-func</artifactId>
 +  <versioning>
 +    <latest>1.0.5</latest>
 +    <release>1.0.5</release>
 +    <versions>
 +      <version>1.0.0</version>
 +      <version>1.0.3</version>
 +      <version>1.0.4</version>
 +      <version>1.0.5</version>
 +    </versions>
 +    <lastUpdated>20240706165316</lastUpdated>
 +  </versioning>
 +</metadata>
 +</file>
 ===== Литература ===== ===== Литература =====
  
service/nexus.1744441053.txt.gz · Последнее изменение: viacheslav

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki