web-dev-qa-db-ja.com

jenkinsパイプラインスクリプトでgradle変数を取得する

Groovyビルドスクリプトを使用して、ビルドパイプラインを「パイプラインプラグイン」に移行しようとしています。

私のパイプラインは通常次のとおりです。

  1. テスト(gradle)
  2. IntegrationTest(gradle)
  3. ビルド(gradle)
  4. 公開(アーティファクトリー)

Jenkinsビルドスクリプトでバージョン/グループなどのgradle変数を使用して、アーティファクト内の正しいフォルダーに公開したいと思います。過去にアーティファクトプラグインが私に代わってくれたもの。これはどのように達成できますか?

シングルgradleプロジェクトの場合、次のようなものを使用します。

node('master')
{
    def version = 1.0
    def gitUrl = 'some.git'
    def projectRoot = ""
    def group = "dashboard/frontend/"
    def artifactName = "dashboard_ui"
    def artifactRepo = "ext-release-local"

    stage "git"

    git branch: 'develop', poll: true, url: "${gitUrl}"

    dir(projectRoot)
    {

        sh 'chmod +x gradlew'
        stage "test"
        sh './gradlew clean test'

        stage "build"
        sh './gradlew build createPom'

        stage "artifact"
        def server = Artifactory.server('artifactory_dev01')
        def uploadSpec = """{
          "files": [
            {
              "pattern": "build/**.jar",
              "target": "${artifactRepo}/$group/${artifactName}/${version}/${artifactName}-${version}.jar"
            },
            {
              "pattern": "pom.xml",
              "target": "${artifactRepo}/$group/${artifactName}/${version}/${artifactName}.pom"
            }
         ]
        }"""
        def buildInfo1 = server.upload spec: uploadSpec
        server.publishBuildInfo buildInfo1
    }
}
6
p.streef

この問題に取り組むには、実際には2つの異なるアプローチがあると思います。

1.shスクリプトからバージョン/グループを取得します

GradleビルドツールからGradleバージョンを取得する方法を見つけ(例:gradle getVersion()ですが、Gradleに精通していません)、シェルスクリプトを使用してこのバージョンを取得します。バージョンを取得するためのGradleコマンドがgradle getVersion()の場合、パイプラインで実行します。

def projectVersion = sh script: "gradle getVersion()", returnStdout: true
def projectGroup= sh script: "gradle getGroup()", returnStdout: true

次に、現在のパイプラインに$projectVersion変数と$projectGroup変数を挿入します。

2.Artifactoryに公開するようにGradleビルドスクリプトを構成します

これは私が個人的に好む逆のアプローチです。ArtifactoryにすべてのGradleプロジェクト情報を提供する代わりに、GradleにArtifactory設定を提供し、Gradleゴールを使用してArtifactoryに簡単に公開します。

JFrogの Gradleの操作 セクションには、このソリューションに関する優れたドキュメントがあります。基本的に、次の手順に従います。

  1. Gradle Build Script Generatorを使用してArtifactoryから準拠したGradleビルドスクリプトを生成し、プロジェクトビルドスクリプトに含めます
  2. Gradleゴールgradle artifactoryPublishを使用して、現在のアーティファクトをArtifactoryに単純に公開します
3
Pom12

今後の参考のために、より最新の宣言型パイプラインの例をここに示します。

pipeline {
    agent any
    stages {
        stage('somestage') {
            steps {
                script {
                    def version = sh (
                        script: "./gradlew properties -q | grep \"version:\" | awk '{print \$2}'",
                        returnStdout: true
                    ).trim()
                    sh "echo Building project in version: $version"

                }
            }
        }
    }
}

参照:

7
Tobi Nonymous