[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-ci-cd-chto-takoe-shared-libraries-v-jenkins":3},{"id":4,"slug":5,"topicId":6,"topicSlug":7,"topicName":8,"topicEmoji":9,"question":10,"answer":11,"codeLang":12,"codeSrc":12,"important":12,"commonMistakes":12,"modernUsage":12,"difficulty":13,"tags":14,"related":21,"progress":22,"seo":23},200,"chto-takoe-shared-libraries-v-jenkins",6,"ci-cd","CI\u002FCD","🔄","Что такое Shared Libraries в Jenkins","**Shared Libraries** — это механизм Jenkins, позволяющий выносить общую логику пайплайнов в отдельный Git-репозиторий и переиспользовать её в нескольких проектах, обеспечивая единообразие CI\u002FCD-процессов и централизованное управление.\n\nАналогия: Shared Library — это как общий шаблон договора в юридическом отделе. Вместо того чтобы каждый проект писал свой пайплайн с нуля, команда DevOps создает «библиотеку шаблонов», и проекты просто указывают, какой шаблон использовать.\n\n### Структура Shared Library\n\n```text\nshared-library-repo\u002F\n├── vars\u002F                     # Глобальные переменные и функции\n│   ├── buildJavaApp.groovy   # Вызывается как buildJavaApp() в Jenkinsfile\n│   ├── deployToNexus.groovy\n│   └── notifyTeam.groovy\n├── src\u002F                      # Groovy-классы (полноценный ООП)\n│   └── com\u002F\n│       └── company\u002F\n│           └── Pipeline.groovy\n└── resources\u002F                # Ресурсы (конфиги, шаблоны)\n    └── settings.xml\n```\n\n- **`vars\u002F`** — содержит глобальные функции. Каждый файл `\u003Cname>.groovy` становится доступен как шаг `\u003Cname>()` в Jenkinsfile.\n- **`src\u002F`** — содержит классы Groovy с полноценной ООП-логикой. Используется для сложных сценариев.\n- **`resources\u002F`** — статические ресурсы (конфиги, шаблоны), доступные через `libraryResource()`.\n\n### Пример функции в vars\u002FbuildJavaApp.groovy\n\n\u003Cdetails>\n\u003Csummary>buildJavaApp.groovy\u003C\u002Fsummary>\n\n```groovy\ndef call(Map config = [:]) {\n    def mavenVersion = config.mavenVersion ?: 'Maven-3.9'\n    def jdkVersion = config.jdkVersion ?: 'JDK-17'\n    def skipTests = config.skipTests ?: false\n\n    pipeline {\n        agent { label 'java' }\n        tools {\n            maven mavenVersion\n            jdk jdkVersion\n        }\n        stages {\n            stage('Build') {\n                steps { sh 'mvn clean compile' }\n            }\n            stage('Test') {\n                when { expression { !skipTests } }\n                steps { sh 'mvn test' }\n            }\n            stage('Package') {\n                steps { sh 'mvn package -DskipTests' }\n            }\n        }\n    }\n}\n```\n\n\u003C\u002Fdetails>\n\n### Использование в Jenkinsfile проекта\n\nПростейший вариант — вызов готового пайплайна одной строкой:\n\n```groovy\n@Library('my-shared-library') _\n\nbuildJavaApp(mavenVersion: 'Maven-3.9', jdkVersion: 'JDK-17')\n```\n\nИспользование отдельных функций из библиотеки:\n\n```groovy\n@Library('my-shared-library') _\n\npipeline {\n    agent any\n    stages {\n        stage('Build') {\n            steps { sh 'mvn clean package' }\n        }\n        stage('Publish') {\n            steps { deployToNexus(artifactId: 'my-app', version: '1.0.0') }\n        }\n    }\n    post {\n        failure { notifyTeam(channel: '#builds', status: 'FAILED') }\n    }\n}\n```\n\n### Подключение Shared Library к Jenkins\n\nShared Library регистрируется в Jenkins через:\n1. **Manage Jenkins -> Configure System -> Global Pipeline Libraries** — доступна всем проектам.\n2. **Folder-level Libraries** — доступна проектам внутри папки.\n3. Можно загрузить динамически через `library()`:\n\n```groovy\nlibrary identifier: 'my-shared-library@main',\n        retriever: modernSCM([\n            $class: 'GitSCMSource',\n            remote: 'https:\u002F\u002Fgit.company.com\u002Fdevops\u002Fshared-library.git',\n            credentialsId: 'git-creds'\n        ])\n```\n\n### Версионирование Shared Library\n\n```groovy\n@Library('my-shared-library@v2.1.0') _     \u002F\u002F Конкретный тег\n@Library('my-shared-library@main') _        \u002F\u002F Ветка\n@Library('my-shared-library@abc1234') _     \u002F\u002F Конкретный коммит\n```\n\n### Вывод\n\nShared Libraries особенно полезны в банковской среде, где десятки микросервисов используют одинаковый CI\u002FCD-процесс. Они позволяют стандартизировать пайплайны, централизованно управлять ими и обеспечивать единообразие проверок (security scan, quality gate, деплой).\n\n> **На собеседовании:** Shared Libraries — это тема уровня senior\u002FDevOps. Ключевые вопросы: структура библиотеки (vars vs src), способы подключения и версионирования, а также зачем это нужно в масштабе организации. Покажите, что понимаете проблему дублирования логики пайплайнов между проектами.","","senior",[15,16,17,18,19,20],"переиспользование","groovy","shared-libraries","стандартизация","jenkins","cicd",[],null,{"title":24,"description":25,"ogTitle":26,"ogDescription":27,"keywords":28,"schemaAnswer":34,"featuredSnippetReady":35},"Shared Libraries в Jenkins — переиспользование логики пайплайнов — Gymterview","Shared Libraries выносят общую логику пайплайнов в отдельный Git-репозиторий. Структура: vars\u002F, src\u002F, resources\u002F. Подключение через @Library в Jenkinsfile.","Shared Libraries в Jenkins — стандартизация пайплайнов для команд","Shared Libraries — общая логика в отдельном Git-репозитории. Структура: vars (функции), src (классы), resources. Подключение: @Library('name') _.",[29,30,31,32,33],"Shared Libraries Jenkins","Jenkins shared library","vars groovy Jenkins","@Library Jenkins","переиспользование пайплайнов","Shared Libraries — механизм Jenkins для выноса общей логики пайплайнов в отдельный Git-репозиторий. Структура: vars\u002F (глобальные функции, вызываемые из Jenkinsfile), src\u002F (Groovy-классы), resources\u002F (конфиги, шаблоны). Подключаются через @Library('name') _ и позволяют стандартизировать CI\u002FCD для десятков микросервисов.",true]