Как мне создать pom.xml для компиляции моих общих библиотек Jenkins Pipeline? - PullRequest
2 голосов
/ 15 марта 2019

A Общая библиотека Jenkins Pipeline обычно имеет следующую структуру каталогов:

(root)
+- src                     # Groovy source files
|   +- org
|       +- foo
|           +- Bar.groovy  # for org.foo.Bar class
+- vars
|   +- foo.groovy          # for global 'foo' variable
|   +- foo.txt             # help for 'foo' variable
+- resources               # resource files (external libraries only)
|   +- org
|       +- foo
|           +- bar.json    # static helper data for org.foo.Bar

Это grovvy-файлы, которые используют некоторый код из библиотек Jenkins. Я хотел бы иметь возможность скомпилировать их все, используя maven, возможно, используя GMavenPlus плагин maven, и определив некоторые библиотеки Jenkins как зависимости.

Я хочу затем скомпилировать, чтобы проверить файлы перед их фиксацией или загрузкой в ​​Jenkins. Возможно, я бы также дал мне лучшее завершение кода при редактировании файлов.

Может ли кто-нибудь помочь мне создать файл pom.xml, который скомпилирует его?

Ответы [ 2 ]

3 голосов
/ 15 марта 2019

Я бы предложил использовать Gradle вместо Maven. Ниже вы можете найти минимальный build.gradle файл, который позволяет вам скомпилировать, протестировать и упаковать совместно используемую библиотеку Jenkins (и даже установить в репозиторий Maven, если вам нужно поделиться ею с другим проектом):

apply plugin: 'groovy'
apply plugin: 'idea'
apply plugin: 'jacoco'
apply plugin: 'maven'


repositories {
    mavenCentral()
}

sourceSets {
    main {
        groovy {
            srcDirs = ['src', 'vars']
        }
        resources {
            srcDirs = ['resources']
        }
    }
    test {
        groovy {
            srcDirs = ['test']
        }
    }
}

dependencies {
    compile 'com.cloudbees:groovy-cps:1.22'
    compile 'org.codehaus.groovy:groovy-all:2.4.12'

    // https://github.com/jenkinsci/JenkinsPipelineUnit
    testCompile 'com.lesfurets:jenkins-pipeline-unit:1.1'
    testCompile 'junit:junit:4.12'
}

jacocoTestReport {
    reports {
        xml.enabled true
    }
}

Этот минимальный build.gradle файл использует jenkins-pipeline-unit - инфраструктуру модульного тестирования для конвейеров Jenkins. Это очень удобно и облегчает жизнь в 10 раз.

Кроме того, вы можете проверить следующий проект шаблона Gradle для общей библиотеки Jenkins Pipeline - https://github.com/mkobit/jenkins-pipeline-shared-library-example Он поставляется со многими другими функциями, а также помогает поддерживать проект общей библиотеки.

Однако, если вам действительно нужно использовать Maven для этого, вы можете использовать следующее pom.xml:

<?xml version="1.0" encoding="UTF-8"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
         xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.example</groupId>
    <artifactId>jenkins-shared-library</artifactId>
    <version>1.0.0</version>
    <dependencies>
        <dependency>
            <groupId>com.cloudbees</groupId>
            <artifactId>groovy-cps</artifactId>
            <version>1.22</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>org.codehaus.groovy</groupId>
            <artifactId>groovy-all</artifactId>
            <version>2.4.12</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>com.lesfurets</groupId>
            <artifactId>jenkins-pipeline-unit</artifactId>
            <version>1.1</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <sourceDirectory>src/</sourceDirectory>
        <testSourceDirectory>test/</testSourceDirectory>
        <plugins>
            <plugin>
                <groupId>org.codehaus.gmavenplus</groupId>
                <artifactId>gmavenplus-plugin</artifactId>
                <version>1.6.2</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>addSources</goal>
                            <goal>addTestSources</goal>
                            <goal>generateStubs</goal>
                            <goal>compile</goal>
                            <goal>generateTestStubs</goal>
                            <goal>compileTests</goal>
                            <goal>removeStubs</goal>
                            <goal>removeTestStubs</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <sources>
                        <source>
                            <directory>${project.basedir}/src</directory>
                            <includes>
                                <include>**/*.groovy</include>
                            </includes>
                        </source>
                        <source>
                            <directory>${project.basedir}/vars</directory>
                            <includes>
                                <include>**/*.groovy</include>
                            </includes>
                        </source>
                    </sources>
                    <testSources>
                        <source>
                            <directory>${project.basedir}/test</directory>
                            <includes>
                                <include>**/*.groovy</include>
                            </includes>
                        </source>
                    </testSources>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-source-plugin</artifactId>
                <version>2.4</version>
                <executions>
                    <execution>
                        <id>attach-sources</id>
                        <goals>
                            <goal>jar-no-fork</goal>
                            <goal>test-jar-no-fork</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

Это более или менее эквивалентный файл build.gradle.

0 голосов
/ 17 марта 2019

Мое решение с Maven до сих пор вы можете увидеть в следующем pom.xml.Вы можете скомпилировать ваши исходные файлы с помощью команды mvn clean compile.Если вы хотите узнать, что в исходных файлах и какая структура проекта была использована, вы можете проверить: https://github.com/snukone/compile-jenkins-pipeline

Если у вас есть дополнительные вопросы или идеи по улучшению, просто дайте мне знать:)

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.foo</groupId>
    <artifactId>bar</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
        <dependency>
            <groupId>org.codehaus.groovy</groupId>
            <artifactId>groovy-all</artifactId>
            <version>2.5.6</version>
            <type>pom</type>
        </dependency>
    </dependencies>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <build>
        <resources>
            <resource>
                <directory>resources</directory>
            </resource>
        </resources>
        <plugins>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>build-helper-maven-plugin</artifactId>
                <version>3.0.0</version>
                <executions>
                    <execution>
                        <phase>generate-sources</phase>
                        <goals>
                            <goal>add-source</goal>
                        </goals>
                        <configuration>
                            <sources>
                                <source>src</source>
                                <source>vars</source>
                            </sources>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.0</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <compilerId>groovy-eclipse-compiler</compilerId>
                </configuration>
                <dependencies>
                    <dependency>
                        <groupId>org.codehaus.groovy</groupId>
                        <artifactId>groovy-eclipse-compiler</artifactId>
                        <version>2.9.2-01</version>
                    </dependency>
                    <dependency>
                        <groupId>org.codehaus.groovy</groupId>
                        <artifactId>groovy-eclipse-batch</artifactId>
                        <version>2.5.6-01</version>
                    </dependency>
                </dependencies>
            </plugin>
        </plugins>
    </build>
</project>
...