如何从Jenkins pod重新启动Kubernetes部署

imzjd6km  于 2023-06-21  发布在  Jenkins
关注(0)|答案(1)|浏览(167)

我需要从同一个Kubernetes集群中运行的Jenkins服务器重新启动另一个Kubernetes,如kubectl rollout restart -n nams deployment xxx-deployment部署。
如何做到这一点?
我已经尝试过使用Jenkins Build Agents,但没有成功。我有一个运行Payara应用服务器的kubernetes pod,我需要重新启动部署以使已部署应用程序的新版本生效。

fae0ux8s

fae0ux8s1#

在Jenkins上安装Kubernetes CLI plugin。有了这个插件,只要Jenkins可以访问目标Kubernetes集群API端点,你的Jenkins运行在什么平台上就不重要了。
所有作业都可以在Build Environment部分中指定Kubernetes集群连接细节。

然后,添加一个Execute Shell构建步骤,在该步骤中,您可以随心所欲地使用kubectl命令。

---附加信息---
下面是创建插件所需的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)

相关问题