如何在声明性Jenkins管道中将机密文件安装到Docker映像中?

时间:2018-11-06 00:09:50

标签: docker jenkins

目前,我的管道正在执行以下操作:

pipeline {
  agent {
    docker {
      label 'linux'
      image 'java:8'
      args '-v /home/tester/.gradle:/.gradle'
    }
  }

  environment {
    HOME = '/'
    GRADLE_USER_HOME = '/.gradle'
    GRADLE_PROPERTIES = credentials('gradle.properties')
  }

  stages {
    stage('Build') {
      steps {
        sh 'cp ${GRADLE_PROPERTIES} ${GRADLE_USER_HOME}/'
        sh './gradlew clean check'
      }
    }
  }
}

问题是,gradle.properties最终在构建期间被放置在主机系统上更知名的位置。

我知道Docker让我从主机“挂载”文件。因此,我想改为这样做:

  agent {
    docker {
      label 'linux'
      image 'java:8'
      args '-v /home/tester/.gradle:/.gradle ' +
           '-v ' + credentials('gradle.properties') +
           ':/.gradle/gradle.properties'
    }
  }

不幸的是,这最终运行以下命令:

$ docker run -t -d -u 1001:1001 -v /home/tester/.gradle:/.gradle -v @credentials(<anonymous>=gradle.properties):/.gradle/gradle.properties -w

有没有办法将其扩展?

1 个答案:

答案 0 :(得分:0)

我找不到使docker args环境正常工作的方法。 我的解决方法最终被切换回脚本管道:

agent {
  label 'linux'
}
environment {
  GRADLE_PROPERTIES = credentials('gradle.properties')
}
steps{
  script {
    docker.image('java:8').inside('-v /home/tester/.gradle:/.gradle ' +
       "-v $GRADLE_PROPERTIES:/.gradle/gradle.properties"){
    }
  }
}