Jenkins pipline集成发布到K8s
jenkins pipeline发面到K8s 文件内容写k8s集群中的~/.kube/config的内容,为了jenkins所在服务器能够连通K8s集群。pipeline步骤如下: 拉取代码-->maven构建成可执行的jar-->docker打包成镜像并推送到镜像仓库Harbor --> 从Harbor拉取镜像部署到k8s。2、Harbor: 这里我使用的在jenkins所在服务器上执行dock
流程结构
一、创建一个新的Jenkins项目
二、增加参数化配置
这里定义两个参数:
git_url: 从gitlab拉取代码用
current_date: 当前时间,构建docker镜像时使用
三、使用脚本方式配置pipeline
四、pipeline脚本说明
pipeline语法很容易,这里不多说
pipeline步骤如下: 拉取代码-->maven构建成可执行的jar-->docker打包成镜像并推送到镜像仓库Harbor --> 从Harbor拉取镜像部署到k8s。
这里用到的几个认证,都需要事先配置好,
1、gitlab: 使用用户名和密码认证:credentialsId:'xxxxx'
2、Harbor: 这里我使用的在jenkins所在服务器上执行docker login xx.xx.xx.xx成功即可,login时会需要输入用户名和密码。
这里打包时生成了以当前日期(current_date)和编译号(BUILD_NUMBER)为版本号的镜像,同时更新当前镜像为latest。方便部署的时候直接引用最新镜像。
3、K8s部署,
网上查找资料大多安装插件,但不同jenkins所对应的插件有不兼容的情况,因此这里直接使用配置文件的方式
在这里增加一个配置文件,这是我增加的kubeconfig的配置文件。
点击Add a new config增加一条配置
自定义ID和Name, 文件内容写k8s集群中的~/.kube/config的内容,我这里对server做了一修改,目的是为了jenkins所在服务器能够连通K8s集群。点击"submit“保存即可。
在pipeline脚本中如是写:
deployment.yml里面的内容大家可以根据自身需要进行修改。
五、完整的脚本如下
pipeline {
agent any
tools {
maven 'maven363'
}
stages {
stage('拉取代码') {
steps {
echo "拉取分支= master"
checkout([$class: 'GitSCM', branches: [[name: "master"]],
doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [],
userRemoteConfigs: [[credentialsId: 'xxxxxxxx', url:"${git_url}"]]])
}
}
stage('构建'){
steps{
sh '''
mvn install -f sample/sample-boot/sampleBoot/pom.xml -Dmaven.test.skip=true -U
'''
}
}
stage('构建推送镜像'){
steps{
sh '''
mkdir -p /data/cicd/sample/app/target
mv sample/sample-boot/sampleBoot/target/sample-boot-1.0-SNAPSHOT.jar /data/cicd/sample/app/target/app.jar
docker build -t sample-boot:${current_date}-${BUILD_NUMBER} /data/cicd/sample/app
docker tag sample-boot:${current_date}-${BUILD_NUMBER} xx.xx.xx.xx/xxx/sample-boot:${current_date}-${BUILD_NUMBER}
docker tag sample-boot:${current_date}-${BUILD_NUMBER} xx.xx.xx.xx/xxx/sample-boot:latest
docker push xx.xx.xx.xx/xxx/sample-boot:${current_date}-${BUILD_NUMBER}
docker push xx.xx.xx.xx/xxx/sample-boot:latest
'''
}
}
stage('部署K8s'){
steps{
configFileProvider([configFile(fileId: "k8sconfig", targetLocation: 'kubeconfig')]) {
sh """
kubectl apply -f /data/cicd/sample/app/k8s/deployment.yml --kubeconfig=kubeconfig
"""
}
}
}
}
}
根据deployment.yml里的namespace,事先在k8s里面建立好。
kubectl create ns sample
更多推荐
所有评论(0)