1. 程式人生 > 其它 >Jenkins+Kubernetes+Docker完成微服務持續整合

Jenkins+Kubernetes+Docker完成微服務持續整合

Jenkins+Kubernetes+Docker完成微服務持續整合

 

拉取程式碼,構建映象

建立NFS共享目錄

讓所有Jenkins-Slave構建指向NFS的Maven的共享倉庫目錄

vi /etc/exports
/opt/nfs/jenkins   *(rw,no_root_squash)
/opt/nfs/maven    *(rw,no_root_squash)
systemctl restart nfs	重啟NFS

記得重啟nfs!

 

然後

注意:在構建過程會發現無法建立倉庫目錄,是因為NFS共享目錄許可權不足,需更改許可權

 

 

 

然後就是去建立一個新專案:

 

建立專案,編寫構建Pipeline

 

 

 

 

配置一下harbor憑證

 

 

然後再去編寫程式碼:

def git_address = "http://20.0.0.20:82/root/tensquare_back.git" 
def git_auth = "904eff5d-41c8-44ad-ba24-7f539a0edb96"
//構建版本的名稱
def tag = "latest"
//Harbor私服地址
def harbor_url = "20.0.0.50:85"
//Harbor的專案名稱
def harbor_project_name = "tensquare"
//Harbor的憑證
def harbor_auth = "427399a8-db35-48e8-b5cf-a1ea63f10cc5"



podTemplate(label: 'jenkins-slave', cloud: 'kubernetes', containers: [ 
        containerTemplate(
            name: 'jnlp',
            image: "20.0.0.50:85/library/jenkins-slave-maven:latest"
        ),
        containerTemplate( 
            name: 'docker',
            image: "docker:stable",
            ttyEnabled: true,
            command: 'cat'
        ),
    ],
    volumes: [
        hostPathVolume(mountPath: '/var/run/docker.sock', hostPath: '/var/run/docker.sock'),
        nfsVolume(mountPath: '/usr/local/apache-maven/repo', serverAddress: '20.0.0.10' , serverPath: '/opt/nfs/maven'),
    ],
)
{
node("jenkins-slave"){
    // 第一步
    stage('pull code'){
        checkout([$class: 'GitSCM', branches: [[name: '*/master']], extensions: [], userRemoteConfigs: [[credentialsId: "${git_auth}", url: "${git_address}"]]])
    }
    // 第二步
    stage('make public sub project'){
        //編譯並安裝公共工程
        sh "mvn -f tensquare_common clean install"
    }
    // 第三步
    stage('make image'){
        //把選擇的專案資訊轉為陣列
        def selectedProjects = "${project_name}".split(',')


        for(int i=0;i<selectedProjects.size();i++){
            //取出每個專案的名稱和埠
            def currentProject = selectedProjects[i];
            //專案名稱
            def currentProjectName = currentProject.split('@')[0]
            //專案啟動埠
            def currentProjectPort = currentProject.split('@')[1]

            //定義映象名稱
            def imageName = "${currentProjectName}:${tag}"

            //編譯,構建本地映象
            sh "mvn -f ${currentProjectName} clean package dockerfile:build"
            container('docker') {

                //給映象打標籤
                sh "docker tag ${imageName} ${harbor_url}/${harbor_project_name}/${imageName}"

                //登入Harbor,並上傳映象
                withCredentials([usernamePassword(credentialsId: "${harbor_auth}", passwordVariable: 'password', usernameVariable: 'username')])
                {
                    //登入
                    sh "docker login -u ${username} -p ${password} ${harbor_url}"
                    //上傳映象
                    sh "docker push ${harbor_url}/${harbor_project_name}/${imageName}"
                }

            //刪除本地映象
            sh "docker rmi -f ${imageName}" 
            sh "docker rmi -f ${harbor_url}/${harbor_project_name}/${imageName}"
            }
        }
    }
}
}

  

要修改地方:

 

 

然後去構建看結果!!