适用于Gradle的GitLab CI机密变量发布

时间:2018-07-02 14:00:22

标签: gradle gitlab gitlab-ci gitlab-ci-runner gradlew

如何使用GitLab CI秘密变量设置Gradle发布任务用户凭证?我正在使用gradle maven publish plugin,这是build.gradle的代码段

repositories {
    maven {
      credentials {
        username artifactUser
        password artifactPass
      }
      url "..."
    }
  }

我尝试如下使用gradle.properties

artifactUser=${env.MAVEN_REPO_USER}
artifactPass=${env.MAVEN_REPO_PASS}

还有几种访问.gitlab-ci.yml文件中的秘密变量的方法(因为gradle.properties没有从gradle中获取,或者变量没有正确转换,因此位于根项目目录中)

方法1

'./gradlew publish -x test -PartifactUser=${env.MAVEN_REPO_USER} -PartifactPass=${env.MAVEN_REPO_PASS}'

错误:/bin/bash: line 56: -PartifactUser=${env.MAVEN_REPO_USER}: bad substitution

方法2

    before_script:
      - chmod +x ./gradlew
      - export REPO_USER=${env.MAVEN_REPO_USER}
      - export REPO_PASS=${env.MAVEN_REPO_PASS}
    ...
    deploy:
  stage: deploy
  script:
    - ./gradlew publish -x test -PartifactUser=$REPO_USER -PartifactPass=$REPO_PASS

我正在使用openjdk:8-jdk-slim图像通过gradle包装器进行构建。似乎有几种issues会使用这种变量用法,我们有什么解决方法吗?

3 个答案:

答案 0 :(得分:6)

您的env.中不需要.gitlab-ci.yml prefinx。您也不需要重新导出变量。

如果您在项目的Gitlab CI / CD设置中定义了名为MAVEN_REPO_USERMAVEN_REPO_PASS的变量,则可以在Gradle脚本中使用它们:

repositories {
    maven {
        credentials {
            username System.getenv("MAVEN_REPO_USER")
            password System.getenv("MAVEN_REPO_PASS")
        }
        url "…"
    }
}

答案 1 :(得分:2)

这是我的解决方法(不幸的是,官方的GitLab doco非常关注Maven ...:(

apply plugin: 'java'
apply plugin: 'maven-publish'

compileJava.options.encoding = 'UTF-8'
group = 'com.example'
version = '1.0.9'


task zipSource(type: Zip) {
    from file('files/test.zip')
    archiveClassifier = 'testZip'
}

publishing {
    repositories {
        maven {
            name 'GitLab' 
            url 'https://gitlab.my-company.com/api/v4/projects/2302/packages/maven'
            credentials(HttpHeaderCredentials) {
                name = "Job-Token"
                value = System.getenv("CI_JOB_TOKEN")
            }
            authentication {
                header(HttpHeaderAuthentication)
            }
        }
   }
   publications {
        mavenJava(MavenPublication) {
            artifactId = 'project1-sample'
            //deploy jar vom Java
            from components.java
            //deploy arbitrary Zip file
            artifact zipSource
        }
    }
}

答案 2 :(得分:0)

您可以直接使用环境变量来设置gradle属性,请参阅完整文档here

在您的情况下,将artifactUserartifactPass设置为env变量(最好是秘密变量)。