流程结构

 

一、创建一个新的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

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐