在Google云SQL环境上执行maven单元测试
我在GCP的Kubernetes引擎中运行了一个Jenkins吊舱,我正在尝试运行一个maven单元测试,该测试连接到一个google cloud SQL数据库来执行上述测试。我的项目的应用程序.yaml如下所示:在Google云SQL环境上执行maven单元测试,maven,unit-testing,jenkins,kubernetes,google-cloud-sql,Maven,Unit Testing,Jenkins,Kubernetes,Google Cloud Sql,我在GCP的Kubernetes引擎中运行了一个Jenkins吊舱,我正在尝试运行一个maven单元测试,该测试连接到一个google cloud SQL数据库来执行上述测试。我的项目的应用程序.yaml如下所示: spring: cloud: gcp: project-id: <my_project_id> sql: database-name: <my_database_name> instan
spring:
cloud:
gcp:
project-id: <my_project_id>
sql:
database-name: <my_database_name>
instance-connection-name: <my_instance_connection_name>
jpa:
database-platform: org.hibernate.dialect.MySQL55Dialect
hibernate:
ddl-auto: create-drop
datasource:
continue-on-error: true
driver-class-name: com.mysql.cj.jdbc.Driver
username: <my_cloud_sql_username>
password: <my_cloud_sql_password>
我有两个谷歌云项目:
- 一个有Kubernetes星团的星团,Jenkins吊舱在那里运行
- 另一个项目中,K8s集群包含我实际的Spring Boot应用程序和我试图访问的云SQL数据库
pipeline {
agent any
tools{
maven 'Maven 3.5.2'
jdk 'jdk8'
}
environment {
IMAGE = readMavenPom().getArtifactId()
VERSION = readMavenPom().getVersion()
DEV_DB_USER = "${env.DEV_DB_USER}"
DEV_DB_PASSWORD = "${env.DEV_DB_PASSWORD}"
}
stages {
stage('Build docker image') {
steps {
sh 'mvn -Dmaven.test.skip=true clean package'
script{
docker.build '$IMAGE:$VERSION'
}
}
}
stage('Run unit tests') {
steps {
withEnv(['GCLOUD_PATH=/var/jenkins_home/google-cloud-sdk/bin']) {
withCredentials([file(credentialsId: 'key-sa', variable: 'GC_KEY')]) {
sh("gcloud auth activate-service-account --key-file=${GC_KEY}")
sh("gcloud container clusters get-credentials <cluster_name> --zone northamerica-northeast1-a --project <project_id>")
sh 'mvn test'
}
}
}
}
}
}
...
withCredentials([file(credentialsId: 'key-sa', variable: 'GC_KEY')]) {
sh("gcloud auth activate-service-account --key-file=${GC_KEY}")
sh("gcloud container clusters get-credentials <cluster_name> --zone northamerica-northeast1-a --project <project_id>")
sh 'mvn test'
}
...
。。。
withCredentials([文件(credentialId:'key sa',变量:'GC_key')){
sh(“gcloud auth activate service account--key file=${GC_key}”)
sh(“gcloud容器集群获取凭据--zone northamerica-northeast1-a--项目”)
sh‘mvn测试’
}
...
我认为GCP Java SDK根本不依赖gcloud CLI。相反,它会查找一个环境变量GOOGLE\u APPLICATION\u CREDENTIALS,该变量指向您的服务帐户密钥文件和GCLOUD\u项目(请参阅)
尝试添加以下内容:
sh("export GOOGLE_APPLICATION_CREDENTIALS=${GC_KEY}")
sh("export GCLOUD_PROJECT=<project_id>")
sh(“导出GOOGLE\u应用程序\u凭据=${GC\u KEY}”)
sh(“导出GCLOUD_项目=”)
我认为GCP Java SDK根本不依赖gcloud CLI。相反,它会查找一个环境变量GOOGLE\u APPLICATION\u CREDENTIALS,该变量指向您的服务帐户密钥文件和GCLOUD\u项目(请参阅)
尝试添加以下内容:
sh("export GOOGLE_APPLICATION_CREDENTIALS=${GC_KEY}")
sh("export GCLOUD_PROJECT=<project_id>")
sh(“导出GOOGLE\u应用程序\u凭据=${GC\u KEY}”)
sh(“导出GCLOUD_项目=”)
要使其正常工作,您需要验证两种不同的方法。我假设你正在使用
GOOGLE\u应用程序\u凭证
env var,它应该是指向测试服务帐户密钥的路径李>
要让它正常工作,您需要验证两种不同的方法。我假设你正在使用
GOOGLE\u应用程序\u凭证
env var,它应该是指向测试服务帐户密钥的路径李>
谢谢你的帮助。我试图导出凭证json文件路径,如链接所示。为此,我将Json文件放在我的kubernetes吊舱中。不过,在mvn测试之前,我仍然有相同的403错误,请尝试添加
sh(“gcloud auth login”)
没关系,这对Jenkins不起作用,因为它希望启动浏览器。您只能使用gcloud auth login在本地测试这不是服务帐户问题。感谢您的帮助。我试图导出凭证json文件路径,如链接所示。为此,我将Json文件放在我的kubernetes吊舱中。不过,在mvn测试之前,我仍然有相同的403错误,请尝试添加sh(“gcloud auth login”)
没关系,这对Jenkins不起作用,因为它希望启动浏览器。您只能使用gcloud auth login在本地测试这不是服务帐户问题。