使用Jenkins从Gitlab管理K8s集群



我正在尝试从gitlab存储库(存储所有清单的存储库(管理我们的k8s集群。当gitlab收到提交时,将webhook发送到jenkins服务器,并触发此管道:

pipeline {
agent any
stages {
stage('Apply Kubernetes files') {
steps {
withKubeConfig([credentialsId: 'kubeconfig']) {
sh 'git diff --name-only ${gitlabBefore} ${gitlabAfter} | grep -E "^k8s.*ya?ml" | xargs -n1 -r kubectl apply -f'
}
}
}
}   
}

应用更改可以正常工作,但当提交包含删除文件时会出现问题。我想使用命令kubectl delete -f,但我想删除的文件在存储库中不存在。

当存储库并没有清单文件时,有什么方法可以删除kubernetes对象吗?

我试图在jenkins容器中恢复以前的提交,然后是kubectl delete -f,但它不起作用。

您可以使用git show命令从任何提交中获取任何文件的内容。

所以类似的东西

kubectl delete -f <(git show HEAD~:your_file.yaml)

应该起作用。这里HEAD~是指以前的提交。

gitdiff还可以根据不同的条件过滤输出,因此您实际上可以获得所有已删除的清单并使用它们。所以在你的情况下,这样的东西应该起作用:

git diff --diff-filter='D' --name-only ${gitlabBefore} ${gitlabAfter} | 
grep -E "^k8s.*ya?ml" | xargs -i kubectl delete -f <(git show ${gitlabBefore}:{})

最新更新