项目持续集成配置流程

从代码到项目部署的流程:IDEA->gitlab->jenkins->harbor->k8s

一、首先提交上线部署流程,申请k8s资源:

项目持续集成配置流程_第1张图片

申请完资源,到k8s上自己新建命名空间:

项目持续集成配置流程_第2张图片 建命名空间时注意空间的分配,比如你总的是20000,4个命名空间,每个命名空间就是5000。

二、jenkins新建项目,配置流水线任务:

先是新建项目

项目持续集成配置流程_第3张图片

然后建任务,选择流水线

项目持续集成配置流程_第4张图片项目持续集成配置流程_第5张图片选择参数化构建,下面两个参数随便填 

项目持续集成配置流程_第6张图片

配置流水线,按下面几个进行配置,填上git上项目地址和git用户凭据: 项目持续集成配置流程_第7张图片

最后是注意下jenkinsFile文件的脚本路径

项目持续集成配置流程_第8张图片

三、jenkinFile文件的编写,完成相关用户凭据的配置:

//git仓库源代码地址
def git_address = "http://******.git"
//git仓库的账号密码,通过在jenkins里的“凭证”处新建,并将“唯一标识”填入此处
def git_auth = "28436-gitlab"
//Harbor私服地址
def harbor_url = "hubtest.***.com.cn"
//Harbor的项目名称,例如镜像最终是推到hubtest.***.com.cn/mfass/cceapi:1.0.0,则此处填mfass
def harbor_project_name = "searchplatform"
//系统名称
def project_name = "searchplatform-vue";
//Harbor的凭证
def harbor_auth = "28436-harbor"
//k8s凭证,即应用所要部署的k8s集群的Kubeconfig文件,通过在jenkins里的“凭证”处新建,并将“唯一标识”填入此处
def k8s_auth = "28436-k8s";
//rancher凭证
def rancher_auth = "rancher for 28436"
//镜像库凭证,假设部署到k8s上时,要拉取的镜像位于hub上,则该项值为“hub-registry-auth-secret”,若镜像位于hubtest上,则值为“registry-auth-secret”
def secret_name = "registry-auth-secret"

 接下来是拉代码、构建镜像、将镜像部署到k8s上的相关命令:

//此处的label信息参考附录二,该标签已在后台定义,相当于以上部分的内容
podTemplate(label: 'zonghe_jenkins_slave_maven_docker',  cloud: 'kubernetes')
{
	//定义jenkins的操作内容示例,请各自增减
	//此处node信息务必与podTemplate处label信息一致
  node("zonghe_jenkins_slave_maven_docker"){
    // 第一步
    stage('拉取代码'){
      checkout([$class: 'GitSCM', branches: [[name: '${tag}']], userRemoteConfigs: [[credentialsId: "${git_auth}", url: "${git_address}"]]])
    }
    // 第二步
    stage('生成jar包'){
      //编译,构建本地镜像
      sh "mvn -pl MFSearchPlatform_Office-restapi -am clean package -Dmaven.test.skip=true"
    }
    //第三步
    // stage('SonarQube代码审查') {
    //     script {
    //         scannerHome = tool 'sonar-scanner'
    //     }
    //     withSonarQubeEnv('sonarqube-test') {
    //         sh "${scannerHome}/bin/sonar-scanner"
    //     }
    // }
    // 第四步
     stage('构建镜像'){
       //定义镜像名称
       //假设测试环境没有打tag,则增加+"-"+BUILD_NUMBER即构建次数来区分每一次打的镜像,以达到k8s上应用更新的效果,假设测试环境要编译的代码每次都有不同的tag,则无需增加+"-"+BUILD_NUMBER
       def imageName = "${project_name}:${tag}"
       def jarname =  "${project_name}.jar"

       container('docker') {
         sh "docker build -t ${imageName} -f ${WORKSPACE}/MFSearchPlatform_Office-restapi/script/Dockerfile ."
         //给镜像打标签
         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}"
       }
       def deploy_image_name = "${harbor_url}/${harbor_project_name}/${imageName}"
       // 部署到K8S
       rancherRedeploy alwaysPull: true, credential: "${rancher_auth}", images: "${deploy_image_name}", workload:"/project/c-cr9qq:p-kmwh9/workloads/deployment:searchplatform-restapi:searchplatform-restapi"
     }
   }
 }

最下面的k8s地址,参照k8s上工作负载的地址:

项目持续集成配置流程_第9张图片

四、 harbor_project_name是需要自己先在harbor上新建项目:

项目持续集成配置流程_第10张图片

项目记得设为“公开”,否则构建镜像的时候会报以下的错误:项目持续集成配置流程_第11张图片 

五、接下来是dockerFile文件的编写:

FROM hubtest.xiamenair.com.cn/ecip-common/docker-base-os-centos-jdk8:1.0.0
ENV TZ Asia/Shanghai
ADD ${WORKSPACE}/MFSearchPlatform_Office-restapi/target/MFSearchPlatform_Office-restapi-1.0.0.jar server.jar
ENTRYPOINT ["java","-jar","-Xms4000m","-Xmx4000m","-Xss256k","-Xmn200m","/server.jar"]

 里面的路径参照工程目录:

项目持续集成配置流程_第12张图片

通过上面的配置,就可以开始打tag,提交代码,触发jenkins构建镜像了。

 六、k8s新建工作负载:首先是输入工作负载名字,镜像名第一次不会自动部署,需要先去jenkins上构建好镜像,将地址复制到上面,还有就是容器端口对应该服务启动时暴露出来的端口。

项目持续集成配置流程_第13张图片

接着是主机调度的一些配置:

项目持续集成配置流程_第14张图片

再配置一下CPU内存:

项目持续集成配置流程_第15张图片

你可能感兴趣的:(JAVA,ci/cd,kubernetes,容器)