我有以下管道。
pipeline {
agent any
environment {
PROJECT_ID = "*****"
IMAGE = "gcr.io/$PROJECT_ID/node-app"
BRANCH_NAME_NORMALIZED = "${BRANCH_NAME.toLowerCase().replace(" / ", "
_ ")}"
}
stages {
stage('Build') {
steps {
sh ' docker build -t ${IMAGE}:${BRANCH_NAME_NORMALIZED} . '
}
}
stage('Push') {
steps {
withCredentials([file(credentialsId: 'jenkins_secret', variable: 'GC_KEY')]) {
sh("gcloud auth activate-service-account --key-file=${GC_KEY}")
}
sh ' gcloud auth configure-docker '
sh ' docker push $IMAGE:${BRANCH_NAME_NORMALIZED} '
}
}
stage('Deploy') {
steps {
withDockerContainer(image: "gcr.io/google.com/cloudsdktool/cloud-sdk", toolName: 'latest') {
withCredentials([file(credentialsId: 'jenkins_secret', variable: 'GC_KEY')]) {
sh("gcloud auth activate-service-account --key-file=${GC_KEY}")
sh("gcloud container clusters get-credentials k8s --region us-central1 --project ${DEV_PROJECT}")
sh("kubectl get pods")
}
}
}
}
}
}
在部署阶段,它给出以下错误:
gcloud auth激活服务帐户--key-file = **** 警告:无法在/.config/gcloud/logs中设置日志文件,(错误:无法创建目录[/.config/gcloud/logs/2020.02.05]:权限被拒绝。
请确认您具有写入父目录的权限。) 错误:(gcloud.auth.activate-service-account)无法创建目录[/.config/gcloud]:权限被拒绝。 请确认您具有写入父目录的权限。
我无法理解此命令要在哪里创建目录,泊坞窗容器或在主机中? 你有类似的问题吗?
答案 0 :(得分:1)
更好的方法是使用Login to GKE via Kubernetes service account with token并使用kubeconfig文件代替激活google服务帐户。
这具有多个优点,包括Kubernetes RBAC支持,如果您的凭据被泄露则控制爆炸半径等。您可以在此处详细了解using RBAC Authorization。
答案 1 :(得分:0)
您可以使用环境变量 CLOUDSDK_CONFIG 设置 gcloud 存储其配置的位置
environment {
CLOUDSDK_CONFIG = "${env.WORKSPACE}"
}
我遇到了同样的问题,这对我有用。