持续集成交付CICD:Jenkins使用GitLab共享库实现自动上传前后端项目Nexus制品

目录

一、实验

1.GitLab本地导入前后端项目

2.Jenkins新建前后端项目流水线

3.Sonarqube录入质量阈与质量配置

4.修改GitLab共享库代码

5.Jenkins手动构建前后端项目流水线

6.Nexus查看制品上传情况

7.优化代码获取RELEASE分支

8.优化Jenkins流水线项目名称


一、实验

1.GitLab本地导入前后端项目

(1)导入后端maven项目

持续集成交付CICD:Jenkins使用GitLab共享库实现自动上传前后端项目Nexus制品_第1张图片持续集成交付CICD:Jenkins使用GitLab共享库实现自动上传前后端项目Nexus制品_第2张图片持续集成交付CICD:Jenkins使用GitLab共享库实现自动上传前后端项目Nexus制品_第3张图片

(2)导入前端npm项目持续集成交付CICD:Jenkins使用GitLab共享库实现自动上传前后端项目Nexus制品_第4张图片持续集成交付CICD:Jenkins使用GitLab共享库实现自动上传前后端项目Nexus制品_第5张图片持续集成交付CICD:Jenkins使用GitLab共享库实现自动上传前后端项目Nexus制品_第6张图片

2.Jenkins新建前后端项目流水线

(1)新建后端maven项目流水线

持续集成交付CICD:Jenkins使用GitLab共享库实现自动上传前后端项目Nexus制品_第7张图片

(2)新建前端npm项目流水线

持续集成交付CICD:Jenkins使用GitLab共享库实现自动上传前后端项目Nexus制品_第8张图片

(3)  新建devops视图,包含前后端项目流水线

持续集成交付CICD:Jenkins使用GitLab共享库实现自动上传前后端项目Nexus制品_第9张图片持续集成交付CICD:Jenkins使用GitLab共享库实现自动上传前后端项目Nexus制品_第10张图片

(4)修改选项参数,更新GitLab前后端项目地址

持续集成交付CICD:Jenkins使用GitLab共享库实现自动上传前后端项目Nexus制品_第11张图片

持续集成交付CICD:Jenkins使用GitLab共享库实现自动上传前后端项目Nexus制品_第12张图片

3.Sonarqube录入质量阈与质量配置

(1)质量阈

持续集成交付CICD:Jenkins使用GitLab共享库实现自动上传前后端项目Nexus制品_第13张图片

(2)质量配置

持续集成交付CICD:Jenkins使用GitLab共享库实现自动上传前后端项目Nexus制品_第14张图片持续集成交付CICD:Jenkins使用GitLab共享库实现自动上传前后端项目Nexus制品_第15张图片持续集成交付CICD:Jenkins使用GitLab共享库实现自动上传前后端项目Nexus制品_第16张图片

4.修改GitLab共享库代码

(1)修改制品类Artifacts.grooy

传参type判断项目制品上传类型

package org.devops

//上传制品
    def PushRawArtifacts(repoName,targetDir, filePath, pkgName,type ){
        withCredentials([usernamePassword(credentialsId: '318df1ad-083b-4158-ac88-2f584446563e', passwordVariable: 'TOKEN', usernameVariable: 'USER')]) {
            sh """
                curl -X POST "http://192.168.204.13:8081/service/rest/v1/components?repository=${repoName}" \
                -H "accept: application/json" \
                -H "Content-Type: multipart/form-data" \
                -F "raw.directory=${targetDir}" \
                -F "raw.asset1=@${filePath}/${pkgName};type=${type}" \
                -F "raw.asset1.filename=${pkgName}" \
                -u "${USER}":"${TOKEN}"
             """
        }
    }

持续集成交付CICD:Jenkins使用GitLab共享库实现自动上传前后端项目Nexus制品_第17张图片

(2)修改流水线文件Jenkinsfile

上传制品阶段"PushArtifacts"通过2个if条件判断构建工具类型,并完成相应制品上传

@Library("mylib@master") _
import org.devops.*


def checkout = new Checkout()
def build = new Build()
def unittest = new UnitTest()
def sonar = new Sonar()
def artifacts = new Artifacts()

pipeline {
    agent { label "build"}

    options {
      skipDefaultCheckout true
    }
    stages{
        stage("Checkout"){
            steps{
                script {
                    println("GetCode")
                    checkout.GetCode("${env.srcUrl}","${env.branchName}")
                }
            }
        }
        stage("build"){
            steps{
                script{
                    println("Build")
                    build.CodeBuild("${env.buildTool}")
                }
            }

        }

        stage("UnitTest"){
            steps{
                script{
                    println("Test")
                    unittest.CodeTest("${env.buildTool}")
                }
            }

        }
        stage("SonarScan"){
            steps {
               script {
                    groupName = "${JOB_NAME}".split("/")[0]
                    projectName ="${JOB_NAME}".split("/")[-1]
                    sonar.CodeSonar("${env.buildTool}",projectName,groupName)
                }

            }

        }
        stage("PushArtifacts"){
            steps {
               script {
                    repoName = "${JOB_NAME}".split("/")[0]
                    projectName ="${JOB_NAME}".split("/")[-1]
                    targetDir = "${projectName}/${BUILD_ID}/"

                    if ("${env.buildTool}" == "maven"){
                        filePath = "target"
                        pkgName = sh returnStdout: true, script: "cd target/ ; ls maven*.jar"
                        pkgName = pkgName.trim()
                        newPkgName = "${projectName}-${BUILD_ID}.jar"
                        sh "cd target; mv ${pkgName} ${newPkgName}" 
                        type = "application/java-archive"       
                    }

                    if ("${env.buildTool}" == "npm"){
                        filePath = "dist"
                        newPkgName = "${projectName}-${BUILD_ID}.tar.gz"
                        sh """
                            cd ${filePath}
                            [ -f ${newPkgName} ] && rm -fr ${newPkgName}
                            tar zcf ${newPkgName} *

                        """
                        type = "application/x-gzip" 
                    }
                    artifacts.PushRawArtifacts(repoName,targetDir,filePath,newPkgName,type)
                }

            }

        }

    }

}

持续集成交付CICD:Jenkins使用GitLab共享库实现自动上传前后端项目Nexus制品_第18张图片

5.Jenkins手动构建前后端项目流水线

(1)构建后端项目

持续集成交付CICD:Jenkins使用GitLab共享库实现自动上传前后端项目Nexus制品_第19张图片持续集成交付CICD:Jenkins使用GitLab共享库实现自动上传前后端项目Nexus制品_第20张图片

(2)构建前端项目

持续集成交付CICD:Jenkins使用GitLab共享库实现自动上传前后端项目Nexus制品_第21张图片

持续集成交付CICD:Jenkins使用GitLab共享库实现自动上传前后端项目Nexus制品_第22张图片

6.Nexus查看制品上传情况

(1)查看后端项目

持续集成交付CICD:Jenkins使用GitLab共享库实现自动上传前后端项目Nexus制品_第23张图片

(2)查看前端项目

持续集成交付CICD:Jenkins使用GitLab共享库实现自动上传前后端项目Nexus制品_第24张图片

7.优化代码获取RELEASE分支

(1)GitLab后端项目新建RELEASE分支

持续集成交付CICD:Jenkins使用GitLab共享库实现自动上传前后端项目Nexus制品_第25张图片持续集成交付CICD:Jenkins使用GitLab共享库实现自动上传前后端项目Nexus制品_第26张图片

(2)GitLab前端项目新建RELEASE分支

持续集成交付CICD:Jenkins使用GitLab共享库实现自动上传前后端项目Nexus制品_第27张图片持续集成交付CICD:Jenkins使用GitLab共享库实现自动上传前后端项目Nexus制品_第28张图片

(3)修改共享库流水线文件Jenkinsfile

version 变量用来获取分支版本号

@Library("mylib@master") _
import org.devops.*


def checkout = new Checkout()
def build = new Build()
def unittest = new UnitTest()
def sonar = new Sonar()
def artifacts = new Artifacts()

pipeline {
    agent { label "build"}

    options {
      skipDefaultCheckout true
    }
    stages{
        stage("Checkout"){
            steps{
                script {
                    println("GetCode")
                    checkout.GetCode("${env.srcUrl}","${env.branchName}")
                }
            }
        }
        stage("build"){
            steps{
                script{
                    println("Build")
                    build.CodeBuild("${env.buildTool}")
                }
            }

        }

        stage("UnitTest"){
            steps{
                script{
                    println("Test")
                    unittest.CodeTest("${env.buildTool}")
                }
            }

        }
        stage("SonarScan"){
            steps {
               script {
                    groupName = "${JOB_NAME}".split("/")[0]
                    projectName ="${JOB_NAME}".split("/")[-1]
                    sonar.CodeSonar("${env.buildTool}",projectName,groupName)
                }

            }

        }
        stage("PushArtifacts"){
            steps {
               script {
                    repoName = "${JOB_NAME}".split("/")[0]
                    projectName ="${JOB_NAME}".split("/")[-1]
                    version = "${env.branchName}".split("-")[-1]     //RELEASE-1.1.1
                    targetDir = "${projectName}/${version}/"
                    
                    if ("${env.buildTool}" == "maven"){
                        filePath = "target"
                        pkgName = sh returnStdout: true, script: "cd target/ ; ls maven*.jar"
                        pkgName = pkgName.trim()
                        newPkgName = "${projectName}-${version}.jar"
                        sh "cd target; mv ${pkgName} ${newPkgName}" 
                        type = "application/java-archive"       
                    }

                    if ("${env.buildTool}" == "npm"){
                        filePath = "dist"
                        newPkgName = "${projectName}-${version}.tar.gz"
                        sh """
                            cd ${filePath}
                            [ -f ${newPkgName} ] && rm -fr ${newPkgName}
                            tar zcf ${newPkgName} *

                        """
                        type = "application/x-gzip" 
                    }
                    artifacts.PushRawArtifacts(repoName,targetDir,filePath,newPkgName,type)
                }

            }

        }

    }

}

持续集成交付CICD:Jenkins使用GitLab共享库实现自动上传前后端项目Nexus制品_第29张图片

(4)Jenkins手动构建后端流水线

持续集成交付CICD:Jenkins使用GitLab共享库实现自动上传前后端项目Nexus制品_第30张图片持续集成交付CICD:Jenkins使用GitLab共享库实现自动上传前后端项目Nexus制品_第31张图片

(5)Jenkins手动构建前端流水线

持续集成交付CICD:Jenkins使用GitLab共享库实现自动上传前后端项目Nexus制品_第32张图片持续集成交付CICD:Jenkins使用GitLab共享库实现自动上传前后端项目Nexus制品_第33张图片

(6)Nexus查看后端项目制品上传情况

持续集成交付CICD:Jenkins使用GitLab共享库实现自动上传前后端项目Nexus制品_第34张图片

(7)Nexus查看前端项目制品上传情况

持续集成交付CICD:Jenkins使用GitLab共享库实现自动上传前后端项目Nexus制品_第35张图片

8.优化Jenkins流水线项目名称

(1)Jenkins修改后端项目流水线名称

持续集成交付CICD:Jenkins使用GitLab共享库实现自动上传前后端项目Nexus制品_第36张图片持续集成交付CICD:Jenkins使用GitLab共享库实现自动上传前后端项目Nexus制品_第37张图片(2)Jenkins修改前端项目流水线名称持续集成交付CICD:Jenkins使用GitLab共享库实现自动上传前后端项目Nexus制品_第38张图片持续集成交付CICD:Jenkins使用GitLab共享库实现自动上传前后端项目Nexus制品_第39张图片

(3)修改视图名称

持续集成交付CICD:Jenkins使用GitLab共享库实现自动上传前后端项目Nexus制品_第40张图片持续集成交付CICD:Jenkins使用GitLab共享库实现自动上传前后端项目Nexus制品_第41张图片

(5)GitLab修改共享库Jenkinsfile

变量projectName重新取分割后的值

@Library("mylib@master") _
import org.devops.*


def checkout = new Checkout()
def build = new Build()
def unittest = new UnitTest()
def sonar = new Sonar()
def artifacts = new Artifacts()

pipeline {
    agent { label "build"}

    options {
      skipDefaultCheckout true
    }
    stages{
        stage("Checkout"){
            steps{
                script {
                    println("GetCode")
                    checkout.GetCode("${env.srcUrl}","${env.branchName}")
                }
            }
        }
        stage("build"){
            steps{
                script{
                    println("Build")
                    build.CodeBuild("${env.buildTool}")
                }
            }

        }

        stage("UnitTest"){
            steps{
                script{
                    println("Test")
                    unittest.CodeTest("${env.buildTool}")
                }
            }

        }
        stage("SonarScan"){
            steps {
               script {
                    groupName = "${JOB_NAME}".split("/")[0]
                    projectName ="${JOB_NAME}".split("/")[-1].split("_")[0]
                    sonar.CodeSonar("${env.buildTool}",projectName,groupName)
                }

            }

        }
        stage("PushArtifacts"){
            steps {
               script {
                    repoName = "${JOB_NAME}".split("/")[0]
                    projectName ="${JOB_NAME}".split("/")[-1].split("_")[0]
                    version = "${env.branchName}".split("-")[-1]     //RELEASE-1.1.1
                    targetDir = "${projectName}/${version}/"
                    
                    if ("${env.buildTool}" == "maven"){
                        filePath = "target"
                        pkgName = sh returnStdout: true, script: "cd target/ ; ls maven*.jar"
                        pkgName = pkgName.trim()
                        newPkgName = "${projectName}-${version}.jar"
                        sh "cd target; mv ${pkgName} ${newPkgName}" 
                        type = "application/java-archive"       
                    }

                    if ("${env.buildTool}" == "npm"){
                        filePath = "dist"
                        newPkgName = "${projectName}-${version}.tar.gz"
                        sh """
                            cd ${filePath}
                            [ -f ${newPkgName} ] && rm -fr ${newPkgName}
                            tar zcf ${newPkgName} *

                        """
                        type = "application/x-gzip" 
                    }
                    artifacts.PushRawArtifacts(repoName,targetDir,filePath,newPkgName,type)
                }

            }

        }

    }

}

持续集成交付CICD:Jenkins使用GitLab共享库实现自动上传前后端项目Nexus制品_第42张图片

(6)Jenkins手动构建后端流水线持续集成交付CICD:Jenkins使用GitLab共享库实现自动上传前后端项目Nexus制品_第43张图片

持续集成交付CICD:Jenkins使用GitLab共享库实现自动上传前后端项目Nexus制品_第44张图片

(7)Jenkins手动构建前端流水线持续集成交付CICD:Jenkins使用GitLab共享库实现自动上传前后端项目Nexus制品_第45张图片

持续集成交付CICD:Jenkins使用GitLab共享库实现自动上传前后端项目Nexus制品_第46张图片

(8)Nexus查看后端项目制品上传情况持续集成交付CICD:Jenkins使用GitLab共享库实现自动上传前后端项目Nexus制品_第47张图片

(9)Nexus查看前端项目制品上传情况​​​​​​​

持续集成交付CICD:Jenkins使用GitLab共享库实现自动上传前后端项目Nexus制品_第48张图片

你可能感兴趣的:(持续集成交付CICD,ci/cd,云计算,运维,jenkins,gitlab)