我需要从同一个Kubernetes集群中运行的Jenkins服务器重新启动另一个Kubernetes,如kubectl rollout restart -n nams deployment xxx-deployment部署。如何做到这一点?我已经尝试过使用Jenkins Build Agents,但没有成功。我有一个运行Payara应用服务器的kubernetes pod,我需要重新启动部署以使已部署应用程序的新版本生效。
kubectl rollout restart -n nams deployment xxx-deployment
fae0ux8s1#
在Jenkins上安装Kubernetes CLI plugin。有了这个插件,只要Jenkins可以访问目标Kubernetes集群API端点,你的Jenkins运行在什么平台上就不重要了。所有作业都可以在Build Environment部分中指定Kubernetes集群连接细节。
Build Environment
然后,添加一个Execute Shell构建步骤,在该步骤中,您可以随心所欲地使用kubectl命令。
Execute Shell
kubectl
---附加信息---下面是创建插件所需的kubectl-token的脚本。只需将KUBE_NS变量修改为将运行作业的特定命名空间的名称:
kubectl-token
KUBE_NS
#!/bin/bash KUBE_NS="default" if [[ ! -n $(kubectl get ns --field-selector=metadata.name=${KUBE_NS} --no-headers 2> /dev/null) ]]; then echo Namespace $KUBE_NS not found! exit 1 fi if [[ ! -n "${SA_NAME}" ]]; then SA_NAME=sa-${KUBE_CLUSTER}-${KUBE_NS} fi kubectl apply -f - <<EOF apiVersion: v1 kind: ServiceAccount metadata: namespace: ${KUBE_NS} name: ${SA_NAME} --- apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: namespace: ${KUBE_NS} name: ${SA_NAME}-edit-binding roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: edit subjects: - kind: ServiceAccount name: ${SA_NAME} namespace: ${KUBE_NS} EOF SA_SECRET=$(kubectl get -n ${KUBE_NS} serviceaccount/${SA_NAME} -o jsonpath='{.secrets[0].name}') if [[ ! -n "${SA_SECRET}" ]]; then SA_SECRET="${SA_NAME}-token" kubectl apply -f - <<EOF apiVersion: v1 kind: Secret type: kubernetes.io/service-account-token metadata: name: ${SA_SECRET} annotations: kubernetes.io/service-account.name: "${SA_NAME}" EOF fi TOKEN=$(kubectl get -n ${KUBE_NS} secret/${SA_SECRET} -o jsonpath='{.data.token}' | base64 -d)
1条答案
按热度按时间fae0ux8s1#
在Jenkins上安装Kubernetes CLI plugin。有了这个插件,只要Jenkins可以访问目标Kubernetes集群API端点,你的Jenkins运行在什么平台上就不重要了。
所有作业都可以在
Build Environment
部分中指定Kubernetes集群连接细节。然后,添加一个
Execute Shell
构建步骤,在该步骤中,您可以随心所欲地使用kubectl
命令。---附加信息---
下面是创建插件所需的
kubectl-token
的脚本。只需将KUBE_NS
变量修改为将运行作业的特定命名空间的名称: