Jenkins给k8s部署YAML文件传参数方法
一,环境说明。
1,k8s集群。
2,Jenkins流水线部署在k8s环境中。
二,参数问题。
1,Jenkins使用CICD时需要传参数给k8s的YAML文件。
2,有两种方法,如下面的Jenkinsfile内容,只选取一部分。
可以看出来,parameters中有两个参数:APP_NAME,PROJECT_NAME。
另外enviroment中不少参数,其中PROJECT_VERSION参数指向了APP_NAME,这里需要使用双引号。
stage('image-push') {
agent none
steps {
container('base') {
sh 'docker tag ui-web:latest $REGISTRY/$ALIYUNHUB_NAMESPACE/ui-web:SNAPSHOT-$BUILD_NUMBER'
withCredentials([usernamePassword(credentialsId : 'aliyun-id' ,passwordVariable : 'DOCKER_PASSWORD' ,usernameVariable : 'DOCKER_USERNAME' ,)]) {
sh 'echo "$DOCKER_PASSWORD" | docker login $REGISTRY -u "$DOCKER_USERNAME" --password-stdin'
sh 'docker push $REGISTRY/$ALIYUNHUB_NAMESPACE/ui-web:SNAPSHOT-$BUILD_NUMBER'
}
}
}
}
environment {
DOCKER_CREDENTIAL_ID = 'aliyun-id'
GITHUB_CREDENTIAL_ID = 'github-id'
KUBECONFIG_CREDENTIAL_ID = 'k8s-demo'
REGISTRY = 'registry.cn-hangzhou.aliyuncs.com'
DOCKERHUB_NAMESPACE = 'ui-web'
GITHUB_ACCOUNT = 'kubesphere'
APP_NAME = 'ui-web'
ALIYUNHUB_NAMESPACE = 'k8sops2021'
PROJECT_VERSION = "${APP_VERSION}"
}
parameters {
string(name: 'APP_VERSION', defaultValue: 'v0.1', description: '项目版本')
string(name: 'PROJECT_NAME', defaultValue: '', description: '构建模块')
}
}
3,再看看k8s的YAML文件写法。
可以看出来,YAML中需要引用 parametes中的参数,只能写成 ${PROJECT_NAME} 这种形式。
YAML中如果要引用 environment中的参数,可以写成 $APP_NAME 这种形式。
containers:
- name: ${PROJECT_NAME}
image: $REGISTRY/$ALIYUNHUB_NAMESPACE/ui-web:SNAPSHOT-$BUILD_NUMBER
ports:
- name: http-80
containerPort: 80
protocol: TCP
最新评论