从代码到项目部署的流程:IDEA->gitlab->jenkins->harbor->k8s
一、首先提交上线部署流程,申请k8s资源:
申请完资源,到k8s上自己新建命名空间:
建命名空间时注意空间的分配,比如你总的是20000,4个命名空间,每个命名空间就是5000。
二、jenkins新建项目,配置流水线任务:
先是新建项目
然后建任务,选择流水线
选择参数化构建,下面两个参数随便填
【构建触发器】,可以实现push代码时自动触发jenkins构建镜像:
然后将上面两个地址复制下,到git上的工程配钩子:
配置【流水线】,按下面几个进行配置,填上git上项目地址和git用户凭据:
最后是注意下jenkinsFile文件的脚本路径
三、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上工作负载的地址:
四、 harbor_project_name是需要自己先在harbor上新建项目:
项目记得设为“公开”,否则构建镜像的时候会报以下的错误:
五、接下来是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"]
里面的路径参照工程目录:
通过上面的配置,就可以开始打tag,提交代码,触发jenkins构建镜像了。
六、k8s新建工作负载:首先是输入工作负载名字,镜像名第一次不会自动部署,需要先去jenkins上构建好镜像,将地址复制到上面,还有就是容器端口对应该服务启动时暴露出来的端口。
接着是主机调度的一些配置:
再配置一下CPU内存: