Kubernetes Continuous Deploy
一个Jenkins插件,用于将资源配置部署到Kubernetes集群。
它提供以下功能:
插件支持以下资源类型:
注意:
在持续集成和持续部署的环境中,只有那些需要定期更新的资源应该放在Jenkins部署中。所以大多数时候插件应该主要处理 Deployment 类型的资源。
kubernetesDeploy(kubeconfigId: 'kubeconfig-credentials-id', // REQUIRED
configs: '' , // REQUIRED
enableConfigSubstitution: false,
secretNamespace: '' ,
secretName: '' ,
dockerCredentials: [
[credentialsId: '' ],
[credentialsId: '' , url: '' ],
]
)
下面是部署的最基本配置
kubernetesDeploy(
...
configs: '部署资源的 YML 文件,比如*.yml',
enableConfigSubstitution: true, // 这个默认值就是 true
...
)
假如 kubernetes 的配置文件以凭据的方式保存在 Jenkins 中的时候,可以利用 credentials binding插件将kubeconfig内容绑定到变量。可以将变量中的内容保存到本地文件中,该文件可用于调用kubectl命令(使用–kubeconfig参数)
以下是以 Pipeline 方式的配置绑定
withCredentials([kubeconfigContent(credentialsId: '6710f45-5f4c-4ddb-8bfc-c41e810be1cc', variable: 'KUBECONFIG_CONTENT')]) {
sh '''echo "$KUBECONFIG_CONTENT" > kubeconfig && cat kubeconfig && rm kubeconfig'''
}
pipeline {
// 设置全局环境变量
environment {
url = '[email protected]:xiguatian/simple-java-maven-app.git'
}
// 全局代理是 none,表示全局上不设置任何代理,需要在每个步骤中设置代理
agent none
stages {
// 拉取代码并构建
stage('pull code and build') {
// 此阶段的代理: docker 容器
agent {
docker {
image 'maven:3-alpine'
args '-v $HOME/.m2:/root/.m2'
// 自定义的工作空间
customWorkspace "/opt/"
}
}
steps {
// 拉取代码
git(url: env.url, branch: 'master', credentialsId: 'gitlab')
// 构建
sh 'mvn -B clean package'
}
}
// 构建镜像
stage("build image"){
agent {
node {
label 'master'
customWorkspace "/opt/"
}
}
steps {
script {
docker.withRegistry('http://192.168.122.100:80', 'harbor') {
docker.build('app-java/myapp').push('6.9')
}
}
}
}
stage("deploy app"){
agent {
node {
label 'master'
customWorkspace "/opt/"
}
}
steps {
kubernetesDeploy(
kubeconfigId: 'k8s-auth', // REQUIRED
configs: 'myapp.yml', // REQUIRED
enableConfigSubstitution: true,
secretName: 'harbor-auth',
dockerCredentials: [[credentialsId: 'harbor', url: 'http://192.168.122.100:80']]
)
}
}
}
}
将上面最后部分修改为
stage("deploy app"){
agent {
node {
label 'master'
customWorkspace "/opt/"
}
}
steps {
sh 'kubectl apply -f myapp.yml'
}
}
使用到的 myapp.yml
文件是 kubernetes 的部署文件
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp-deployment
spec:
selector:
matchLabels:
app: myapp
replicas: 2
template:
metadata:
labels:
app: myapp
spec:
containers:
- name: myapp
image: 192.168.122.100:80/app-java/myapp:v5.0
imagePullSecrets:
- name: harbor-auth // 用于harbor 仓库的认证密钥
192.168.122.100:80/app-java/myapp:v5.0
是私有仓库,需要进行认证
kubernetes 中给 Docker 的私有仓库创建认证,使用如下命令
kubectl create secret docker-registry harbor-auth --docker-username=harbor仓库的用户名 --docker-password=密码 --docker-server=http://192.168.122.100:80
docker-registry
是密钥类型
harbor-auth
是密钥的名称