У меня в модуле Kubernetes Engine GCP работает модуль Jenkins, и я пытаюсь запустить модульный тест maven, который подключается к облачной базе данных Google google для выполнения указанного теста.Мой application.yaml для моего проекта выглядит следующим образом:
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>
Текущий Jenkinsfile, связанный с этим проектом:
Jenkinsfile:
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'
}
}
}
}
}
}
}
Моя проблема заключается в том, что конвейер фактически пытается запустить тест mvn с использованием вышеуказанной конфигурации (в моем application.yaml). Я получаю эту ошибку:
Caused by:
com.google.api.client.googleapis.json.GoogleJsonResponseException: 403
Forbidden
{
"code" : 403,
"errors" : [ {
"domain" : "global",
"message" : "Insufficient Permission: Request had insufficient authentication scopes.",
"reason" : "insufficientPermissions"
} ],
"message" : "Insufficient Permission: Request had insufficient authentication scopes."
}
У меня есть два проекта Google Cloud:
Один с кластером Kubernetes, где работает модуль Дженкинса.
Другойпроект, в котором кластер K8s содержит мое реальное загрузочное приложение Spring и базу данных Cloud SQL, к которой я пытаюсь получить доступ.
Я также создал служебную учетную запись только в моем Spring Boot Project для Jenkins для использования с тремя ролями: Cloud SQL Editor, Kubernetes Engine Cluster Admin и владельцем проекта (чтобы убедиться, что учетная запись службыне виноват).
Я включил API-интерфейсы Cloud SQL, Cloud SQL и API Kubernetes в обоих проектах и дважды проверил свои учетные данные Cloud SQL, и они в порядке.Кроме того, я аутентифицировал конвейер Jenkins, используя файл json, сгенерированный при создании учетной записи службы, следуя рекомендациям, которые обсуждались здесь :
Jenkinsfile (extract):
...
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'
}
...