Статьи

Полевые заметки из Ad-Hoc Jenkins Pipeline

У меня недавно был вызов. Я написал PR для улучшения библиотеки с открытым исходным кодом, но владельцы этой библиотеки не объединили ее. Я действительно не хочу ждать, пока они объединят библиотеку, пока я не смогу ее использовать, поэтому мне нужно развернуть свою копию с измененным идентификатором версии на частном артефактном сервере.

Тот факт, что я не могу изменить репо, чтобы иметь Jenkinsfile, и тот факт, что то, что я пытаюсь сделать, с точки зрения сборки с моей собственной специальной версией, требует некоторого тщательного написания сценариев. Решение состоит в том, чтобы использовать специальный бит конвейера в качестве чистой сборки конвейера в Jenkins.

Тот факт, что вы можете написать произвольный мощный скрипт, подобный этому, и просто запустить его в коробке Jenkins, является достаточным доказательством того, что вы должны держать их в безопасности!

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
// define the server instance via it's name and
// the artifactory plugin
def server = Artifactory.server "artifactory_prod"
server.credentialsId = 'artifactory-apitoken'
 
pipeline {
    environment {
        buildInfo = null
    }
     
    agent any
    stages {
        // A pure pipeline build needs to be told how to check out
        stage ('Checkout') {
            steps {
                // the feature branch I hope be merged to an official release
                // and the link to my github repo
                git branch: 'batch_uses_s3',
                    url: 'https://github.com/ashleyfrieze/amazon-sqs-java-extended-client-lib'
            }
        }
        stage ('Rewrite version') {
            steps {
                script {
                    // the version of the pom file from git is not under our control
                    // so modify it to disambiguate from the _real_ version
                    def descriptor = Artifactory.mavenDescriptor()
                    descriptor.version = '1.0.2f'
                    descriptor.transform()
                }
            }
        }
        stage ('Build') {
            steps {
                script {
                    def rtMaven = Artifactory.newMavenBuild()
                    // Set Maven build tool
                    rtMaven.tool = 'maven-3-6-1'
 
                    // the artifactory virtual repos for resolving
                    // dependencies
                    rtMaven.resolver (
                        server: server,
                        releaseRepo: 'libs-release',
                        snapshotRepo: 'libs-snapshot'
                    )
 
                    // the run command in a moment is going to build
                    // then deploy - we need to set the target server
                    // and repo to use
                    rtMaven.deployer (
                        server: server,
                        releaseRepo: 'internal-release'
                    )
                     
                    // do the build - though this doesn't include deploy
                    // the artifactory plugin will do the deploy for us
                    buildInfo = rtMaven.run (
                        pom: 'pom.xml',
                        goals: 'clean install',
                    )
                }
                 
                junit 'target/surefire-reports/*.xml'
            }
        }
         
    }
}

Там есть некоторые копируемые лакомые кусочки … но вот в чем дело. Это не отличный способ использовать Maven. Кажется, что авторы артефакта несколько перегружены собственным продуктом и думают, что это центр сборки … и это странно.

Приходиться отдавать казнь мавена за артефакт, чтобы он бежал за тобой, мало смысла. Это своего рода помощь здесь, поскольку она перекрывает отсутствие нашей локальной артефакты в файле pom сборки данного конкретного репозитория maven, но это забавный способ. Maven позволяет вам контролировать использование артефакта через pom или командную строку. Кажется, что сделать это с помощью плагина тесно взаимосвязано, и я уверен, что он дает вам меньше возможностей для настройки, а не больше.

Это, однако, спасает вас, зная, как установить правильные значения в командной строке maven.

См. Оригинальную статью здесь: Полевые заметки из Ad-Hoc Jenkins Pipeline

Мнения, высказанные участниками Java Code Geeks, являются их собственными.