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

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


service:nexus

Различия

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

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

Предыдущая версия справа и слеваПредыдущая версия
Следующая версия
Предыдущая версия
service:nexus [04.10.2024 18:16] – [Миграция OrientDB -> H2] viacheslavservice:nexus [07.03.2025 08:51] (текущий) – [Nexus как веб-сервер] viacheslav
Строка 397: Строка 397:
 https://www.steventwheeler.com/java/2018/10/30/migrate-artifactory-to-nexus.html\\ https://www.steventwheeler.com/java/2018/10/30/migrate-artifactory-to-nexus.html\\
 https://github.com/LoadingByte/nexus3-exporter/tree/master\\ https://github.com/LoadingByte/nexus3-exporter/tree/master\\
 +
 +==== Ansible ====
 +<code bash>
 +ansible k3 -m maven_artifact -a "
 +repository_url=http://k3.workgroup:8081/repository/maven-releases/
 +username=admin
 +password=admin
 +artifact_id=lunar-lang
 +group_id=org.foo
 +dest=/tmp/lunar-lang.jar"
 +</code>
  
 ===== Поиск ===== ===== Поиск =====
Строка 429: Строка 440:
 </code> </code>
  
 +==== Получить версию самой последней версии артефакта ====
 +Нужно, чтобы проставить версию в описании компонента при деплое. Надо парсить maven-metadata.xml
 +<code bash>
 +version=$(curl -qu admin:admin http://k3:8081/repository/maven-public/org/foo/lunar-lang/maven-metadata.xml |grep latest)
 +# В версиях встречаются цифры, точки и дефисы
 +sed 's#[^0-9.-]##g' <<< $version
 +1.0.12
 +</code>
 +
 +Это не всегда работает. Можно сначала запросить все версии (важно ''sort=version'' в запросе), а потом выбрать последнюю (первую в списке).
 +<code bash>
 +# curl
 +json=$(curl -qu admin:admin 'http://k3.workgroup:8081/service/rest/v1/search/assets?maven.artifactId=lunar-lang&maven.extension=jar&sort=version' |jq -r .items[0].maven2)
 +
 +jq -r .version <<< $json
 +</code>
 +
 +Ansible
 +<code yaml>
 +- name: Get artifact versions
 +  uri:
 +    url: http://k3.workgroup:8081/service/rest/v1/search/assets?maven.artifactId=lunar-lang&maven.extension=jar&sort=version
 +    user: admin
 +    password: admin
 +    method: GET
 +    force_basic_auth: true
 +    validate_certs: false
 +    body_format: json
 +  register: versions
 +
 +- name: Set variables
 +  set_fact:
 +    artifactId: "{{ versions['json']['items'][0]['maven2']['artifactId'] }}"
 +    extension: "{{ versions['json']['items'][0]['maven2']['extension'] }}"
 +    groupId: "{{ versions['json']['items'][0]['maven2']['groupId'] }}"
 +    version: "{{ versions['json']['items'][0]['maven2']['version'] }}"
 +
 +- name: Display variables
 +  debug:
 +    msg:
 +      - "{{ groupId }}"
 +      - "{{ artifactId }}.{{ extension }}"
 +      - "{{ version }}"
 +
 +# Как вариант - запрос json
 +# - debug:
 +#     msg: "{{ versions.json | json_query('items[0].maven2.version') }}"
 +</code>
 +https://www.reddit.com/r/ansible/comments/y7dh61/trying_to_create_a_variable_from_json/\\
 +
 +==== Список репозиториев ====
 +''ConvertFrom-Json'' с предыдущей командой надо заключать в скобки, иначе ''select'' не сработает.
 +<code bash>
 +(& curl.exe -ku admin:admin http://k3:8081/service/rest/v1/repositories |
 +ConvertFrom-Json) |select name,format,type,url |sort name
 +
 +name            format type   url                                      
 +----            ------ ----   ---                                      
 +docker          docker hosted http://k3:8081/repository/docker         
 +maven-central   maven2 proxy  http://k3:8081/repository/maven-central  
 +maven-public    maven2 group  http://k3:8081/repository/maven-public   
 +maven-releases  maven2 hosted http://k3:8081/repository/maven-releases 
 +maven-snapshots maven2 hosted http://k3:8081/repository/maven-snapshots
 +nuget.org-proxy nuget  proxy  http://k3:8081/repository/nuget.org-proxy
 +nuget-group     nuget  group  http://k3:8081/repository/nuget-group    
 +nuget-hosted    nuget  hosted http://k3:8081/repository/nuget-hosted   
 +pypi            pypi   group  http://k3:8081/repository/pypi           
 +pypi-lib        pypi   hosted http://k3:8081/repository/pypi-lib       
 +test            raw    hosted http://k3:8081/repository/test           
 +ubuntu2204      apt    proxy  http://k3:8081/repository/ubuntu2204     
 +ubuntu2204-sec  apt    proxy  http://k3:8081/repository/ubuntu2204-sec 
 +</code>
 ===== Удаление ===== ===== Удаление =====
 <code powershell> <code powershell>
Строка 465: Строка 548:
 https://github.com/oassuncao/nexus-gitlab-plugin https://github.com/oassuncao/nexus-gitlab-plugin
  
-==== Миграция OrientDB -> H2 ====+==== Миграция OrientDB > H2 ====
 Nexus 3.70 - последняя версия, где поддерживается OrientDB. Чтобы обновить Nexus, нужно сконвертировать OrientDB в H2. Nexus 3.70 - последняя версия, где поддерживается OrientDB. Чтобы обновить Nexus, нужно сконвертировать OrientDB в H2.
 <code bash> <code bash>
Строка 477: Строка 560:
 cd /nexus-data cd /nexus-data
 java -Xmx16G -Xms1G -XX:+UseG1GC -XX:MaxDirectMemorySize=28672M -jar nexus-db-migrator.jar --migration_type=h2 java -Xmx16G -Xms1G -XX:+UseG1GC -XX:MaxDirectMemorySize=28672M -jar nexus-db-migrator.jar --migration_type=h2
 +# На хосте
 +cp backup/nexus.mv.db nexus-data/db/
 +echo "nexus.datastore.enabled=true" >> nexus-data/etc/nexus.properties
 </code> </code>
 https://help.sonatype.com/en/migrating-to-a-new-database.html#migrating-from-orientdb-to-h2-162010\\ https://help.sonatype.com/en/migrating-to-a-new-database.html#migrating-from-orientdb-to-h2-162010\\
 https://f3l1x-io.translate.goog/blog/2024/sonatype-nexus-repository-orientdb-a-h2?_x_tr_sl=auto&_x_tr_tl=ru&_x_tr_hl=ru&_x_tr_pto=wapp&_x_tr_hist=true https://f3l1x-io.translate.goog/blog/2024/sonatype-nexus-repository-orientdb-a-h2?_x_tr_sl=auto&_x_tr_tl=ru&_x_tr_hl=ru&_x_tr_pto=wapp&_x_tr_hist=true
 +
 +==== SSL ====
 +Исходный сертификат с ключом должен быть в формате PCKS12.
 +<code bash>
 +# Если исходник в формате PEM, его надо сконвертировать
 +openssl pkcs12 -export -in cert.pem -out cert.pkcs12
 +
 +# Если исходник - это crt + key, то
 +openssl pkcs12 -export -in cert.crt -inkey private.key -out cert.pkcs12  
 +</code>
 +Если исходник в виде .pfx, то конвертировать ничего не надо.
 +
 +<code bash>
 +# Импортировать сертификат в хранилище ключей jks
 +# Важно: пароль оставить тем же, что и в сертификате
 +# Возможно, потребуется сначала создать каталог <nexus-install-location>/nexus-<version>/etc/ssl
 +keytool -v -importkeystore -srckeystore cert.pkcs12 -srcstoretype PKCS12 \
 +-destkeystore  <nexus-install-location>/nexus-<version>/etc/ssl/keystore.jks -deststoretype JKS
 +
 +nano <nexus-install-location>/sonatype-work/nexus3/etc/nexus.properties
 +# Добавить строку
 +application-port-ssl=443
 +# Раскомментировать строку с nexus-args и добавить туда
 +${jetty.etc}/jetty-https.xml
 +
 +nano <nexus-install-location>/nexus-<version>/etc/jetty/https-config.xml
 +# Заменить password на пароль сертификата (в 3 местах)
 +</code>
 +Перезапустить Nexus.
 +
 +https://www.coveros.com/ssl-on-nexus-3/
 +===== Дополнительно =====
 +==== Nexus как веб-сервер ====
 +Создаётся репозиторий hosted raw, и в его настройках нужно переключить Content Disposition на Inline, чтобы html-файлы отображались непосредственно в браузере, а не скачивались на диск.
 +
 +{{:service:pasted:20250306-071810.png}}
 +
 +
 +===== Проблемы =====
 +==== An error occured saving data. Duplicate key ====
 +Появляется при попытке загрузки после миграции БД с OrientDB на H2.
 +
 +предполагаемое решение: https://github.com/sonatype/nexus-public/issues/449
 ===== Литература ===== ===== Литература =====
  
service/nexus.1728065772.txt.gz · Последнее изменение: 04.10.2024 18:16 — viacheslav

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki