Gradle Github Action 发布

简介

Gradle 整合 GitHub Actions 自动化发布 Java 项目至 Maven 仓库。文章内是将项目发布至 sonatype 提供的仓库中。

证书

生成

gpg --full-generate-key

查看证书id

gpg --list-secret-keys --keyid-format SHORT

/Users/lake/.gnupg/pubring.kbx
------------------------------
sec   rsa2048/7BDDF87A 2020-07-24 [SC]
xxxxxxx.....

证书发布

gpg --keyserver hkps.pool.sks-keyservers.net --send-keys 7BDDF87A

Gradle 项目配置

group 'com.dounine'
version '1.0.4'

buildscript {
    repositories {
        maven {
            url "https://plugins.gradle.org/m2/"
        }
    }
    dependencies {
        classpath "com.github.jengelman.gradle.plugins:shadow:4.0.2"
    }
}

apply plugin: "com.github.johnrengelman.shadow"
apply plugin: 'signing'
apply plugin: 'scala'
apply plugin: 'maven-publish'

task sourcesJar(type: Jar) {
    from sourceSets.main.allJava
    classifier = 'sources'
}

task javadocJar(type: Jar) {
    from javadoc
    classifier = 'javadoc'
}

publishing {
    publications {
        mavenJava(MavenPublication) {
            from components.java

            artifact sourcesJar
            artifact javadocJar

            pom {
                name = 'spark-sql-datasource'
                description = 'spark sql datasource'
                url = 'https://github.com/dounine/spark-sql-datasource'
                licenses {
                    license {
                        name = 'The Apache License, Version 2.0'
                        url = 'http://www.apache.org/licenses/LICENSE-2.0.txt'
                    }
                }
                developers {
                    developer {
                        id = 'lake'
                        name = 'lake'
                        email = '[email protected]'
                    }
                }
                scm {
                    connection = 'scm:git:git://github.com/dounine/spark-sql-datasource.git'
                    developerConnection = 'scm:git:ssh://github.com/dounine/spark-sql-datasource.git'
                    url = 'https://github.com/dounine/spark-sql-datasource'
                }
            }
        }
    }
    repositories {
        maven {
            def releasesRepoUrl = "https://oss.sonatype.org/service/local/staging/deploy/maven2/"
            def snapshotsRepoUrl = "https://oss.sonatype.org/content/repositories/snapshots/"
            url = version.endsWith('SNAPSHOT') ? snapshotsRepoUrl : releasesRepoUrl
            credentials {
                username System.getenv("MAVEN_USERNAME") ?: MAVEN_USERNAME
                password System.getenv("MAVEN_PASSWORD") ?: MAVEN_PASSWORD
            }
        }
    }
}

sourceCompatibility = 1.8

repositories {
    mavenLocal()
    mavenCentral()
    maven { url "http://repo.hortonworks.com/content/repositories/releases/" }
}


task copyJars(type: Copy) {
    from configurations.runtime
    into new File('build/libs/lib')
}
compileJava.dependsOn copyJars

shadowJar {
    zip64 true
}

signing {
    sign publishing.publications.mavenJava
}

ext {
    flinkVersion = "1.8-SNAPSHOT"
    hbaseVersion = "2.0.0"
    slf4jVersion = "1.7.25"
}

dependencies {
    compile 'org.scala-lang:scala-library:2.12.12'

    compile group: 'org.apache.spark', name: 'spark-sql_2.12', version: '3.0.0'
    compile group: 'mysql', name: 'mysql-connector-java', version: '5.1.47'

    testCompile group: 'junit', name: 'junit', version: '4.12'
}

Github Action

密钥导出

gpg --export-secret-keys 7BDDF87A > /tmp/secring.gpg

将密钥进行base64编码

base64 /tmp/secring.gpg > /tmp/secring.gpg.b64

Secrets配置

name value
MAVEN_PASSWORD sonatype仓库密码
MAVEN_USERNAME sonatype仓库用户名
SIGNING_KEY_ID GPG证书ID
SIGNING_PASSWORD GPG密码
SIGNING_SECRET_KEY_RING_KEY GPG文件密钥base64编码

将SIGNING_SECRET_KEY_RING_KEY值设置为上面的secring.gpg.b64文件内容

项目/.github/workflows/main.yaml

name: Publish package to the Maven Central Repository
on:
  release:
    types: [created]
jobs:
  publish:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - name: Set up Java
        uses: actions/setup-java@v1
        with:
          java-version: 1.8
      - name: Decode gpg
        run: |
          echo "${
   
   { secrets.SIGNING_SECRET_KEY_RING_KEY }}" > ~/secring.gpg.b64
          base64 -d ~/secring.gpg.b64 > ~/secring.gpg
      - name: Publish package
        run: gradle publish -Psigning.keyId=${
   
   { secrets.SIGNING_KEY_ID }} -Psigning.password=${
   
   { secrets.SIGNING_PASSWORD }} -Psigning.secretKeyRingFile=$(echo  ~/secring.gpg)
        env:
          MAVEN_USERNAME: ${
   
   { secrets.MAVEN_USERNAME }}
          MAVEN_PASSWORD: ${
   
   { secrets.MAVEN_PASSWORD }}

在github右边创建Release版本即可自动打包上传
在这里插入图片描述
查看action的打包运行情况
在这里插入图片描述

最后登录 sonatype 把上传的项目进行close > release 即可发布

猜你喜欢

转载自blog.csdn.net/dounine/article/details/122627286