[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-ci-cd-kak-organizovat-deploy-artefaktov-iz-jenkins-v-nexus":3},{"id":4,"slug":5,"topicId":6,"topicSlug":7,"topicName":8,"topicEmoji":9,"question":10,"answer":11,"codeLang":12,"codeSrc":12,"important":12,"commonMistakes":12,"modernUsage":12,"difficulty":13,"tags":14,"related":20,"progress":21,"seo":22},211,"kak-organizovat-deploy-artefaktov-iz-jenkins-v-nexus",6,"ci-cd","CI\u002FCD","🔄","Как организовать деплой артефактов из Jenkins в Nexus?","**Деплой артефактов из Jenkins в Nexus** — это процесс автоматической публикации собранных артефактов (JAR, WAR, Docker-образов) в Nexus Repository Manager из CI\u002FCD пайплайна.\n\n### Способ 1: Maven Deploy (рекомендуемый для Maven-проектов)\n\nСамый простой и идиоматичный способ — использовать `mvn deploy` с `settings.xml`, предоставленным через Config File Provider:\n\n```groovy\npipeline {\n    agent { label 'java17-maven' }\n    stages {\n        stage('Build & Test') {\n            steps { sh 'mvn clean verify' }\n        }\n        stage('Deploy to Nexus') {\n            when { branch 'main' }\n            steps {\n                configFileProvider([configFile(fileId: 'maven-settings-nexus', variable: 'MVN_SETTINGS')]) {\n                    sh 'mvn deploy -DskipTests -s $MVN_SETTINGS'\n                }\n            }\n        }\n    }\n}\n```\n\n### Способ 2: Nexus Artifact Uploader Plugin\n\nПлагин Jenkins, позволяющий загружать артефакты без Maven. Удобен, когда проект собирается не Maven'ом или нужно загрузить произвольные файлы:\n\n\u003Cdetails>\n\u003Csummary>Пример использования Nexus Artifact Uploader\u003C\u002Fsummary>\n\n```groovy\nstage('Upload to Nexus') {\n    steps {\n        nexusArtifactUploader(\n            nexusVersion: 'nexus3',\n            protocol: 'https',\n            nexusUrl: 'nexus.company.com',\n            groupId: 'com.company',\n            version: '1.0.0',\n            repository: 'maven-releases',\n            credentialsId: 'nexus-credentials',\n            artifacts: [\n                [artifactId: 'my-app',\n                 classifier: '',\n                 file: 'target\u002Fmy-app-1.0.0.jar',\n                 type: 'jar'],\n                [artifactId: 'my-app',\n                 classifier: '',\n                 file: 'pom.xml',\n                 type: 'pom']\n            ]\n        )\n    }\n}\n```\n\n\u003C\u002Fdetails>\n\n### Способ 3: Nexus REST API (curl)\n\nНизкоуровневый подход через HTTP API. Максимальная гибкость, не требует плагинов:\n\n```groovy\nstage('Upload via REST API') {\n    steps {\n        withCredentials([usernamePassword(credentialsId: 'nexus-credentials',\n                                         usernameVariable: 'USER',\n                                         passwordVariable: 'PASS')]) {\n            sh \"\"\"\n                curl -v -u ${USER}:${PASS} \\\\\n                    --upload-file target\u002Fmy-app-1.0.0.jar \\\\\n                    'https:\u002F\u002Fnexus.company.com\u002Frepository\u002Fmaven-releases\u002Fcom\u002Fcompany\u002Fmy-app\u002F1.0.0\u002Fmy-app-1.0.0.jar'\n            \"\"\"\n        }\n    }\n}\n```\n\n### Сравнение способов\n\n| Способ | Когда использовать | Плюсы | Минусы |\n|---|---|---|---|\n| `mvn deploy` | Maven-проекты | Идиоматично, POM-метаданные | Только Maven |\n| Nexus Artifact Uploader | Произвольные файлы, не-Maven проекты | Универсальность, UI-конфигурация | Дополнительный плагин |\n| REST API (curl) | Скрипты, автоматизация, не-Java проекты | Нет зависимостей от плагинов | Ручное формирование URL |\n\n### Полный пайплайн с публикацией JAR и Docker-образа\n\n\u003Cdetails>\n\u003Csummary>Jenkinsfile: полный цикл от сборки до публикации\u003C\u002Fsummary>\n\n```groovy\npipeline {\n    agent { label 'java17-maven' }\n\n    environment {\n        VERSION = \"${env.BUILD_NUMBER}\"\n        NEXUS_URL = 'https:\u002F\u002Fnexus.company.com'\n    }\n\n    stages {\n        stage('Build')   { steps { sh 'mvn clean compile' } }\n        stage('Test')    { steps { sh 'mvn test' } }\n        stage('Quality') { steps { sh 'mvn sonar:sonar' } }\n        stage('Package') { steps { sh \"mvn package -DskipTests -Drevision=${VERSION}\" } }\n\n        stage('Publish JAR to Nexus') {\n            when { branch 'main' }\n            steps {\n                configFileProvider([configFile(fileId: 'maven-settings', variable: 'SETTINGS')]) {\n                    sh \"mvn deploy -DskipTests -s \\$SETTINGS -Drevision=${VERSION}\"\n                }\n            }\n        }\n\n        stage('Publish Docker to Nexus') {\n            when { branch 'main' }\n            steps {\n                script {\n                    def img = docker.build(\"nexus.company.com:8083\u002Fmy-app:${VERSION}\")\n                    docker.withRegistry(\"${NEXUS_URL}:8083\", 'nexus-docker-creds') {\n                        img.push()\n                        img.push('latest')\n                    }\n                }\n            }\n        }\n    }\n}\n```\n\n\u003C\u002Fdetails>\n\n### Вывод\n\nДля Maven-проектов рекомендуется `mvn deploy` с Config File Provider — это самый простой и поддерживаемый подход. Для Docker-образов — `docker.withRegistry()`. REST API используется как fallback или для не-Java проектов.\n\n> **На собеседовании:** ключевой вопрос — как передаются credentials при деплое в Nexus. Правильный ответ: через Jenkins Credentials Store и Config File Provider (для `settings.xml`) или `withCredentials` (для REST API). Никогда — хардкодом в Jenkinsfile.","","middle",[15,16,8,17,18,19],"nexus","nexus-artifact-uploader","jenkins","maven-deploy","deploy",[],null,{"title":23,"description":24,"ogTitle":25,"ogDescription":26,"keywords":27,"schemaAnswer":36,"featuredSnippetReady":37},"Как организовать деплой артефактов из Jenkins в Nexus — Gymterview","Три способа публикации артефактов из Jenkins в Nexus: Maven Deploy, Nexus Artifact Uploader Plugin, REST API (curl). Полный пайплайн с JAR и Docker.","Деплой артефактов из Jenkins в Nexus: 3 способа — Gymterview","Maven Deploy, Nexus Artifact Uploader Plugin, REST API. Полный Jenkinsfile с публикацией JAR и Docker-образов в Nexus.",[28,29,30,31,32,33,34,35],"Jenkins Nexus deploy","mvn deploy Jenkins","Nexus Artifact Uploader","nexusArtifactUploader","curl Nexus REST API","configFileProvider","Jenkins Docker Nexus","Java CI\u002FCD","Три способа: Maven Deploy (рекомендуемый — mvn deploy -s settings.xml через configFileProvider), Nexus Artifact Uploader Plugin (nexusArtifactUploader с указанием nexusVersion, repository, credentialsId и списка artifacts), REST API через curl (--upload-file с withCredentials). Полный пайплайн включает Build, Test, Quality, Package, Publish JAR (mvn deploy), Publish Docker (docker.build + docker.withRegistry с Nexus URL и credentials).",true]