{"id":32495,"date":"2019-10-31T21:47:21","date_gmt":"2019-10-31T18:47:21","guid":{"rendered":"https:\/\/prohoster.info\/blog\/nastrojka-gitlab-ci-dlya-zagruzki-java-proekta-v-maven-central\/"},"modified":"2021-02-01T11:37:22","modified_gmt":"2021-02-01T09:37:22","slug":"nastrojka-gitlab-ci-dlya-zagruzki-java-proekta-v-maven-central","status":"publish","type":"post","link":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/nastrojka-gitlab-ci-dlya-zagruzki-java-proekta-v-maven-central","title":{"rendered":"Einrichten von GitLab CI f\u00fcr das Hochladen von Java-Projekten in Maven Central","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>\u0414\u0430\u043d\u043d\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u0430\u043d\u0430 \u043d\u0430 java \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432, \u0443 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0432\u043e\u0437\u043d\u0438\u043a\u043b\u0430 \u043f\u043e\u0442\u0440\u0435\u0431\u043d\u043e\u0441\u0442\u044c \u0431\u044b\u0441\u0442\u0440\u043e \u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u0442\u044c \u0441\u0432\u043e\u0438 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u044b \u0432 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f\u0445 sonatype \u0438\/\u0438\u043b\u0438 maven central \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c GitLab. \u0412 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043f\u0440\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0443 gitlab-runner, gitlab-ci \u0438 maven-plugin \u0434\u043b\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2 id=\"predposylki\">\u041f\u0440\u0435\u0434\u043f\u043e\u0441\u044b\u043b\u043a\u0438:<\/h2>\n<ul>\n<li>\u0411\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 mvn \u0438 GPG \u043a\u043b\u044e\u0447\u0435\u0439.<\/li>\n<li>\u0411\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0445 CI \u0437\u0430\u0434\u0430\u0447.<\/li>\n<li>\u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442\u043e\u0432 (release\/snapshot) \u0432 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0435 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438.<\/li>\n<li>\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 release-\u0432\u0435\u0440\u0441\u0438\u0439 \u0434\u043b\u044f \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u0432 maven central.<\/li>\n<li>\u041e\u0431\u0449\u0435\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043f\u043e \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0435 \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442\u043e\u0432 \u0432 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439 \u0434\u043b\u044f \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432.<\/li>\n<li>\u041f\u0440\u043e\u0441\u0442\u043e\u0442\u0430 \u0438 \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f.<\/li>\n<\/ul>\n<p><noindex><a rel=\"nofollow\" name=\"toc\"><\/a><\/noindex><\/p>\n<h2 id=\"soderzhanie\">\u0421\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435<\/h2>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"#general_information\">\u041e\u0431\u0449\u0430\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"#gitlab_deploy_project\">\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 deploy \u0440\u043e\u0435\u043a\u0442\u0430 \u0432 GitLab<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"#gitlab_runner\">GitLab Runner<\/a><\/noindex>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"#specific_runner\">Specific Runner<\/a><\/noindex>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"#install_gitlab_runner\">\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 gitlab runner<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"#specific_runner_gpg\">\u0413\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f GPG \u043a\u043b\u044e\u0447\u0435\u0439<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"#specific_runner_maven\">\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 Maven<\/a><\/noindex><\/li>\n<\/ul>\n<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"#shared_runner\">Shared Runner<\/a><\/noindex>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"#shared_runner_gpg\">\u0413\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f GPG \u043a\u043b\u044e\u0447\u0435\u0439<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"#shared_runner_maven\">\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 Maven<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"#shared_runner_deploy_docker_image\">Deploy docker image<\/a><\/noindex><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"#gitlab_ci\">GitLab CI<\/a><\/noindex>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"#gitlab_ci_deploy_project\">Deploy project<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"#gitlab_ci_java_project\">Java project<\/a><\/noindex><\/li>\n<\/ul>\n<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"#java_project_pom_xml_conf\">\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f pom.xml<\/a><\/noindex>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"#maven_install_plugin\">maven-install-plugin<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"#maven_javadoc_plugin\">maven-javadoc-plugin<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"#maven_gpg_plugin\">maven-gpg-plugin<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"#maven_staging_maven_plugin\">nexus-staging-maven-plugin<\/a><\/noindex><\/li>\n<\/ul>\n<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"#result\">\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442<\/a><\/noindex>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"#snapshot_version_publication\">\u041f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u044f snapshot \u0432\u0435\u0440\u0441\u0438\u0438<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"#release_version_publication\">\u041f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u044f release \u0432\u0435\u0440\u0441\u0438\u0438<\/a><\/noindex><\/li>\n<\/ul>\n<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"#conclusion\">\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/a><\/noindex><\/li>\n<\/ul>\n<p><noindex><a rel=\"nofollow\" name=\"general_information\"><\/a><\/noindex><\/p>\n<h2 id=\"obschaya-informaciya\">\u041e\u0431\u0449\u0430\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f<\/h2>\n<ul>\n<li>\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u0430 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442\u043e\u0432 \u0432 Maven Central \u0447\u0435\u0440\u0435\u0437 Sonatype OSS Repository Hosting Service \u0443\u0436\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u043e \u0432 <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/171493\/\">\u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435<\/a><\/noindex> \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u043c <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/users\/googolplex\/\" class=\"user_link\">Googolplex<\/a><\/noindex>, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432 \u043d\u0443\u0436\u043d\u044b\u0445 \u043c\u0435\u0441\u0442\u0430\u0445 \u0431\u0443\u0434\u0443 \u0441\u0441\u044b\u043b\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u0434\u0430\u043d\u043d\u0443\u044e \u0441\u0442\u0430\u0442\u044c\u044e.<\/li>\n<li>\u041f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u043c\u0441\u044f \u0432 <noindex><a rel=\"nofollow\" href=\"https:\/\/issues.sonatype.org\/secure\/Dashboard.jspa\">Sonatype JIRA<\/a><\/noindex> \u0438 \u0437\u0430\u0432\u043e\u0434\u0438\u043c \u0442\u0438\u043a\u0435\u0442 \u043d\u0430 \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u0435 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f (\u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u0447\u0438\u0442\u0430\u0442\u044c \u0440\u0430\u0437\u0434\u0435\u043b <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/171493\/\">\u0421\u043e\u0437\u0434\u0430\u0451\u043c \u0442\u0438\u043a\u0435\u0442 \u043d\u0430 Sonatype JIRA<\/a><\/noindex>). \u041f\u043e\u0441\u043b\u0435 \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u044f \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f \u043f\u0430\u0440\u0430 \u043b\u043e\u0433\u0438\u043d\/\u043f\u0430\u0440\u043e\u043b\u044c \u043e\u0442 JIRA (\u0434\u0430\u043b\u0435\u0435 \u0443\u0447\u0435\u0442\u043d\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c Sonatype) \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0434\u043b\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442\u043e\u0432 \u0432 Sonatype nexus.<\/li>\n<li>\u0414\u0430\u043b\u0435\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 GPG \u043a\u043b\u044e\u0447\u0430 \u043e\u043f\u0438\u0441\u0430\u043d \u0432\u0435\u0441\u044c\u043c\u0430 \u0441\u0443\u0445\u043e. \u0411\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0440\u0430\u0437\u0434\u0435\u043b <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/171493\/\">\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 GnuPG \u0434\u043b\u044f \u043f\u043e\u0434\u043f\u0438\u0441\u0438 \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442\u043e\u0432<\/a><\/noindex><\/li>\n<li>\u0415\u0441\u043b\u0438 \u0432\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0435 Linux \u043a\u043e\u043d\u0441\u043e\u043b\u044c \u0434\u043b\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 GPG \u043a\u043b\u044e\u0447\u0430 (gnupg\/gnupg2), \u0442\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c <noindex><a rel=\"nofollow\" href=\"https:\/\/wiki.archlinux.org\/index.php\/Rng-tools\">rng-tools<\/a><\/noindex> \u0434\u043b\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u044d\u043d\u0442\u0440\u043e\u043f\u0438\u0438. \u0412 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f \u043a\u043b\u044e\u0447\u0430 \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442\u044c \u043e\u0447\u0435\u043d\u044c \u0434\u043e\u043b\u0433\u043e.<\/li>\n<li>\u0421\u0435\u0440\u0432\u0438\u0441\u044b \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f <strong>\u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0445<\/strong> GPG \u043a\u043b\u044e\u0447\u0435\u0439\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"http:\/\/keys.gnupg.net\">http:\/\/keys.gnupg.net<\/a><\/noindex><\/li>\n<li><noindex>http:\/\/pool.sks-keyservers.net<\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"http:\/\/keyserver.ubuntu.com\">http:\/\/keyserver.ubuntu.com<\/a><\/noindex><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p><noindex><a rel=\"nofollow\" href=\"#toc\">\u041a \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u044e<\/a><\/noindex><\/p>\n<p><noindex><a rel=\"nofollow\" name=\"gitlab_deploy_project\"><\/a><\/noindex><\/p>\n<h2 id=\"nastroyka-deploy-proekta-v-gitlab\">\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 deploy-\u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0432 GitLab<\/h2>\n<ul>\n<li>\u0412 \u043f\u0435\u0440\u0432\u0443\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043f\u0440\u043e\u0435\u043a\u0442, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0431\u0443\u0434\u0435\u0442 \u0445\u0440\u0430\u043d\u0438\u0442\u044c\u0441\u044f pipeline, \u0434\u043b\u044f \u0434\u0435\u043f\u043b\u043e\u044f \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442\u043e\u0432. \u0421\u0432\u043e\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 \u044f \u043d\u0430\u0437\u0432\u0430\u043b \u043f\u0440\u043e\u0441\u0442\u043e \u0438 \u043d\u0435\u0437\u0430\u043c\u044b\u0441\u043b\u043e\u0432\u0430\u0442\u043e \u2014 <noindex><a rel=\"nofollow\" href=\"https:\/\/gitlab.com\/TouchBIT\/deploy\">deploy<\/a><\/noindex><\/li>\n<li>\u041f\u043e\u0441\u043b\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043d\u0430 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f.<br \/>\n\u041f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u0432 \u043f\u0440\u043e\u0435\u043a\u0442 -&gt; Settings -&gt; Repository -&gt; Protected Branches. \u0423\u0434\u0430\u043b\u044f\u0435\u043c \u0432\u0441\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u043e \u0441 Wildcard * \u0441 \u043f\u0440\u0430\u0432\u043e\u043c \u043d\u0430 push \u0438 merge \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u0441 \u0440\u043e\u043b\u044c\u044e Maintainers. \u0414\u0430\u043d\u043d\u043e\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u043e \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u043a\u0430\u043a \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430, \u0442\u0430\u043a \u0438 \u0433\u0440\u0443\u043f\u043f\u044b \u0432 \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0434\u0430\u043d\u043d\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 \u0432\u0445\u043e\u0434\u0438\u0442.<br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/hsto.org\/webt\/b0\/5d\/-r\/b05d-r0wepfttklyowl01keoohs.png\"><img decoding=\"async\" alt=\"\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 GitLab CI \u0434\u043b\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 java \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0432 maven central\" src=\"\/wp-content\/uploads\/2019\/04\/c4563ee6f08f333c2998c294a60da401.png\" style=\"display:block;margin: 0 auto;\"><\/a><\/noindex><\/li>\n<li>\u0415\u0441\u043b\u0438 \u043c\u0435\u0439\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e, \u0442\u043e \u043b\u0443\u0447\u0448\u0438\u043c \u0440\u0435\u0448\u0435\u043d\u0438\u0435\u043c \u0431\u0443\u0434\u0435\u0442 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u043f\u0440\u043e\u0435\u043a\u0442\u0443 \u0432 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435.<br \/>\n\u041f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u0432 \u043f\u0440\u043e\u0435\u043a\u0442 -&gt; Settings -&gt; General -&gt; Visibility, project features, permissions \u0438 \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c Project visibility \u0432 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <strong>Private<\/strong>.<br \/>\n\u0423 \u043c\u0435\u043d\u044f \u043f\u0440\u043e\u0435\u043a\u0442 \u0432 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u043e\u043c \u0434\u043e\u0441\u0442\u0443\u043f\u0435, \u0442\u0430\u043a \u043a\u0430\u043a \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 GitLab Runner \u0438 \u0434\u043e\u0441\u0442\u0443\u043f \u043d\u0430 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f \u0435\u0441\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0443 \u043c\u0435\u043d\u044f. \u041d\u0443 \u0438 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043d\u0435 \u0432 \u043c\u043e\u0438\u0445 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0430\u0445 \u0441\u0432\u0435\u0442\u0438\u0442\u044c \u043f\u0440\u0438\u0432\u0430\u0442\u043d\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u0432 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0445 pipeline-\u043b\u043e\u0433\u0430\u0445.<\/li>\n<li>\u0423\u0436\u0435\u0441\u0442\u043e\u0447\u0435\u043d\u0438\u0435 \u043f\u0440\u0430\u0432\u0438\u043b \u043d\u0430 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f<br \/>\n\u041f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u0432 \u043f\u0440\u043e\u0435\u043a\u0442 -&gt; Settings -&gt; Repository -&gt; Push Rules \u0438 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u0444\u043b\u0430\u0433\u0438 Committer restriction, Check whether author is a GitLab user. \u0422\u0430\u043a \u0436\u0435 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u044e \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c <noindex><a rel=\"nofollow\" href=\"https:\/\/gitlab.com\/help\/user\/project\/repository\/gpg_signed_commits\/index.md\">\u043f\u043e\u0434\u043f\u0438\u0441\u044c \u043a\u043e\u043c\u043c\u0438\u0442\u043e\u0432<\/a><\/noindex>, \u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0444\u043b\u0430\u0433 Reject unsigned commits.<\/li>\n<li>\u0414\u0430\u043b\u0435\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0442\u0440\u0438\u0433\u0433\u0435\u0440 \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0437\u0430\u0434\u0430\u0447<br \/>\n\u041f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u0432 \u043f\u0440\u043e\u0435\u043a\u0442 -&gt; Settings -&gt; CI \/ CD -&gt; Pipeline triggers \u0438 \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u043d\u043e\u0432\u044b\u0439 trigger-token<br \/>\n\u0414\u0430\u043d\u043d\u044b\u0439 \u0442\u043e\u043a\u0435\u043d \u043c\u043e\u0436\u043d\u043e \u0441\u0440\u0430\u0437\u0443 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 \u043e\u0431\u0449\u0443\u044e \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0434\u043b\u044f \u0433\u0440\u0443\u043f\u043f\u044b \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432.<br \/>\n\u041f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u0432 \u0433\u0440\u0443\u043f\u043f\u0443 -&gt; Settings -&gt; CI \/ CD -&gt; Variables \u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e <code>DEPLOY_TOKEN<\/code> \u0441 trigger-token \u0432 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0438.<\/li>\n<\/ul>\n<p><noindex><a rel=\"nofollow\" href=\"#toc\">\u041a \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u044e<\/a><\/noindex><\/p>\n<p><noindex><a rel=\"nofollow\" name=\"gitlab_runner\"><\/a><\/noindex><\/p>\n<h2 id=\"gitlab-runner\">GitLab Runner<\/h2>\n<p>\u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u0440\u0430\u0437\u0434\u0435\u043b\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0437\u0430\u0434\u0430\u0447 \u043d\u0430 deploy \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e (Specific) \u0438 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u043e\u0433\u043e (Shared) \u0440\u0430\u043d\u043d\u0435\u0440\u0430.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"specific_runner\"><\/a><\/noindex><\/p>\n<h3 id=\"specific-runner\">Specific Runner<\/h3>\n<p>\u042f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u0440\u0430\u043d\u043d\u0435\u0440\u044b, \u0442\u0430\u043a \u043a\u0430\u043a \u0432 \u043f\u0435\u0440\u0432\u0443\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u044d\u0442\u043e \u0443\u0434\u043e\u0431\u043d\u043e, \u0431\u044b\u0441\u0442\u0440\u043e, \u0434\u0435\u0448\u0435\u0432\u043e.<br \/>\n\u0414\u043b\u044f \u0440\u0430\u043d\u043d\u0435\u0440\u0430 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u044e \u043b\u0438\u043d\u0443\u043a\u0441\u043e\u0432\u0443\u044e VDS \u0441 1 CPU, 2 GB RAM, 20 GB HDD. \u0426\u0435\u043d\u0430 \u0432\u043e\u043f\u0440\u043e\u0441\u0430 ~3000\u20bd \u0432 \u0433\u043e\u0434.<\/p>\n<p><b class=\"spoiler_title\">\u041c\u043e\u0439 \u0440\u0430\u043d\u043d\u0435\u0440<\/b><\/p>\n<p>\u0414\u043b\u044f \u0440\u0430\u043d\u043d\u0435\u0440\u0430 \u044f \u0432\u0437\u044f\u043b VDS 4 CPU, 4 GB RAM, 50 GB SSD. \u041e\u0431\u043e\u0448\u043b\u0430\u0441\u044c ~11000\u20bd \u0438 \u043d\u0438 \u0440\u0430\u0437\u0443 \u043d\u0435 \u043f\u043e\u0436\u0430\u043b\u0435\u043b.<br \/>\n\u0423 \u043c\u0435\u043d\u044f \u0432 \u043e\u0431\u0449\u0435\u0439 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438 7 \u043c\u0430\u0448\u0438\u043d\u043e\u043a. 5 \u043d\u0430 aruba \u0438 2 \u043d\u0430 ihor.<\/p>\n<p>\u0418\u0442\u0430\u043a, \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0440\u0430\u043d\u043d\u0435\u0440. \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u0435\u0433\u043e \u0431\u0443\u0434\u0435\u043c \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c.<br \/>\n\u0417\u0430\u0445\u043e\u0434\u0438\u043c \u043d\u0430 \u043c\u0430\u0448\u0438\u043d\u043a\u0443 \u043f\u043e SSH \u0438 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c java, git, maven, gnupg2.<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"#toc\">\u041a \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u044e<\/a><\/noindex><\/p>\n<p><noindex><a rel=\"nofollow\" name=\"install_gitlab_runner\"><\/a><\/noindex><\/p>\n<h4 id=\"ustanavlivaem-gitlab-runner\">\u0423\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c gitlab runner<\/h4>\n<ul>\n<li>\u0421\u043e\u0437\u0434\u0430\u0435\u043c \u043d\u043e\u0432\u0443\u044e \u0433\u0440\u0443\u043f\u043f\u0443 <code>runner<\/code>\n<pre><code class=\"plaintext\">sudo groupadd runner<\/code><\/pre>\n<\/li>\n<li>\u0421\u043e\u0437\u0434\u0430\u0435\u043c \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e \u0434\u043b\u044f maven \u043a\u044d\u0448\u0430 \u0438 \u043d\u0430\u0432\u0435\u0448\u0438\u0432\u0430\u0435\u043c \u043f\u0440\u0430\u0432\u0430 \u0433\u0440\u0443\u043f\u043f\u044b <code>runner<\/code><br \/>\n\u042d\u0442\u043e\u0442 \u043f\u0443\u043d\u043a\u0442 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c, \u0435\u0441\u043b\u0438 \u0432\u044b \u043d\u0435 \u043f\u043b\u0430\u043d\u0438\u0440\u0443\u0435\u0442\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u043d\u043d\u0435\u0440\u043e\u0432 \u043d\u0430 \u043e\u0434\u043d\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u0435.<\/p>\n<pre><code class=\"plaintext\">mkdir -p \/usr\/cache\/.m2\/repository\nchown -R :runner \/usr\/cache\nchmod -R 770 \/usr\/cache<\/code><\/pre>\n<\/li>\n<li>\u0421\u043e\u0437\u0434\u0430\u0435\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f <code>gitlab-deployer<\/code> \u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0432 \u0433\u0440\u0443\u043f\u043f\u0443 <code>runner<\/code>\n<pre><code class=\"plaintext\">useradd -m -d \/home\/gitlab-deployer gitlab-deployer\nusermod -a -G runner gitlab-deployer<\/code><\/pre>\n<\/li>\n<li>\u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0432 \u0444\u0430\u0439\u043b <code>\/etc\/ssh\/sshd_config<\/code> \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u0441\u0442\u0440\u043e\u0447\u043a\u0443\n<pre><code class=\"plaintext\">AllowUsers root@* gitlab-deployer@127.0.0.1<\/code><\/pre>\n<\/li>\n<li>\u041f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c <code>sshd<\/code>\n<pre><code class=\"plaintext\">systemctl restart sshd<\/code><\/pre>\n<\/li>\n<li>\u0423\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u043f\u0430\u0440\u043e\u043b\u044c \u0434\u043b\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f <code>gitlab-deployer<\/code> (\u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e\u0439, \u0442\u0430\u043a \u043a\u0430\u043a \u0434\u0435\u0439\u0441\u0442\u0432\u0443\u0435\u0442 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 \u0434\u043b\u044f localhost)\n<pre><code class=\"plaintext\">passwd gitlab-deployer<\/code><\/pre>\n<\/li>\n<li>\u0423\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c GitLab Runner (Linux x86-64)\n<pre><code class=\"plaintext\">sudo wget -O \/usr\/local\/bin\/gitlab-runner https:\/\/gitlab-runner-downloads.s3.amazonaws.com\/latest\/binaries\/gitlab-runner-linux-amd64\nsudo chmod +x \/usr\/local\/bin\/gitlab-runner\nln -s \/usr\/local\/bin\/gitlab-runner \/etc\/alternatives\/gitlab-runner\nln -s \/etc\/alternatives\/gitlab-runner \/usr\/bin\/gitlab-runner<\/code><\/pre>\n<\/li>\n<li>\u041f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u043d\u0430 \u0441\u0430\u0439\u0442 gitlab.com -&gt; deploy-project -&gt; Settings -&gt; CI\/CD -&gt; Runners -&gt; Specific Runners \u0438 \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u043c registration token<\/li>\n<\/ul>\n<p><b class=\"spoiler_title\">\u0421\u043a\u0440\u0438\u043d<\/b><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/hsto.org\/webt\/h3\/zy\/qc\/h3zyqcfkjj2hrcfiopmdha94zci.png\"><img decoding=\"async\" alt=\"\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 GitLab CI \u0434\u043b\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 java \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0432 maven central\" src=\"\/wp-content\/uploads\/2019\/04\/e4b89ce89a40440afd99e37c5dfe240d.png\" style=\"display:block;margin: 0 auto;\"><\/a><\/noindex><\/p>\n<ul>\n<li>\u0420\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u043c \u0440\u0430\u043d\u043d\u0435\u0440\n<pre><code class=\"plaintext\">gitlab-runner register --config \/etc\/gitlab-runner\/gitlab-deployer-config.toml<\/code><\/pre>\n<\/li>\n<\/ul>\n<p><b class=\"spoiler_title\">\u041f\u0440\u043e\u0446\u0435\u0441\u0441<\/b><\/p>\n<pre><code class=\"plaintext\">Runtime platform arch=amd64 os=linux pid=17594 revision=3001a600 version=11.10.0\nRunning in system-mode.\nPlease enter the gitlab-ci coordinator URL (e.g. https:\/\/gitlab.com\/):\nhttps:\/\/gitlab.com\/\nPlease enter the gitlab-ci token for this runner:\nREGISTRATION_TOKEN\nPlease enter the gitlab-ci description for this runner:\n[ih1174328.vds.myihor.ru]: Deploy Runner\nPlease enter the gitlab-ci tags for this runner (comma separated):\ndeploy\nRegistering runner... succeeded                     runner=ZvKdjJhx\nPlease enter the executor: docker-ssh, parallels, virtualbox, docker-ssh+machine, kubernetes, docker, ssh, docker+machine, shell:\nshell\nRunner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded!<\/code><\/pre>\n<ul>\n<li>\u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c, \u0447\u0442\u043e \u0440\u0430\u043d\u043d\u0435\u0440 \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d. \u041f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u043d\u0430 \u0441\u0430\u0439\u0442 gitlab.com -&gt; deploy-project -&gt; Settings -&gt; CI\/CD -&gt; Runners -&gt; Specific Runners -&gt; Runners activated for this project<\/li>\n<\/ul>\n<p><b class=\"spoiler_title\">\u0421\u043a\u0440\u0438\u043d<\/b><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/hsto.org\/webt\/kg\/i_\/nb\/kgi_nbwmtetx0gulyzwqvp6g_ps.png\"><img decoding=\"async\" alt=\"\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 GitLab CI \u0434\u043b\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 java \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0432 maven central\" src=\"\/wp-content\/uploads\/2019\/04\/c8582afe14cdea57f77cb0a755ca8b8e.png\" style=\"display:block;margin: 0 auto;\"><\/a><\/noindex><\/p>\n<ul>\n<li>\u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c <strong>\u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439<\/strong> \u0441\u0435\u0440\u0432\u0438\u0441 <code>\/etc\/systemd\/system\/gitlab-deployer.service<\/code>\n<pre><code class=\"plaintext\">[Unit]\nDescription=GitLab Deploy Runner\nAfter=syslog.target network.target\nConditionFileIsExecutable=\/usr\/local\/bin\/gitlab-runner\n[Service]\nStartLimitInterval=5\nStartLimitBurst=10\nExecStart=\/usr\/local\/bin\/gitlab-runner \"run\" \"--working-directory\" \"\/home\/gitlab-deployer\" \"--config\" \"\/etc\/gitlab-runner\/gitlab-deployer-config.toml\" \"--service\" \"gitlab-deployer\" \"--syslog\" \"--user\" \"gitlab-deployer\"\nRestart=always\nRestartSec=120\n[Install]\nWantedBy=multi-user.target<\/code><\/pre>\n<\/li>\n<li>\u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0441\u0435\u0440\u0432\u0438\u0441.\n<pre><code class=\"plaintext\">systemctl enable gitlab-deployer.service\nsystemctl start gitlab-deployer.service\nsystemctl status gitlab-deployer.service<\/code><\/pre>\n<\/li>\n<li>\u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c, \u0447\u0442\u043e \u0440\u0430\u043d\u043d\u0435\u0440 \u0437\u0430\u043f\u0443\u0449\u0435\u043d.<\/li>\n<\/ul>\n<p><b class=\"spoiler_title\">\u041f\u0440\u0438\u043c\u0435\u0440<\/b><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/hsto.org\/webt\/_c\/4p\/d-\/_c4pd-_ed8fznhlgvzwjosatire.png\"><img decoding=\"async\" alt=\"\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 GitLab CI \u0434\u043b\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 java \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0432 maven central\" src=\"\/wp-content\/uploads\/2019\/04\/a3b4c18311f180da6ebc0e1376a02f2b.png\" style=\"display:block;margin: 0 auto;\"><\/a><\/noindex><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"#toc\">\u041a \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u044e<\/a><\/noindex><\/p>\n<p><noindex><a rel=\"nofollow\" name=\"specific_runner_gpg\"><\/a><\/noindex><\/p>\n<h4 id=\"generaciya-gpg-klyuchey\">\u0413\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f GPG \u043a\u043b\u044e\u0447\u0435\u0439<\/h4>\n<ul>\n<li>\u0421 \u044d\u0442\u043e\u0439 \u0436\u0435 \u043c\u0430\u0448\u0438\u043d\u043a\u0438 \u0437\u0430\u0445\u043e\u0434\u0438\u043c \u043f\u043e ssh \u043f\u043e\u0434 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u043c <code>gitlab-deployer<\/code> (\u044d\u0442\u043e \u0432\u0430\u0436\u043d\u043e \u0434\u043b\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 GPG \u043a\u043b\u044e\u0447\u0430)\n<pre><code class=\"plaintext\">ssh gitlab-deployer@127.0.0.1<\/code><\/pre>\n<\/li>\n<li>\u0413\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c \u043a\u043b\u044e\u0447 \u043e\u0442\u0432\u0435\u0447\u0430\u044f \u043d\u0430 \u0432\u043e\u043f\u0440\u043e\u0441\u044b. \u042f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u0438\u043c\u044f \u0438 \u043f\u043e\u0447\u0442\u0443.<br \/>\n\u041e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u043f\u0430\u0440\u043e\u043b\u044c \u0434\u043b\u044f \u043a\u043b\u044e\u0447\u0430. \u0414\u0430\u043d\u043d\u044b\u043c \u043a\u043b\u044e\u0447\u043e\u043c \u0431\u0443\u0434\u0443\u0442 \u043f\u043e\u0434\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442\u044b.<\/p>\n<pre><code class=\"plaintext\">gpg --gen-key <\/code><\/pre>\n<\/li>\n<li>\u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c\n<pre><code class=\"plaintext\">gpg --list-keys -a\n\/home\/gitlab-deployer\/.gnupg\/pubring.gpg\n----------------------------------------\npub   4096R\/00000000 2019-04-19\nuid                  Petruha Petrov &lt;pp@example.com&gt;\nsub   4096R\/11111111 2019-04-19<\/code><\/pre>\n<\/li>\n<li>\u0417\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c \u043d\u0430\u0448 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0439 \u043a\u043b\u044e\u0447 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440 \u043a\u043b\u044e\u0447\u0435\u0439\n<pre><code class=\"bash\">gpg --keyserver keys.gnupg.net --send-key 00000000\ngpg: sending key 00000000 to hkp server keys.gnupg.net<\/code><\/pre>\n<\/li>\n<\/ul>\n<p><noindex><a rel=\"nofollow\" href=\"#toc\">\u041a \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u044e<\/a><\/noindex><\/p>\n<p><noindex><a rel=\"nofollow\" name=\"specific_runner_maven\"><\/a><\/noindex><\/p>\n<h4 id=\"nastroyka-maven\">\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 Maven<\/h4>\n<ul>\n<li>\u0417\u0430\u0445\u043e\u0434\u0438\u043c \u043f\u043e\u0434 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u043c <code>gitlab-deployer<\/code>\n<pre><code class=\"plaintext\">su gitlab-deployer <\/code><\/pre>\n<\/li>\n<li>\u0421\u043e\u0437\u0434\u0430\u0435\u043c \u0434\u0438\u0440\u0435\u0442\u043e\u0440\u0438\u044e maven <strong>repository<\/strong> \u0438 \u043b\u0438\u043d\u043a\u0443\u0435\u043c \u0441 \u043a\u044d\u0448\u0435\u043c (\u043d\u0435 \u043e\u0448\u0438\u0431\u0438\u0442\u0435\u0441\u044c)<br \/>\n\u042d\u0442\u043e\u0442 \u043f\u0443\u043d\u043a\u0442 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c, \u0435\u0441\u043b\u0438 \u0432\u044b \u043d\u0435 \u043f\u043b\u0430\u043d\u0438\u0440\u0443\u0435\u0442\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u043d\u043d\u0435\u0440\u043e\u0432 \u043d\u0430 \u043e\u0434\u043d\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u0435.<\/p>\n<pre><code class=\"plaintext\">mkdir -p ~\/.m2\/repository\nln -s \/usr\/cache\/.m2\/repository \/home\/gitlab-deployer\/.m2\/repository<\/code><\/pre>\n<\/li>\n<li>\u0421\u043e\u0437\u0434\u0430\u0435\u043c \u043c\u0430\u0441\u0442\u0435\u0440 \u043a\u043b\u044e\u0447\n<pre><code class=\"plaintext\">mvn --encrypt-master-password password\n{hnkle5BJ9HUHUMP+CXfGBl8dScfFci\/mpsur\/73tR2I=}<\/code><\/pre>\n<\/li>\n<li>\u0421\u043e\u0437\u0434\u0430\u0435\u043c \u0444\u0430\u0439\u043b ~\/.m2\/settings-security.xml\n<pre><code class=\"plaintext\">&lt;settingsSecurity&gt;\n&lt;master&gt;{hnkle5BJ9HUHUMP+CXfGBl8dScfFci\/mpsur\/73tR2I=}&lt;\/master&gt;\n&lt;\/settingsSecurity&gt;<\/code><\/pre>\n<\/li>\n<li>\u0428\u0438\u0444\u0440\u0443\u0435\u043c \u043f\u0430\u0440\u043e\u043b\u044c \u043e\u0442 \u0443\u0447\u0435\u0442\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 Sonatype\n<pre><code class=\"plaintext\">mvn --encrypt-password SONATYPE_PASSWORD\n{98Wv5+u+Tn0HX2z5G\/kR4R8Z0WBgcDBgi7d12S\/un+SCU7uxzaZGGmJ8Cu9pAZ2J}<\/code><\/pre>\n<\/li>\n<li>\u0421\u043e\u0437\u0434\u0430\u0435\u043c \u0444\u0430\u0439\u043b ~\/.m2\/settings.xml\n<pre><code class=\"plaintext\">&lt;settings&gt;  \n&lt;profiles&gt;\n    &lt;profile&gt;\n        &lt;id&gt;env&lt;\/id&gt;\n        &lt;activation&gt;\n            &lt;activeByDefault&gt;true&lt;\/activeByDefault&gt;\n        &lt;\/activation&gt;\n        &lt;properties&gt;\n            &lt;gpg.passphrase&gt;GPG_SECRET_KEY_PASSPHRASE&lt;\/gpg.passphrase&gt;\n        &lt;\/properties&gt;\n    &lt;\/profile&gt;\n&lt;\/profiles&gt;\n&lt;servers&gt;\n    &lt;server&gt;\n        &lt;id&gt;sonatype&lt;\/id&gt;\n        &lt;username&gt;SONATYPE_USERNAME&lt;\/username&gt;\n        &lt;password&gt;{98Wv5+u+Tn0HX2z5G\/kR4R8Z0WBgcDBgi7d12S\/un+SCU7uxzaZGGmJ8Cu9pAZ2J}&lt;\/password&gt;\n    &lt;\/server&gt;\n&lt;\/servers&gt;\n&lt;\/settings&gt;<\/code><\/pre>\n<\/li>\n<\/ul>\n<p>\u0433\u0434\u0435,<br \/>\nGPG_SECRET_KEY_PASSPHRASE \u2014 \u043f\u0430\u0440\u043e\u043b\u044c \u043e\u0442 GPG \u043a\u043b\u044e\u0447\u0430<br \/>\nSONATYPE_USERNAME \u2014 \u043b\u043e\u0433\u0438\u043d \u0443\u0447\u0435\u0442\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 sonatype<\/p>\n<p>\u041d\u0430 \u044d\u0442\u043e\u043c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0440\u0430\u043d\u043d\u0435\u0440\u0430 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0430, \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u0442\u044c \u043a \u0440\u0430\u0437\u0434\u0435\u043b\u0443 <noindex><a rel=\"nofollow\" href=\"#gitlab_ci\">GitLab CI<\/a><\/noindex><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"#toc\">\u041a \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u044e<\/a><\/noindex><\/p>\n<p><noindex><a rel=\"nofollow\" name=\"shared_runner\"><\/a><\/noindex><\/p>\n<h3 id=\"shared-runner\">Shared Runner<\/h3>\n<p><noindex><a rel=\"nofollow\" name=\"shared_runner_gpg\"><\/a><\/noindex><\/p>\n<h4 id=\"generaciya-gpg-klyuchey-1\">\u0413\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f GPG \u043a\u043b\u044e\u0447\u0435\u0439<\/h4>\n<ul>\n<li>\u0412 \u043f\u0435\u0440\u0432\u0443\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c GPG \u043a\u043b\u044e\u0447. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c gnupg.\n<pre><code class=\"plaintext\">yum install -y gnupg<\/code><\/pre>\n<\/li>\n<li>\u0413\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c \u043a\u043b\u044e\u0447 \u043e\u0442\u0432\u0435\u0447\u0430\u044f \u043d\u0430 \u0432\u043e\u043f\u0440\u043e\u0441\u044b. \u042f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u0438\u043c\u044f \u0438 \u043f\u043e\u0447\u0442\u0443. \u041e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u043f\u0430\u0440\u043e\u043b\u044c \u0434\u043b\u044f \u043a\u043b\u044e\u0447\u0430.\n<pre><code class=\"plaintext\">gpg --gen-key <\/code><\/pre>\n<\/li>\n<li>\u0412\u044b\u0432\u043e\u0434\u0438\u043c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043f\u043e \u043a\u043b\u044e\u0447\u0443\n<pre><code class=\"plaintext\">gpg --list-keys -a\npub   rsa3072 2019-04-24 [SC] [expires: 2021-04-23]\n  2D0D1706366FC4AEF79669E24D09C55BBA3FD728\nuid           [ultimate] tttemp &lt;temp@temp.temp&gt;\nsub   rsa3072 2019-04-24 [E] [expires: none]<\/code><\/pre>\n<\/li>\n<li>\u0417\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c \u043d\u0430\u0448 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0439 \u043a\u043b\u044e\u0447 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440 \u043a\u043b\u044e\u0447\u0435\u0439\n<pre><code class=\"bash\">gpg --keyserver keys.gnupg.net --send-key 2D0D1706366FC4AEF79669E24D09C55BBA3FD728\ngpg: sending key 2D0D1706366FC4AEF79669E24D09C55BBA3FD728 to hkp server keys.gnupg.net<\/code><\/pre>\n<\/li>\n<li>\u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043f\u0440\u0438\u0432\u0430\u0442\u043d\u044b\u0439 \u043a\u043b\u044e\u0447\n<pre><code class=\"plaintext\">gpg --export-secret-keys --armor 2D0D1706366FC4AEF79669E24D09C55BBA3FD728\n-----BEGIN PGP PRIVATE KEY BLOCK-----\nlQWGBFzAqp8BDADN41CPwJ\/gQwiKEbyA902DKw\/WSB1AvZQvV\/ZFV77xGeG4K7k5\n...\n=2Wd2\n-----END PGP PRIVATE KEY BLOCK-----<\/code><\/pre>\n<\/li>\n<li>\u041f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 -&gt; Settings -&gt; CI \/ CD -&gt; Variables \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u043f\u0440\u0438\u0432\u0430\u0442\u043d\u044b\u0439 \u043a\u043b\u044e\u0447 \u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 <code>GPG_SECRET_KEY<\/code><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/hsto.org\/webt\/e9\/y6\/s4\/e9y6s4chzhakvk1h8awi-afe5oy.png\"><img decoding=\"async\" alt=\"\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 GitLab CI \u0434\u043b\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 java \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0432 maven central\" src=\"\/wp-content\/uploads\/2019\/04\/eb29c3bd960d4301ab08f61e817d9626.png\" style=\"display:block;margin: 0 auto;\"><\/a><\/noindex><\/li>\n<\/ul>\n<p><noindex><a rel=\"nofollow\" href=\"#toc\">\u041a \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u044e<\/a><\/noindex><\/p>\n<p><noindex><a rel=\"nofollow\" name=\"shared_runner_maven\"><\/a><\/noindex><\/p>\n<h4 id=\"nastroyka-maven-1\">\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 Maven<\/h4>\n<ul>\n<li>\u0421\u043e\u0437\u0434\u0430\u0435\u043c \u043c\u0430\u0441\u0442\u0435\u0440 \u043a\u043b\u044e\u0447\n<pre><code class=\"plaintext\">mvn --encrypt-master-password password\n{hnkle5BJ9HUHUMP+CXfGBl8dScfFci\/mpsur\/73tR2I=}<\/code><\/pre>\n<\/li>\n<li>\u041f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 -&gt; Settings -&gt; CI \/ CD -&gt; Variables \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 <code>SETTINGS_SECURITY_XML<\/code> \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0441\u0442\u0440\u043e\u043a\u0438:\n<pre><code class=\"plaintext\">&lt;settingsSecurity&gt;\n&lt;master&gt;{hnkle5BJ9HUHUMP+CXfGBl8dScfFci\/mpsur\/73tR2I=}&lt;\/master&gt;\n&lt;\/settingsSecurity&gt;<\/code><\/pre>\n<\/li>\n<li>\u0428\u0438\u0444\u0440\u0443\u0435\u043c \u043f\u0430\u0440\u043e\u043b\u044c \u043e\u0442 \u0443\u0447\u0435\u0442\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 Sonatype\n<pre><code class=\"plaintext\">mvn --encrypt-password SONATYPE_PASSWORD\n{98Wv5+u+Tn0HX2z5G\/kR4R8Z0WBgcDBgi7d12S\/un+SCU7uxzaZGGmJ8Cu9pAZ2J}<\/code><\/pre>\n<\/li>\n<li>\u041f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 -&gt; Settings -&gt; CI \/ CD -&gt; Variables \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 <code>SETTINGS_XML<\/code> \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0441\u0442\u0440\u043e\u043a\u0438:\n<pre><code class=\"plaintext\">&lt;settings&gt;  \n&lt;profiles&gt;\n    &lt;profile&gt;\n        &lt;id&gt;env&lt;\/id&gt;\n        &lt;activation&gt;\n            &lt;activeByDefault&gt;true&lt;\/activeByDefault&gt;\n        &lt;\/activation&gt;\n        &lt;properties&gt;\n            &lt;gpg.passphrase&gt;GPG_SECRET_KEY_PASSPHRASE&lt;\/gpg.passphrase&gt;\n        &lt;\/properties&gt;\n    &lt;\/profile&gt;\n&lt;\/profiles&gt;\n&lt;servers&gt;\n    &lt;server&gt;\n        &lt;id&gt;sonatype&lt;\/id&gt;\n        &lt;username&gt;sonatype_username&lt;\/username&gt;\n        &lt;password&gt;{98Wv5+u+Tn0HX2z5G\/kR4R8Z0WBgcDBgi7d12S\/un+SCU7uxzaZGGmJ8Cu9pAZ2J}&lt;\/password&gt;\n    &lt;\/server&gt;\n&lt;\/servers&gt;\n&lt;\/settings&gt;<\/code><\/pre>\n<\/li>\n<\/ul>\n<p>\u0433\u0434\u0435,<br \/>\nGPG_SECRET_KEY_PASSPHRASE \u2014 \u043f\u0430\u0440\u043e\u043b\u044c \u043e\u0442 GPG \u043a\u043b\u044e\u0447\u0430<br \/>\nSONATYPE_USERNAME \u2014 \u043b\u043e\u0433\u0438\u043d \u0443\u0447\u0435\u0442\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 sonatype<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"#toc\">\u041a \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u044e<\/a><\/noindex><\/p>\n<p><noindex><a rel=\"nofollow\" name=\"shared_runner_deploy_docker_image\"><\/a><\/noindex><\/p>\n<h4 id=\"deploy-docker-image\">Deploy docker image<\/h4>\n<ul>\n<li>\u0421\u043e\u0437\u0434\u0430\u0435\u043c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e\u0439 Dockerfile \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0437\u0430\u0434\u0430\u0447 \u043d\u0430 deploy \u0441 \u043d\u0443\u0436\u043d\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0435\u0439 Java. \u041d\u0438\u0436\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d \u043f\u0440\u0438\u043c\u0435\u0440 \u0434\u043b\u044f alpine.\n<pre><code class=\"plaintext\">FROM java:8u111-jdk-alpine\nRUN apk add gnupg maven git --update-cache \n--repository http:\/\/dl-4.alpinelinux.org\/alpine\/edge\/community\/ --allow-untrusted &amp;&amp; \nmkdir ~\/.m2\/<\/code><\/pre>\n<\/li>\n<li>\u0421\u043e\u0431\u0438\u0440\u0430\u0435\u043c \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u0434\u043b\u044f \u0432\u0430\u0448\u0435\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430\n<pre><code class=\"plaintext\">docker build -t registry.gitlab.com\/group\/deploy .<\/code><\/pre>\n<\/li>\n<li>\u0410\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u0446\u0438\u0440\u0443\u0435\u043c\u0441\u044f \u0438 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u0432 registry.\n<pre><code class=\"plaintext\">docker login -u USER -p PASSWORD registry.gitlab.com\ndocker push registry.gitlab.com\/group\/deploy<\/code><\/pre>\n<\/li>\n<\/ul>\n<p><noindex><a rel=\"nofollow\" href=\"#toc\">\u041a \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u044e<\/a><\/noindex><\/p>\n<p><noindex><a rel=\"nofollow\" name=\"gitlab_ci\"><\/a><\/noindex><\/p>\n<h2 id=\"gitlab-ci\">GitLab CI<\/h2>\n<p><noindex><a rel=\"nofollow\" name=\"gitlab_ci_deploy_project\"><\/a><\/noindex><\/p>\n<h3 id=\"deploy-project\">Deploy project<\/h3>\n<p>\u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0432 \u043a\u043e\u0440\u0435\u043d\u044c deploy-\u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0444\u0430\u0439\u043b .gitlab-ci.yml<br \/>\n\u0412 \u0441\u043a\u0440\u0438\u043f\u0442\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043e \u0434\u0432\u0435 \u0432\u0437\u0430\u0438\u043c\u043e\u0438\u0441\u043a\u043b\u044e\u0447\u0430\u044e\u0449\u0438\u0435 \u0437\u0430\u0434\u0430\u0447\u0438 \u043d\u0430 \u0434\u0435\u043f\u043b\u043e\u0439. Specific Runner \u0438\u043b\u0438 Shared Runner \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e.<\/p>\n<p><b class=\"spoiler_title\">.gitlab-ci.yml<\/b><\/p>\n<pre><code class=\"plaintext\">stages:\n  - deploy\n\nSpecific Runner:\n  extends: .java_deploy_template\n  # \u0417\u0430\u0434\u0430\u0447\u0430 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c\u0441\u044f \u043d\u0430 \u0432\u0430\u0448\u0435\u043c shell-\u0440\u0430\u043d\u043d\u0435\u0440\u0435\n  tags:\n    - deploy\n\nShared Runner:\n  extends: .java_deploy_template\n  # \u0417\u0430\u0434\u0430\u0447\u0430 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c\u0441\u044f \u043d\u0430 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u043e\u043c docker-\u0440\u0430\u043d\u043d\u0435\u0440\u0435\n  tags:\n    - docker\n  # \u041e\u0431\u0440\u0430\u0437 \u0438\u0437 \u0440\u0430\u0437\u0434\u0435\u043b\u0430 GitLab Runner -&gt; Shared Runner -&gt; Docker\n  image: registry.gitlab.com\/group\/deploy-project:latest\n  before_script:\n    # \u0418\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c GPG \u043a\u043b\u044e\u0447\n    - printf \"${GPG_SECRET_KEY}\" | gpg --batch --import\n    # \u0421\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c maven \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e\n    - printf \"${SETTINGS_SECURITY_XML}\" &gt; ~\/.m2\/settings-security.xml\n    - printf \"${SETTINGS_XML}\" &gt; ~\/.m2\/settings.xml\n\n.java_deploy_template:\n  stage: deploy\n  # \u0417\u0430\u0434\u0430\u0447\u0430 \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043f\u043e \u0442\u0440\u0438\u0433\u0433\u0435\u0440\u0443, \u0435\u0441\u043b\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u0430 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f DEPLOY \u0441\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c java\n  only:\n    variables:\n    - $DEPLOY == \"java\"\n  variables:\n    # \u043e\u0442\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u043a\u043b\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430\n    GIT_STRATEGY: none\n  script:\n    # \u041f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043f\u0430\u0440\u043e\u043b\u044f \u0432 \u043d\u0435\u0437\u0430\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u043c \u0432\u0438\u0434\u0435\n    - git config --global credential.helper store\n    # \u0421\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043a\u0440\u0435\u0434\u044b \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f gitlab-ci-token\n    # \u0422\u043e\u043a\u0435\u043d \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 gitlab.com \u0438 \u0434\u043b\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u0433\u0440\u0443\u043f\u043f\u044b\n    - echo \"https:\/\/gitlab-ci-token:${CI_JOB_TOKEN}@gitlab.com\" &gt;&gt; ~\/.git-credentials\n    # \u041f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0447\u0438\u0441\u0442\u0438\u043c \u0442\u0435\u043a\u0443\u0449\u0443\u044e \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e\n    - rm -rf .* *\n    # \u041a\u043b\u043e\u043d\u0438\u0440\u0443\u0435\u043c \u043f\u0440\u043e\u0435\u043a\u0442 \u043a\u043e\u0442\u043e\u0440\u044b\u0439, \u0431\u0443\u0434\u0435\u043c \u0434\u0435\u043f\u043b\u043e\u0438\u0442\u044c \u0432 Sonatype Nexus\n    - git clone ${DEPLOY_CI_REPOSITORY_URL} .\n    # \u041f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0435\u043c\u0441\u044f \u043d\u0430 \u043d\u0443\u0436\u043d\u044b\u0439 \u043a\u043e\u043c\u043c\u0438\u0442\n    - git checkout ${DEPLOY_CI_COMMIT_SHA} -f\n    # \u0415\u0441\u043b\u0438 \u0445\u043e\u0442\u044c \u043e\u0434\u0438\u043d pom.xml \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 autoReleaseAfterClose \u0432\u0430\u043b\u0438\u043c \u0441\u0431\u043e\u0440\u043a\u0443.\n    # \u0412 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0435\u0441\u0442\u044c \u0440\u0438\u0441\u043a \u0437\u0430\u043b\u0438\u0442\u044c \u0441\u044b\u0440\u044b\u0435 \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442\u044b \u0432 maven central\n    - &gt;\n      for pom in $(find . -name pom.xml); do\n        if [[ $(grep -q autoReleaseAfterClose \"$pom\" &amp;&amp; echo $?) == 0 ]]; then\n          echo \"File $pom contains prohibited setting: &lt;autoReleaseAfterClose&gt;\";\n          exit 1;\n        fi;\n      done\n    # \u0415\u0441\u043b\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 DEPLOY_CI_COMMIT_TAG \u043f\u0443\u0441\u0442\u043e\u0439, \u0442\u043e \u043f\u0440\u0438\u043d\u0443\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u0442\u0430\u0432\u0438\u043c SNAPSHOT-\u0432\u0435\u0440\u0441\u0438\u044e\n    - &gt;\n      if [[ \"${DEPLOY_CI_COMMIT_TAG}\" != \"\" ]]; then\n        mvn versions:set -DnewVersion=${DEPLOY_CI_COMMIT_TAG}\n      else\n        VERSION=$(mvn -q -Dexec.executable=echo -Dexec.args='${project.version}' --non-recursive exec:exec)\n        if [[ \"${VERSION}\" == *-SNAPSHOT ]]; then\n          mvn versions:set -DnewVersion=${VERSION}\n        else\n          mvn versions:set -DnewVersion=${VERSION}-SNAPSHOT\n        fi\n      fi\n    # \u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0437\u0430\u0434\u0430\u0447\u0443 \u043d\u0430 \u0441\u0431\u043e\u0440\u043a\u0443 \u0438 \u0434\u0435\u043f\u043b\u043e\u0439 \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442\u043e\u0432\n    - mvn clean deploy -DskipTests=true<\/code><\/pre>\n<p><noindex><a rel=\"nofollow\" href=\"#toc\">\u041a \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u044e<\/a><\/noindex><\/p>\n<p><noindex><a rel=\"nofollow\" name=\"gitlab_ci_java_project\"><\/a><\/noindex><\/p>\n<h3 id=\"java-project\">Java project<\/h3>\n<p>\u0412 java \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u0445 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0442\u044c \u0432 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0435 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c 2 \u0448\u0430\u0433\u0430 \u043d\u0430 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0443 Release \u0438 Snapshot \u0432\u0435\u0440\u0441\u0438\u0439.<\/p>\n<p><b class=\"spoiler_title\">.gitlab-ci.yml<\/b><\/p>\n<pre><code class=\"plaintext\">stages:\n  - build\n  - test\n  - verify\n  - deploy\n\n&lt;...&gt;\n\nRelease:\n  extends: .trigger_deploy\n  # \u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0437\u0430\u0434\u0430\u0447\u0443 \u0442\u043e\u043b\u044c\u043a\u043e \u043fo \u0442\u0435\u0433\u0443.\n  only:\n    - tags\n\nSnapshot:\n  extends: .trigger_deploy\n  # \u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0437\u0430\u0434\u0430\u0447\u0443 \u043d\u0430 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u044e SNAPSHOT \u0432\u0435\u0440\u0441\u0438\u0438 \u0432\u0440\u0443\u0447\u043d\u0443\u044e\n  when: manual\n  # \u041d\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0437\u0430\u0434\u0430\u0447\u0443, \u0435\u0441\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d \u0442\u0435\u0433.\n  except:\n    - tags\n\n.trigger_deploy:\n  stage: deploy\n  variables:\n    # \u041e\u0442\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u043a\u043b\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430\n    GIT_STRATEGY: none\n    # \u0421\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u0442\u0440\u0438\u0433\u0433\u0435\u0440 deploy-\u0437\u0430\u0434\u0430\u0447\u0438\n    URL: \"https:\/\/gitlab.com\/api\/v4\/projects\/&lt;deploy project ID&gt;\/trigger\/pipeline\"\n    # \u041f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 deploy-\u0437\u0430\u0434\u0430\u0447\u0438\n    POST_DATA: \"\n      token=${DEPLOY_TOKEN}&amp;\n      ref=master&amp;\n      variables[DEPLOY]=${DEPLOY}&amp;\n      variables[DEPLOY_CI_REPOSITORY_URL]=${CI_REPOSITORY_URL}&amp;\n      variables[DEPLOY_CI_PROJECT_NAME]=${CI_PROJECT_NAME}&amp;\n      variables[DEPLOY_CI_COMMIT_SHA]=${CI_COMMIT_SHA}&amp;\n      variables[DEPLOY_CI_COMMIT_TAG]=${CI_COMMIT_TAG}\n      \"\n  script:\n    # \u041d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e cURL, \u0442\u0430\u043a \u043a\u0430\u043a \u0441 \u0444\u043b\u0430\u0433\u0430\u043c\u0438 --fail --show-error\n    # \u043e\u043d \u043d\u0435 \u0432\u044b\u0432\u043e\u0434\u0438\u0442 \u0442\u0435\u043b\u043e \u043e\u0442\u0432\u0435\u0442\u0430, \u0435\u0441\u043b\u0438 HTTP \u043a\u043e\u0434 400 \u0438 \u0431\u043e\u043b\u0435\u0435 \n    - wget --content-on-error -qO- ${URL} --post-data ${POST_DATA}<\/code><\/pre>\n<p>\u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u0440\u0435\u0448\u0435\u043d\u0438\u0438 \u044f \u043f\u043e\u0448\u0435\u043b \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0434\u0430\u043b\u044c\u0448\u0435 \u0438 \u0440\u0435\u0448\u0438\u043b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u0434\u0438\u043d CI \u0448\u0430\u0431\u043b\u043e\u043d \u0434\u043b\u044f java \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432.<\/p>\n<p><b class=\"spoiler_title\">\u0411\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e<\/b><\/p>\n<p>\u042f \u0441\u043e\u0437\u0434\u0430\u043b \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 <noindex><a rel=\"nofollow\" href=\"https:\/\/gitlab.com\/TouchBIT\/gitlab-ci\">gitlab-ci<\/a><\/noindex> \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0440\u0430\u0437\u043c\u0435\u0441\u0442\u0438\u043b \u0448\u0430\u0431\u043b\u043e\u043d CI \u0434\u043b\u044f java \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 <noindex><a rel=\"nofollow\" href=\"https:\/\/gitlab.com\/TouchBIT\/gitlab-ci\/blob\/master\/common.yml\">common.yml<\/a><\/noindex>.<\/p>\n<p><b class=\"spoiler_title\">common.yml<\/b><\/p>\n<pre><code class=\"plaintext\">stages:\n  - build\n  - test\n  - verify\n  - deploy\n\nvariables:\n  SONAR_ARGS: \"\n  -Dsonar.gitlab.commit_sha=${CI_COMMIT_SHA} \n  -Dsonar.gitlab.ref_name=${CI_COMMIT_REF_NAME} \n  \"\n\n.build_java_project:\n  stage: build\n  tags:\n    - touchbit-shell\n  variables:\n    SKIP_TEST: \"false\"\n  script:\n    - mvn clean\n    - mvn package -DskipTests=${SKIP_TEST}\n  artifacts:\n    when: always\n    expire_in: 30 day\n    paths:\n      - \"*\/target\/reports\"\n\n.build_sphinx_doc:\n  stage: build\n  tags:\n    - touchbit-shell\n  variables:\n    DOCKERFILE: .indirect\/docs\/Dockerfile\n  script:\n    - docker build --no-cache -t ${CI_PROJECT_NAME}\/doc -f ${DOCKERFILE} .\n\n.junit_module_test_run:\n  stage: test\n  tags:\n    - touchbit-shell\n  variables:\n    MODULE: \"\"\n  script:\n    - cd ${MODULE}\n    - mvn test\n  artifacts:\n    when: always\n    expire_in: 30 day\n    paths:\n      - \"*\/target\/reports\"\n\n.junit_test_run:\n  stage: test\n  tags:\n    - touchbit-shell\n  script:\n    - mvn test\n  artifacts:\n    when: always\n    expire_in: 30 day\n    paths:\n    - \"*\/target\/reports\"\n\n.sonar_review:\n  stage: verify\n  tags:\n    - touchbit-shell\n  dependencies: []\n  script:\n    - &gt;\n      if [ \"$CI_BUILD_REF_NAME\" == \"master\" ]; then\n        mvn compile sonar:sonar -Dsonar.login=$SONAR_LOGIN $SONAR_ARGS\n      else\n        mvn compile sonar:sonar -Dsonar.login=$SONAR_LOGIN $SONAR_ARGS -Dsonar.analysis.mode=preview\n      fi\n\n.trigger_deploy:\n  stage: deploy\n  tags:\n    - touchbit-shell\n  variables:\n    URL: \"https:\/\/gitlab.com\/api\/v4\/projects\/10345765\/trigger\/pipeline\"\n    POST_DATA: \"\n      token=${DEPLOY_TOKEN}&amp;\n      ref=master&amp;\n      variables[DEPLOY]=${DEPLOY}&amp;\n      variables[DEPLOY_CI_REPOSITORY_URL]=${CI_REPOSITORY_URL}&amp;\n      variables[DEPLOY_CI_PROJECT_NAME]=${CI_PROJECT_NAME}&amp;\n      variables[DEPLOY_CI_COMMIT_SHA]=${CI_COMMIT_SHA}&amp;\n      variables[DEPLOY_CI_COMMIT_TAG]=${CI_COMMIT_TAG}\n      \"\n  script:\n  - wget --content-on-error -qO- ${URL} --post-data ${POST_DATA}\n\n.trigger_release_deploy:\n  extends: .trigger_deploy\n  only:\n    - tags\n\n.trigger_snapshot_deploy:\n  extends: .trigger_deploy\n  when: manual\n  except:\n    - tags\n<\/code><\/pre>\n<p>\u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0432 \u0441\u0430\u043c\u0438\u0445 java \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u0445 .gitlab-ci.yml \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0432\u0435\u0441\u044c\u043c\u0430 \u043a\u043e\u043c\u043f\u0430\u043a\u0442\u043d\u043e \u0438 \u043d\u0435 \u043c\u043d\u043e\u0433\u043e\u0441\u043b\u043e\u0432\u043d\u043e<\/p>\n<p><b class=\"spoiler_title\">.gitlab-ci.yml<\/b><\/p>\n<pre><code class=\"plaintext\">include: https:\/\/gitlab.com\/TouchBIT\/gitlab-ci\/raw\/master\/common.yml\n\nShields4J:\n  extends: .build_java_project\n\nSphinx doc:\n  extends: .build_sphinx_doc\n  variables:\n    DOCKERFILE: .docs\/Dockerfile\n\nSonar review:\n  extends: .sonar_review\n  dependencies:\n    - Shields4J\n\nRelease:\n  extends: .trigger_release_deploy\n\nSnapshot:\n  extends: .trigger_snapshot_deploy<\/code><\/pre>\n<p><noindex><a rel=\"nofollow\" href=\"#toc\">\u041a \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u044e<\/a><\/noindex><\/p>\n<p><noindex><a rel=\"nofollow\" name=\"java_project_pom_xml_conf\"><\/a><\/noindex><\/p>\n<h2 id=\"konfiguraciya-pomxml\">\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f pom.xml<\/h2>\n<p>\u041e\u0447\u0435\u043d\u044c \u0434\u0435\u0442\u0430\u043b\u044c\u043d\u043e \u0434\u0430\u043d\u043d\u0430\u044f \u0442\u0435\u043c\u0430 \u043e\u043f\u0438\u0441\u0430\u043d\u0430 <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/users\/googolplex\/\" class=\"user_link\">Googolplex<\/a><\/noindex> \u0432 <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/171493\/\">\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043c\u0430\u0432\u0435\u043d\u0430 \u0434\u043b\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043f\u043e\u0434\u043f\u0438\u0441\u0438 \u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442\u043e\u0432 \u0432 snapshot- \u0438 staging-\u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438<\/a><\/noindex>, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u043e\u043f\u0438\u0448\u0443 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u044e\u0430\u043d\u0441\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432. \u0422\u0430\u043a \u0436\u0435 \u044f \u043e\u043f\u0438\u0448\u0443 \u043a\u0430\u043a \u043b\u0435\u0433\u043a\u043e \u0438 \u043d\u0435\u043f\u0440\u0438\u043d\u0443\u0436\u0434\u0435\u043d\u043d\u043e \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <code>nexus-staging-maven-plugin<\/code>, \u0435\u0441\u043b\u0438 \u0432\u044b \u043d\u0435 \u0445\u043e\u0442\u0438\u0442\u0435 \u0438\u043b\u0438 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c org.sonatype.oss:oss-parent \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044f \u0434\u043b\u044f \u0441\u0432\u043e\u0435\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"maven_install_plugin\"><\/a><\/noindex><\/p>\n<h3 id=\"maven-install-plugin\">maven-install-plugin<\/h3>\n<p>\u0423\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442 \u043c\u043e\u0434\u0443\u043b\u0438 \u0432 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439.<br \/>\n\u0412\u0435\u0441\u044c\u043c\u0430 \u043f\u043e\u043b\u0435\u0437\u0435\u043d \u0434\u043b\u044f \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0440\u0435\u0448\u0435\u043d\u0438\u0439 \u0432 \u0434\u0440\u0443\u0433\u0438\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u0445, \u0430 \u0442\u0430\u043a \u0436\u0435 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u043e\u0439 \u0441\u0443\u043c\u043c\u043e\u0439.<\/p>\n<pre><code class=\"xml\">&lt;plugin&gt;\n  &lt;groupId&gt;org.apache.maven.plugins&lt;\/groupId&gt;\n  &lt;artifactId&gt;maven-install-plugin&lt;\/artifactId&gt;\n  &lt;executions&gt;\n    &lt;execution&gt;\n      &lt;id&gt;install-project&lt;\/id&gt;\n      &lt;!-- \u0415\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 \u043c\u043d\u043e\u0433\u043e\u043c\u043e\u0434\u0443\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 \u0441 \u0434\u0435\u043f\u043b\u043e\u0435\u043c \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u043f\u043e\u043c\u0438\u043a\u0430 --&gt;\n      &lt;phase&gt;install&lt;\/phase&gt;\n      &lt;!-- \u042f\u0432\u043d\u043e \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u0444\u0430\u0439\u043b\u044b \u0434\u043b\u044f \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 --&gt;\n      &lt;configuration&gt;\n        &lt;file&gt;target\/${project.artifactId}-${project.version}.jar&lt;\/file&gt;\n```target\/${project.artifactId}-${project.version}-sources.jar&lt;\/sources&gt;\n        &lt;pomFile&gt;dependency-reduced-pom.xml&lt;\/pomFile&gt;\n        &lt;!-- \u041f\u0440\u0438\u043d\u0443\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 --&gt;\n        &lt;updateReleaseInfo&gt;true&lt;\/updateReleaseInfo&gt;\n        &lt;!-- \u041a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u044b\u0435 \u0441\u0443\u043c\u043c\u044b \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0446\u0435\u043b\u043e\u0441\u0442\u043d\u043e\u0441\u0442\u0438 --&gt;\n        &lt;createChecksum&gt;true&lt;\/createChecksum&gt;\n      &lt;\/configuration&gt;\n    &lt;\/execution&gt;\n  &lt;\/executions&gt;\n&lt;\/plugin&gt;<\/code><\/pre>\n<p><noindex><a rel=\"nofollow\" href=\"#toc\">\u041a \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u044e<\/a><\/noindex><\/p>\n<p><noindex><a rel=\"nofollow\" name=\"maven_javadoc_plugin\"><\/a><\/noindex><\/p>\n<h3 id=\"maven-javadoc-plugin\">maven-javadoc-plugin<\/h3>\n<p>\u0413\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f javadoc \u0434\u043b\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u0430.<\/p>\n<pre><code class=\"xml\">&lt;plugin&gt;\n  &lt;groupId&gt;org.apache.maven.plugins&lt;\/groupId&gt;\n  &lt;artifactId&gt;maven-javadoc-plugin&lt;\/artifactId&gt;\n  &lt;executions&gt;\n    &lt;execution&gt;\n      &lt;goals&gt;\n        &lt;goal&gt;jar&lt;\/goal&gt;\n      &lt;\/goals&gt;\n      &lt;!-- \u0413\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f javadoc \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u043f\u043e\u0441\u043b\u0435 \u0444\u0430\u0437\u044b \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 --&gt;\n      &lt;phase&gt;prepare-package&lt;\/phase&gt;\n      &lt;configuration&gt;\n        &lt;!-- \u041e\u0447\u0435\u043d\u044c \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442 \u0432 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u0445 --&gt;\n        &lt;failOnError&gt;true&lt;\/failOnError&gt;\n        &lt;failOnWarnings&gt;true&lt;\/failOnWarnings&gt;\n        &lt;!-- \u0423\u0431\u0438\u0440\u0430\u0435\u0442 \u043e\u0448\u0438\u0431\u043a\u0443 \u043f\u043e\u0438\u0441\u043a\u0430 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u0432 target \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 --&gt;\n        &lt;detectOfflineLinks&gt;false&lt;\/detectOfflineLinks&gt;\n      &lt;\/configuration&gt;\n    &lt;\/execution&gt;\n  &lt;\/executions&gt;\n&lt;\/plugin&gt;<\/code><\/pre>\n<p>\u0415\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 \u0435\u0441\u0442\u044c \u043c\u043e\u0434\u0443\u043b\u044c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 java (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0442\u043e\u043b\u044c\u043a\u043e \u0440\u0435\u0441\u0443\u0440\u0441\u044b)<br \/>\n\u0418\u043b\u0438 \u0432\u044b \u043d\u0435 \u0445\u043e\u0442\u0438\u0442\u0435 \u0432 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c javadoc, \u0442\u043e \u0432 \u043f\u043e\u043c\u043e\u0449\u044c <code>maven-jar-plugin<\/code><\/p>\n<pre><code class=\"xml\">&lt;plugin&gt;\n  &lt;groupId&gt;org.apache.maven.plugins&lt;\/groupId&gt;\n  &lt;artifactId&gt;maven-jar-plugin&lt;\/artifactId&gt;\n  &lt;executions&gt;\n    &lt;execution&gt;\n      &lt;id&gt;empty-javadoc-jar&lt;\/id&gt;\n      &lt;phase&gt;generate-resources&lt;\/phase&gt;\n      &lt;goals&gt;\n        &lt;goal&gt;jar&lt;\/goal&gt;\n      &lt;\/goals&gt;\n      &lt;configuration&gt;\n        &lt;classifier&gt;javadoc&lt;\/classifier&gt;\n        &lt;classesDirectory&gt;${basedir}\/javadoc&lt;\/classesDirectory&gt;\n      &lt;\/configuration&gt;\n    &lt;\/execution&gt;\n  &lt;\/executions&gt;\n&lt;\/plugin&gt;<\/code><\/pre>\n<p><noindex><a rel=\"nofollow\" href=\"#toc\">\u041a \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u044e<\/a><\/noindex><\/p>\n<p><noindex><a rel=\"nofollow\" name=\"maven_gpg_plugin\"><\/a><\/noindex><\/p>\n<h3 id=\"maven-gpg-plugin\">maven-gpg-plugin<\/h3>\n<pre><code class=\"xml\">&lt;plugin&gt;\n  &lt;groupId&gt;org.apache.maven.plugins&lt;\/groupId&gt;\n  &lt;artifactId&gt;maven-gpg-plugin&lt;\/artifactId&gt;\n  &lt;executions&gt;\n    &lt;execution&gt;\n      &lt;id&gt;sign-artifacts&lt;\/id&gt;\n      &lt;!-- \u0421\u0431\u043e\u0440\u043a\u0430 \u0431\u0443\u0434\u0435\u0442 \u043f\u0430\u0434\u0430\u0442\u044c, \u0435\u0441\u043b\u0438 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 GPG \u043a\u043b\u044e\u0447 --&gt;\n      &lt;!-- \u041f\u043e\u0434\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u0444\u0430\u0437\u0435 deploy --&gt;\n      &lt;phase&gt;deploy&lt;\/phase&gt;\n      &lt;goals&gt;\n        &lt;goal&gt;sign&lt;\/goal&gt;\n      &lt;\/goals&gt;\n    &lt;\/execution&gt;\n  &lt;\/executions&gt;\n&lt;\/plugin&gt;<\/code><\/pre>\n<p><noindex><a rel=\"nofollow\" href=\"#toc\">\u041a \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u044e<\/a><\/noindex><\/p>\n<p><noindex><a rel=\"nofollow\" name=\"maven_staging_maven_plugin\"><\/a><\/noindex><\/p>\n<h3 id=\"nexus-staging-maven-plugin\">nexus-staging-maven-plugin<\/h3>\n<p>\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f:<\/p>\n<pre><code class=\"xml\">&lt;project&gt;\n  &lt;!-- ... --&gt;\n  &lt;build&gt;\n    &lt;plugins&gt;\n      &lt;!-- ... --&gt;\n      &lt;plugin&gt;\n        &lt;groupId&gt;org.sonatype.plugins&lt;\/groupId&gt;\n        &lt;artifactId&gt;nexus-staging-maven-plugin&lt;\/artifactId&gt;\n      &lt;\/plugin&gt;\n    &lt;\/plugins&gt;\n    &lt;pluginManagement&gt;\n      &lt;plugins&gt;\n        &lt;plugin&gt;\n          &lt;groupId&gt;org.sonatype.plugins&lt;\/groupId&gt;\n          &lt;artifactId&gt;nexus-staging-maven-plugin&lt;\/artifactId&gt;\n          &lt;extensions&gt;true&lt;\/extensions&gt;\n          &lt;configuration&gt;\n            &lt;serverId&gt;sonatype&lt;\/serverId&gt;\n            &lt;nexusUrl&gt;https:\/\/oss.sonatype.org\/&lt;\/nexusUrl&gt;\n            &lt;!-- \u041e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u043c \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0435, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043c\u0435\u0442\u0438\u0442\u044c \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442 \u043a\u0430\u043a release --&gt;\n            &lt;!-- \u041d\u0435 \u0432\u043b\u0438\u044f\u0435\u0442 \u043d\u0430 snapshot \u0432\u0435\u0440\u0441\u0438\u0438 --&gt;\n            &lt;updateReleaseInfo&gt;true&lt;\/updateReleaseInfo&gt;\n          &lt;\/configuration&gt;\n        &lt;\/plugin&gt;\n        &lt;plugin&gt;\n          &lt;groupId&gt;org.apache.maven.plugins&lt;\/groupId&gt;\n          &lt;artifactId&gt;maven-deploy-plugin&lt;\/artifactId&gt;\n          &lt;configuration&gt;\n            &lt;!-- \u041e\u0442\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u043f\u043b\u0430\u0433\u0438\u043d --&gt;\n            &lt;skip&gt;true&lt;\/skip&gt;\n          &lt;\/configuration&gt;\n        &lt;\/plugin&gt;\n      &lt;\/plugins&gt;\n    &lt;\/pluginManagement&gt;\n  &lt;\/build&gt;\n  &lt;distributionManagement&gt;\n    &lt;snapshotRepository&gt;\n      &lt;id&gt;sonatype&lt;\/id&gt;\n      &lt;name&gt;Nexus Snapshot Repository&lt;\/name&gt;\n      &lt;url&gt;https:\/\/oss.sonatype.org\/content\/repositories\/snapshots\/&lt;\/url&gt;\n    &lt;\/snapshotRepository&gt;\n    &lt;repository&gt;\n      &lt;id&gt;sonatype&lt;\/id&gt;\n      &lt;name&gt;Nexus Release Repository&lt;\/name&gt;\n      &lt;url&gt;https:\/\/oss.sonatype.org\/service\/local\/staging\/deploy\/maven2\/&lt;\/url&gt;\n    &lt;\/repository&gt;\n  &lt;\/distributionManagement&gt;\n&lt;\/project&gt;<\/code><\/pre>\n<p>\u0415\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 \u043c\u043d\u043e\u0433\u043e\u043c\u043e\u0434\u0443\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442, \u0438 \u0432\u0430\u043c \u043d\u0435\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0442\u044c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0439 \u043c\u043e\u0434\u0443\u043b\u044c \u0432 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439, \u0442\u043e \u0432 pom.xml \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043c\u043e\u0434\u0443\u043b\u044f \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c <code>nexus-staging-maven-plugin<\/code> \u0441 \u0444\u043b\u0430\u0433\u043e\u043c <code>skipNexusStagingDeployMojo<\/code><\/p>\n<pre><code class=\"xml\">&lt;build&gt;\n  &lt;plugins&gt;\n    &lt;plugin&gt;\n      &lt;groupId&gt;org.sonatype.plugins&lt;\/groupId&gt;\n      &lt;artifactId&gt;nexus-staging-maven-plugin&lt;\/artifactId&gt;\n      &lt;configuration&gt;\n        &lt;skipNexusStagingDeployMojo&gt;true&lt;\/skipNexusStagingDeployMojo&gt;\n      &lt;\/configuration&gt;\n    &lt;\/plugin&gt;\n  &lt;\/plugins&gt;\n&lt;\/build&gt;<\/code><\/pre>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 snapshot\/release \u0432\u0435\u0440\u0441\u0438\u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u0432 <noindex><a rel=\"nofollow\" href=\"https:\/\/oss.sonatype.org\/content\/groups\/staging\/\">staging \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438<\/a><\/noindex><\/p>\n<pre><code class=\"xml\">&lt;repositories&gt;\n  &lt;repository&gt;\n    &lt;id&gt;SonatypeNexus&lt;\/id&gt;\n    &lt;url&gt;https:\/\/oss.sonatype.org\/content\/groups\/staging\/&lt;\/url&gt;\n    &lt;!-- \u041d\u0435 \u043d\u0430\u0434\u043e \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0444\u043b\u0430\u0433\u0438 snapshot\/release \u0434\u043b\u044f \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f --&gt;\n  &lt;\/repository&gt;\n&lt;\/repositories&gt;<\/code><\/pre>\n<p>\u0415\u0449\u0435 \u043f\u043b\u044e\u0441\u044b<\/p>\n<ul>\n<li>\u041e\u0447\u0435\u043d\u044c \u0431\u043e\u0433\u0430\u0442\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0446\u0435\u043b\u0435\u0439 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 nexus \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0435\u043c (<code>mvn help:describe -Dplugin=org.sonatype.plugins:nexus-staging-maven-plugin<\/code>).<\/li>\n<li>\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0440\u0435\u043b\u0438\u0437\u0430 \u043d\u0430 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0432 maven central<\/li>\n<\/ul>\n<p><noindex><a rel=\"nofollow\" href=\"#toc\">\u041a \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u044e<\/a><\/noindex><\/p>\n<p><noindex><a rel=\"nofollow\" name=\"result\"><\/a><\/noindex><\/p>\n<h2 id=\"rezultat\">\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442<\/h2>\n<p><noindex><a rel=\"nofollow\" name=\"snapshot_version_publication\"><\/a><\/noindex><\/p>\n<h3 id=\"publikaciya-snapshot-versii\">\u041f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u044f SNAPSHOT \u0432\u0435\u0440\u0441\u0438\u0438<\/h3>\n<p>\u041f\u0440\u0438 \u0441\u0431\u043e\u0440\u043a\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0440\u0443\u0447\u043d\u043e\u0433\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0437\u0430\u0434\u0430\u0447\u0438 \u043d\u0430 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0443 SNAPSHOT \u0432\u0435\u0440\u0441\u0438\u0438 \u0432 nexus<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/hsto.org\/webt\/ok\/cu\/pc\/okcupcl11yaflpqpad7w5rfakpq.png\"><img decoding=\"async\" alt=\"\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 GitLab CI \u0434\u043b\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 java \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0432 maven central\" src=\"\/wp-content\/uploads\/2019\/04\/de247cd6abe9b52a5b0e64e98865b88e.png\" style=\"display:block;margin: 0 auto;\"><\/a><\/noindex><\/p>\n<p>\u041f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u0434\u0430\u043d\u043d\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438 \u0442\u0440\u0438\u0433\u0433\u0435\u0440\u0438\u0442\u0441\u044f \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430 \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0435 deploy (<noindex><a rel=\"nofollow\" href=\"https:\/\/gitlab.com\/TouchBIT\/deploy\/-\/jobs\/199903630\">\u043f\u0440\u0438\u043c\u0435\u0440<\/a><\/noindex>).<\/p>\n<p><b class=\"spoiler_title\">\u041f\u043e\u0434\u0440\u0435\u0437\u0430\u043d\u043d\u044b\u0439 \u043b\u043e\u0433<\/b><\/p>\n<pre><code class=\"plaintext\">Running with gitlab-runner 11.10.0 (3001a600)\n  on Deploy runner JSKWyxUw\nUsing Shell executor...\nRunning on ih1174328.vds.myihor.ru...\nSkipping Git repository setup\nSkipping Git checkout\nSkipping Git submodules setup\n$ rm -rf .* *\n$ git config --global credential.helper store\n$ echo \"https:\/\/gitlab-ci-token:${CI_JOB_TOKEN}@gitlab.com\" &gt;&gt; ~\/.git-credentials\n$ git clone ${DEPLOY_CI_REPOSITORY_URL} .\nCloning into 'shields4j'...\n$ git checkout ${DEPLOY_CI_COMMIT_SHA}\nNote: checking out '850f86aa317194395c5387790da1350e437125a7'.\nYou are in 'detached HEAD' state. You can look around, make experimental\nchanges and commit them, and you can discard any commits you make in this\nstate without impacting any branches by performing another checkout.\nIf you want to create a new branch to retain commits you create, you may\ndo so (now or later) by using -b with the checkout command again. Example:\n  git checkout -b new_branch_name\nHEAD is now at 850f86a... skip deploy test-core\n$ for pom in $(find . -name pom.xml); do # collapsed multi-line command\n$ if [[ \"${DEPLOY_CI_COMMIT_TAG}\" != \"\" ]]; then # collapsed multi-line command\n[INFO] Scanning for projects...\n[INFO] Inspecting build with total of 4 modules...\n[INFO] Installing Nexus Staging features:\n[INFO]   ... total of 4 executions of maven-deploy-plugin replaced with nexus-staging-maven-plugin\n[INFO] ------------------------------------------------------------------------\n[INFO] Reactor Build Order:\n[INFO] \n[INFO] Shields4J                                                          [pom]\n[INFO] test-core                                                          [jar]\n[INFO] Shields4J client                                                   [jar]\n[INFO] TestNG listener                                                    [jar]\n[INFO] \n[INFO] --------------&lt; org.touchbit.shields4j:shields4j-parent &gt;---------------\n[INFO] Building Shields4J 1.0.0                                           [1\/4]\n[INFO] --------------------------------[ pom ]---------------------------------\n[INFO] \n[INFO] --- versions-maven-plugin:2.5:set (default-cli) @ shields4j-parent ---\n[INFO] Searching for local aggregator root...\n[INFO] Local aggregation root: \/home\/gitlab-deployer\/JSKWyxUw\/0\/TouchBIT\/deploy\/shields4j\n[INFO] Processing change of org.touchbit.shields4j:shields4j-parent:1.0.0 -&gt; 1.0.0-SNAPSHOT\n[INFO] Processing org.touchbit.shields4j:shields4j-parent\n[INFO]     Updating project org.touchbit.shields4j:shields4j-parent\n[INFO]         from version 1.0.0 to 1.0.0-SNAPSHOT\n[INFO] \n[INFO] Processing org.touchbit.shields4j:client\n[INFO]     Updating parent org.touchbit.shields4j:shields4j-parent\n[INFO]         from version 1.0.0 to 1.0.0-SNAPSHOT\n[INFO]     Updating dependency org.touchbit.shields4j:test-core\n[INFO]         from version 1.0.0 to 1.0.0-SNAPSHOT\n[INFO] \n[INFO] Processing org.touchbit.shields4j:test-core\n[INFO]     Updating parent org.touchbit.shields4j:shields4j-parent\n[INFO]         from version 1.0.0 to 1.0.0-SNAPSHOT\n[INFO] \n[INFO] Processing org.touchbit.shields4j:testng\n[INFO]     Updating parent org.touchbit.shields4j:shields4j-parent\n[INFO]         from version 1.0.0 to 1.0.0-SNAPSHOT\n[INFO]     Updating dependency org.touchbit.shields4j:client\n[INFO]         from version 1.0.0 to 1.0.0-SNAPSHOT\n[INFO]     Updating dependency org.touchbit.shields4j:test-core\n[INFO]         from version 1.0.0 to 1.0.0-SNAPSHOT\n[INFO] \n[INFO] ------------------------------------------------------------------------\n[INFO] Reactor Summary:\n[INFO] \n[INFO] Shields4J 1.0.0 .................................... SUCCESS [  0.992 s]\n[INFO] test-core .......................................... SKIPPED\n[INFO] Shields4J client ................................... SKIPPED\n[INFO] TestNG listener 1.0.0 .............................. SKIPPED\n[INFO] ------------------------------------------------------------------------\n[INFO] BUILD SUCCESS\n[INFO] ------------------------------------------------------------------------\n[INFO] Total time: 2.483 s\n[INFO] Finished at: 2019-04-21T02:40:42+03:00\n[INFO] ------------------------------------------------------------------------\n$ mvn clean deploy -DskipTests=${SKIP_TESTS}\n[INFO] Scanning for projects...\n[INFO] Inspecting build with total of 4 modules...\n[INFO] Installing Nexus Staging features:\n[INFO]   ... total of 4 executions of maven-deploy-plugin replaced with nexus-staging-maven-plugin\n[INFO] ------------------------------------------------------------------------\n[INFO] Reactor Build Order:\n[INFO] \n[INFO] Shields4J                                                          [pom]\n[INFO] test-core                                                          [jar]\n[INFO] Shields4J client                                                   [jar]\n[INFO] TestNG listener                                                    [jar]\n[INFO] \n[INFO] --------------&lt; org.touchbit.shields4j:shields4j-parent &gt;---------------\n[INFO] Building Shields4J 1.0.0-SNAPSHOT                                  [1\/4]\n[INFO] --------------------------------[ pom ]---------------------------------\n...\nDELETED\n...\n[INFO]  * Bulk deploy of locally gathered snapshot artifacts finished.\n[INFO] Remote deploy finished with success.\n[INFO] ------------------------------------------------------------------------\n[INFO] Reactor Summary:\n[INFO] \n[INFO] Shields4J 1.0.0-SNAPSHOT ........................... SUCCESS [  2.375 s]\n[INFO] test-core .......................................... SUCCESS [  3.929 s]\n[INFO] Shields4J client ................................... SUCCESS [  3.815 s]\n[INFO] TestNG listener 1.0.0-SNAPSHOT ..................... SUCCESS [ 36.134 s]\n[INFO] ------------------------------------------------------------------------\n[INFO] BUILD SUCCESS\n[INFO] ------------------------------------------------------------------------\n[INFO] Total time: 47.629 s\n[INFO] Finished at: 2019-04-21T02:41:32+03:00\n[INFO] ------------------------------------------------------------------------<\/code><\/pre>\n<p>\u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0432 nexus \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u0430 \u0432\u0435\u0440\u0441\u0438\u044f <noindex><a rel=\"nofollow\" href=\"https:\/\/oss.sonatype.org\/content\/groups\/staging\/org\/touchbit\/shields4j\/shields4j-parent\/1.0.0-SNAPSHOT\/\">1.0.0-SNAPSHOT<\/a><\/noindex>.<\/p>\n<p>\u0412\u0441\u0435 snapshot \u0432\u0435\u0440\u0441\u0441\u0438 \u043c\u043e\u0436\u043d\u043e \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0438\u0437 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f \u043d\u0430 \u0441\u0430\u0439\u0442\u0435 <noindex><a rel=\"nofollow\" href=\"https:\/\/oss.sonatype.org\/#view-repositories;snapshots~browsestorage\">oss.sonatype.org<\/a><\/noindex> \u043f\u043e\u0434 \u0441\u0432\u043e\u0435\u0439 \u0443\u0447\u0435\u0442\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u044c\u044e.<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/hsto.org\/webt\/s-\/_p\/su\/s-_psuvh1j2dxip43r8szrm57x8.png\"><img decoding=\"async\" alt=\"\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 GitLab CI \u0434\u043b\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 java \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0432 maven central\" src=\"\/wp-content\/uploads\/2019\/04\/d8822082ca0a0c33df074ad7904866ae.png\" style=\"display:block;margin: 0 auto;\"><\/a><\/noindex><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"#toc\">\u041a \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u044e<\/a><\/noindex><\/p>\n<p><noindex><a rel=\"nofollow\" name=\"release_version_publication\"><\/a><\/noindex><\/p>\n<h3 id=\"publikaciya-release-versii\">\u041f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u044f release \u0432\u0435\u0440\u0441\u0438\u0438<\/h3>\n<p>\u041f\u0440\u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435 \u0442\u0435\u0433\u0430, \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0442\u0440\u0438\u0433\u0433\u0435\u0440\u0438\u0442\u0441\u044f \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430 \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0435 deploy \u043d\u0430 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0443 \u0440\u0435\u043b\u0438\u0437\u043d\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u0432 nexus (<noindex><a rel=\"nofollow\" href=\"https:\/\/gitlab.com\/TouchBIT\/deploy\/-\/jobs\/199910202\">\u043f\u0440\u0438\u043c\u0435\u0440<\/a><\/noindex>).<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/hsto.org\/webt\/md\/i7\/up\/mdi7upoaqsvumqahwlnb6u5-xnq.png\"><img decoding=\"async\" alt=\"\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 GitLab CI \u0434\u043b\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 java \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0432 maven central\" src=\"\/wp-content\/uploads\/2019\/04\/58b8dce6575a9d8d34af5f1f9a1955c3.png\" style=\"display:block;margin: 0 auto;\"><\/a><\/noindex><\/p>\n<p>\u0421\u0430\u043c\u043e\u0435 \u043f\u0440\u0438\u044f\u0442\u043d\u043e\u0435, \u0447\u0442\u043e \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 close release \u0432 nexus.<\/p>\n<pre><code class=\"plaintext\">[INFO] Performing remote staging...\n[INFO] \n[INFO]  * Remote staging into staging profile ID \"9043b43f77dcc9\"\n[INFO]  * Created staging repository with ID \"orgtouchbit-1037\".\n[INFO]  * Staging repository at https:\/\/oss.sonatype.org:443\/service\/local\/staging\/deployByRepositoryId\/orgtouchbit-1037\n[INFO]  * Uploading locally staged artifacts to profile org.touchbit\n[INFO]  * Upload of locally staged artifacts finished.\n[INFO]  * Closing staging repository with ID \"orgtouchbit-1037\".\nWaiting for operation to complete...\n.........\n[INFO] Remote staged 1 repositories, finished with success.\n[INFO] ------------------------------------------------------------------------\n[INFO] Reactor Summary:\n[INFO] \n[INFO] Shields4J 1.0.0 .................................... SUCCESS [  9.603 s]\n[INFO] test-core .......................................... SUCCESS [  3.419 s]\n[INFO] Shields4J client ................................... SUCCESS [  9.793 s]\n[INFO] TestNG listener 1.0.0 .............................. SUCCESS [01:23 min]\n[INFO] ------------------------------------------------------------------------\n[INFO] BUILD SUCCESS\n[INFO] ------------------------------------------------------------------------\n[INFO] Total time: 01:47 min\n[INFO] Finished at: 2019-04-21T04:05:46+03:00\n[INFO] ------------------------------------------------------------------------<\/code><\/pre>\n<p><b class=\"spoiler_title\">\u0418 \u0435\u0441\u043b\u0438 \u0447\u0442\u043e-\u0442\u043e \u043f\u043e\u0448\u043b\u043e \u043d\u0435 \u0442\u0430\u043a, \u0442\u043e \u0437\u0430\u0434\u0430\u0447\u0430 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0437\u0430\u0432\u0430\u043b\u0438\u0442\u0441\u044f<\/b><\/p>\n<pre><code class=\"plaintext\">[INFO] Performing remote staging...\n[INFO] \n[INFO]  * Remote staging into staging profile ID \"9043b43f77dcc9\"\n[INFO]  * Created staging repository with ID \"orgtouchbit-1038\".\n[INFO]  * Staging repository at https:\/\/oss.sonatype.org:443\/service\/local\/staging\/deployByRepositoryId\/orgtouchbit-1038\n[INFO]  * Uploading locally staged artifacts to profile org.touchbit\n[INFO]  * Upload of locally staged artifacts finished.\n[INFO]  * Closing staging repository with ID \"orgtouchbit-1038\".\nWaiting for operation to complete...\n.......\n[ERROR] Rule failure while trying to close staging repository with ID \"orgtouchbit-1039\".\n[ERROR] \n[ERROR] Nexus Staging Rules Failure Report\n[ERROR] ==================================\n[ERROR] \n[ERROR] Repository \"orgtouchbit-1039\" failures\n[ERROR]   Rule \"signature-staging\" failures\n[ERROR]     * No public key: Key with id: (1f42b618d1cbe1b5) was not able to be located on &amp;lt;a href=http:\/\/keys.gnupg.net:11371\/&amp;gt;http:\/\/keys.gnupg.net:11371\/&amp;lt;\/a&amp;gt;. Upload your public key and try the operation again.\n...\n[ERROR] Cleaning up local stage directory after a Rule failure during close of staging repositories: [orgtouchbit-1039]\n[ERROR]  * Deleting context 9043b43f77dcc9.properties\n[ERROR] Cleaning up remote stage repositories after a Rule failure during close of staging repositories: [orgtouchbit-1039]\n[ERROR]  * Dropping failed staging repository with ID \"orgtouchbit-1039\" (Rule failure during close of staging repositories: [orgtouchbit-1039]).\n[ERROR] Remote staging finished with a failure: Staging rules failure!\n[INFO] ------------------------------------------------------------------------\n[INFO] Reactor Summary:\n[INFO] \n[INFO] Shields4J 1.0.0 .................................... SUCCESS [  4.073 s]\n[INFO] test-core .......................................... SUCCESS [  2.788 s]\n[INFO] Shields4J client ................................... SUCCESS [  3.962 s]\n[INFO] TestNG listener 1.0.0 .............................. FAILURE [01:07 min]\n[INFO] ------------------------------------------------------------------------\n[INFO] BUILD FAILURE\n[INFO] ------------------------------------------------------------------------<\/code><\/pre>\n<p>\u0412 \u0440\u0435\u0437\u0443\u043b\u0442\u0430\u0442\u0435 \u043d\u0430\u043c \u043e\u0441\u0442\u0430\u0435\u0442\u0441\u044f \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0432\u044b\u0431\u043e\u0440. \u0418\u043b\u0438 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0434\u0430\u043d\u043d\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e \u0438\u043b\u0438 \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u0442\u044c.<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/hsto.org\/webt\/id\/n-\/kl\/idn-klr-3skipmuzn5qphstg6vy.png\"><img decoding=\"async\" alt=\"\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 GitLab CI \u0434\u043b\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 java \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0432 maven central\" src=\"\/wp-content\/uploads\/2019\/04\/661b5a1f01bdb825f5149e97eef9bb27.png\" style=\"display:block;margin: 0 auto;\"><\/a><\/noindex><\/p>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0440\u0435\u043b\u0438\u0437\u0430, \u0447\u0435\u0440\u0435\u0437 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442\u044b \u043e\u043a\u0430\u0436\u0443\u0442\u0441\u044f \u0432 <noindex><a rel=\"nofollow\" href=\"https:\/\/mvnrepository.com\/artifact\/org.touchbit.shields4j\"><img decoding=\"async\" alt=\"\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 GitLab CI \u0434\u043b\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 java \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0432 maven central\" src=\"\/wp-content\/uploads\/2019\/04\/fe4f5004f01ec4c5b11163df8f586c80.png\" style=\"display:block;margin: 0 auto;\"><\/a><\/noindex><\/p>\n<p><b class=\"spoiler_title\">\u043e\u0444\u0442\u043e\u043f<\/b><\/p>\n<p>\u0414\u043b\u044f \u043c\u0435\u043d\u044f \u0431\u044b\u043b\u043e \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u0435\u043c, \u0447\u0442\u043e maven \u0438\u043d\u0434\u0435\u043a\u0441\u0438\u0440\u0443\u0435\u0442 \u0434\u0440\u0443\u0433\u0438\u0435 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0435 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438.<br \/>\n\u041f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u043f\u043e\u0434\u043a\u0438\u043d\u0443\u0442\u044c robots.txt, \u0442\u0430\u043a \u043a\u0430\u043a \u043e\u043d \u043f\u0440\u043e\u0438\u043d\u0434\u0435\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043b \u043c\u043e\u0439 \u0441\u0442\u0430\u0440\u044b\u0439 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439.<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"#toc\">\u041a \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u044e<\/a><\/noindex><\/p>\n<p><noindex><a rel=\"nofollow\" name=\"conclusion\"><\/a><\/noindex><\/p>\n<h2 id=\"zaklyuchenie\">\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h2>\n<p>\u0427\u0442\u043e \u043c\u044b \u0438\u043c\u0435\u0435\u043c<\/p>\n<ul>\n<li>\u041e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 deploy-\u043f\u0440\u043e\u0435\u043a\u0442 \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043c\u043e\u0436\u043d\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e CI \u0437\u0430\u0434\u0430\u0447 \u043d\u0430 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0443 \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442\u043e\u0432 \u0432 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0435 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438 \u0434\u043b\u044f \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u044f\u0437\u044b\u043a\u043e\u0432 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438.<\/li>\n<li>Deploy-\u043f\u0440\u043e\u0435\u043a\u0442 \u0438\u0437\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u043d \u043e\u0442 \u043f\u043e\u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0435\u0433\u043e \u0432\u043c\u0435\u0448\u0430\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u0430 \u0438 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0438\u0437\u043c\u0435\u043d\u0435\u043d \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u043c\u0438 \u0441 \u0440\u043e\u043b\u044c\u044e Owner \u0438 Maintainer.<\/li>\n<li>\u041e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 Specific Runner \u0441 &#171;\u0433\u043e\u0440\u044f\u0447\u0438\u043c&#187; \u043a\u044d\u0448\u0435\u043c \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0442\u043e\u043b\u044c\u043a\u043e deploy \u0437\u0430\u0434\u0430\u0447.<\/li>\n<li>\u041f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u044f snapshot\/release \u0432\u0435\u0440\u0441\u0438\u0439 \u0432 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u043e\u043c \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438.<\/li>\n<li>\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 release \u0432\u0435\u0440\u0441\u0438\u0438 \u043d\u0430 \u0433\u043e\u0442\u043e\u0432\u043d\u043e\u0441\u0442\u044c \u043a \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u0432 maven central.<\/li>\n<li>\u0417\u0430\u0449\u0438\u0442\u0430 \u043e\u0442 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438 &#171;\u0441\u044b\u0440\u044b\u0445&#187; \u0432\u0435\u0440\u0441\u0438\u0439 \u0432 maven central.<\/li>\n<li>\u0421\u0431\u043e\u0440\u043a\u0430 \u0438 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u044f snapshot \u0432\u0435\u0440\u0441\u0438\u0439 &#171;\u043f\u043e \u043a\u043b\u0438\u043a\u0443&#187;.<\/li>\n<li>\u0415\u0434\u0438\u043d\u044b\u0439 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439 \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f snapshot\/release \u0432\u0435\u0440\u0441\u0438\u0439.<\/li>\n<li>\u041e\u0431\u0449\u0438\u0439 \u043f\u0430\u0439\u043f\u043b\u0430\u0439\u043d \u043d\u0430 \u0441\u0431\u043e\u0440\u043a\u0443\/\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\/\u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u044e java \u043f\u0440\u043e\u0435\u043a\u0442\u0430.<\/li>\n<\/ul>\n<p>\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 GitLab CI \u043d\u0435 \u0442\u0430\u043a\u0430\u044f \u0441\u043b\u043e\u0436\u043d\u0430\u044f \u0442\u0435\u043c\u0430 \u043a\u0430\u043a \u043a\u0430\u0436\u0435\u0442\u0441\u044f \u043d\u0430 \u043f\u0435\u0440\u0432\u044b\u0439 \u0432\u0437\u0433\u043b\u044f\u0434. \u0414\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0430\u0440\u0443 \u0440\u0430\u0437 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c CI &#171;\u043f\u043e\u0434 \u043a\u043b\u044e\u0447&#187; \u0438 \u0432\u043e\u0442, \u0442\u044b \u0443\u0436\u0435 \u0434\u0430\u043b\u0435\u043a\u043e \u043d\u0435 \u0434\u0438\u043b\u0435\u0442\u0430\u043d\u0442 \u0432 \u044d\u0442\u043e\u043c \u0434\u0435\u043b\u0435. \u0422\u0435\u043c \u0431\u043e\u043b\u0435\u0435 GitLab \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f \u0432\u0435\u0441\u044c\u043c\u0430 \u0438\u0437\u0431\u044b\u0442\u043e\u0447\u043d\u0430. \u041d\u0435 \u0431\u043e\u0439\u0442\u0435\u0441\u044c \u0434\u0435\u043b\u0430\u0442\u044c \u043f\u0435\u0440\u0432\u044b\u0439 \u0448\u0430\u0433. \u0414\u043e\u0440\u043e\u0433\u0430 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u043f\u043e\u0434 \u0448\u0430\u0433\u0430\u043c\u0438 \u0438\u0434\u0443\u0449\u0435\u0433\u043e (\u043d\u0435 \u043f\u043e\u043c\u043d\u044e \u043a\u0442\u043e \u0441\u043a\u0430\u0437\u0430\u043b \ud83d\ude42 ).<\/p>\n<p>\u0411\u0443\u0434\u0443 \u0440\u0430\u0434 \u0444\u0438\u0434\u0431\u044d\u043a\u0443.<\/p>\n<p>\u0412 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c GitLab CI \u0434\u043b\u044f \u043a\u043e\u043d\u043a\u0443\u0440\u0435\u043d\u0442\u043d\u043e\u0433\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0437\u0430\u0434\u0430\u0447 \u0441 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u043c\u0438 \u0442\u0435\u0441\u0442\u0430\u043c\u0438 (\u0441 \u0437\u0430\u043f\u0443\u0441\u043a\u043e\u043c \u0442\u0435\u0441\u0442\u0438\u0440\u0443\u0435\u043c\u044b\u0445 \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 docker-compose), \u0435\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 \u0435\u0441\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d shell \u0440\u0430\u043d\u043d\u0435\u0440.<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"#toc\">\u041a \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u044e<\/a><\/noindex><\/p>\n<p>\u0418\u0441\u0442\u043e\u0447\u043d\u0438\u043a: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/449664\/\">habr.com<\/a><\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0414\u0430\u043d\u043d\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u0430\u043d\u0430 \u043d\u0430 java \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432, \u0443 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0432\u043e\u0437\u043d\u0438\u043a\u043b\u0430 \u043f\u043e\u0442\u0440\u0435\u0431\u043d\u043e\u0441\u0442\u044c \u0431\u044b\u0441\u0442\u0440\u043e \u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u0442\u044c \u0441\u0432\u043e\u0438 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u044b \u0432 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f\u0445 sonatype \u0438\/\u0438\u043b\u0438 maven central \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c GitLab. \u0412 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043f\u0440\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0443 gitlab-runner, gitlab-ci \u0438 maven-plugin \u0434\u043b\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438. \u041f\u0440\u0435\u0434\u043f\u043e\u0441\u044b\u043b\u043a\u0438: \u0411\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 mvn \u0438 GPG \u043a\u043b\u044e\u0447\u0435\u0439. \u0411\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0445 CI \u0437\u0430\u0434\u0430\u0447. \u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442\u043e\u0432 (release\/snapshot) \u0432 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0435 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":24298,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-32495","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 4.9.10 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0414\u0430\u043d\u043d\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u0430\u043d\u0430 \u043d\u0430 java \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432, \u0443 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0432\u043e\u0437\u043d\u0438\u043a\u043b\u0430 \u043f\u043e\u0442\u0440\u0435\u0431\u043d\u043e\u0441\u0442\u044c \u0431\u044b\u0441\u0442\u0440\u043e \u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u0442\u044c \u0441\u0432\u043e\u0438 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u044b \u0432 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f\u0445 sonatype \u0438\/\u0438\u043b\u0438 maven central \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c GitLab. \u0412 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043f\u0440\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0443 gitlab-runner, gitlab-ci \u0438 maven-plugin \u0434\u043b\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438. \u041f\u0440\u0435\u0434\u043f\u043e\u0441\u044b\u043b\u043a\u0438: \u0411\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 mvn \u0438 GPG \u043a\u043b\u044e\u0447\u0435\u0439. \u0411\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0445 CI \u0437\u0430\u0434\u0430\u0447. \u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442\u043e\u0432 (release\/snapshot) \u0432 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0435\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/nastrojka-gitlab-ci-dlya-zagruzki-java-proekta-v-maven-central\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.10\" \/>\n\t\t<meta property=\"og:locale\" content=\"de_DE\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 GitLab CI \u0434\u043b\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 java \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0432 maven central | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0414\u0430\u043d\u043d\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u0430\u043d\u0430 \u043d\u0430 java \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432, \u0443 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0432\u043e\u0437\u043d\u0438\u043a\u043b\u0430 \u043f\u043e\u0442\u0440\u0435\u0431\u043d\u043e\u0441\u0442\u044c \u0431\u044b\u0441\u0442\u0440\u043e \u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u0442\u044c \u0441\u0432\u043e\u0438 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u044b \u0432 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f\u0445 sonatype \u0438\/\u0438\u043b\u0438 maven central \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c GitLab. \u0412 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043f\u0440\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0443 gitlab-runner, gitlab-ci \u0438 maven-plugin \u0434\u043b\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438. \u041f\u0440\u0435\u0434\u043f\u043e\u0441\u044b\u043b\u043a\u0438: \u0411\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 mvn \u0438 GPG \u043a\u043b\u044e\u0447\u0435\u0439. \u0411\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0445 CI \u0437\u0430\u0434\u0430\u0447. \u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442\u043e\u0432 (release\/snapshot) \u0432 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0435\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/nastrojka-gitlab-ci-dlya-zagruzki-java-proekta-v-maven-central\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T18:47:21+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2021-02-01T09:37:22+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Einrichtung von GitLab CI zum Hochladen eines Java-Projekts in Maven Central | ProHoster","description":"Dieser Artikel richtet sich an Java-Entwickler, die schnell ihre Produkte in den Repositories von Sonatype und\/oder Maven Central mit GitLab ver\u00f6ffentlichen m\u00f6chten. In diesem Artikel werde ich die Einrichtung von gitlab-runner, gitlab-ci und dem Maven-Plugin zur L\u00f6sung dieser Aufgabe behandeln. Voraussetzungen: Sichere Speicherung von mvn- und GPG-Schl\u00fcsseln. Sicheres Ausf\u00fchren \u00f6ffentlicher CI-Aufgaben. Hochladen von Artefakten (Release\/Snapshot) in \u00f6ffentliche Repositories.","canonical_url":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/nastrojka-gitlab-ci-dlya-zagruzki-java-proekta-v-maven-central","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"de_DE","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 GitLab CI \u0434\u043b\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 java \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0432 maven central | ProHoster","og:description":"\u0414\u0430\u043d\u043d\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u0430\u043d\u0430 \u043d\u0430 java \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432, \u0443 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0432\u043e\u0437\u043d\u0438\u043a\u043b\u0430 \u043f\u043e\u0442\u0440\u0435\u0431\u043d\u043e\u0441\u0442\u044c \u0431\u044b\u0441\u0442\u0440\u043e \u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u0442\u044c \u0441\u0432\u043e\u0438 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u044b \u0432 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f\u0445 sonatype \u0438\/\u0438\u043b\u0438 maven central \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c GitLab. \u0412 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043f\u0440\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0443 gitlab-runner, gitlab-ci \u0438 maven-plugin \u0434\u043b\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438. \u041f\u0440\u0435\u0434\u043f\u043e\u0441\u044b\u043b\u043a\u0438: \u0411\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 mvn \u0438 GPG \u043a\u043b\u044e\u0447\u0435\u0439. \u0411\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0445 CI \u0437\u0430\u0434\u0430\u0447. \u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442\u043e\u0432 (release\/snapshot) \u0432 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0435","og:url":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/nastrojka-gitlab-ci-dlya-zagruzki-java-proekta-v-maven-central","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T18:47:21+00:00","article:modified_time":"2021-02-01T09:37:22+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"32495","title":null,"description":"","keywords":"","keyphrases":null,"primary_term":null,"canonical_url":"","og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-21 11:09:21","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 14:56:15","updated":"2026-01-21 11:09:21"},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/32495","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/comments?post=32495"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/32495\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media\/24298"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media?parent=32495"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/categories?post=32495"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/tags?post=32495"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}