• 项目持续集成配置流程


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

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

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

     建命名空间时注意空间的分配,比如你总的是20000,4个命名空间,每个命名空间就是5000。

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

    先是新建项目

    然后建任务,选择流水线

    选择参数化构建,下面两个参数随便填 

    【构建触发器】,可以实现push代码时自动触发jenkins构建镜像:

    然后将上面两个地址复制下,到git上的工程配钩子:

    配置【流水线】,按下面几个进行配置,填上git上项目地址和git用户凭据: 

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

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

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

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

    1. //此处的label信息参考附录二,该标签已在后台定义,相当于以上部分的内容
    2. podTemplate(label: 'zonghe_jenkins_slave_maven_docker', cloud: 'kubernetes')
    3. {
    4. //定义jenkins的操作内容示例,请各自增减
    5. //此处node信息务必与podTemplate处label信息一致
    6. node("zonghe_jenkins_slave_maven_docker"){
    7. // 第一步
    8. stage('拉取代码'){
    9. checkout([$class: 'GitSCM', branches: [[name: '${tag}']], userRemoteConfigs: [[credentialsId: "${git_auth}", url: "${git_address}"]]])
    10. }
    11. // 第二步
    12. stage('生成jar包'){
    13. //编译,构建本地镜像
    14. sh "mvn -pl MFSearchPlatform_Office-restapi -am clean package -Dmaven.test.skip=true"
    15. }
    16. //第三步
    17. // stage('SonarQube代码审查') {
    18. // script {
    19. // scannerHome = tool 'sonar-scanner'
    20. // }
    21. // withSonarQubeEnv('sonarqube-test') {
    22. // sh "${scannerHome}/bin/sonar-scanner"
    23. // }
    24. // }
    25. // 第四步
    26. stage('构建镜像'){
    27. //定义镜像名称
    28. //假设测试环境没有打tag,则增加+"-"+BUILD_NUMBER即构建次数来区分每一次打的镜像,以达到k8s上应用更新的效果,假设测试环境要编译的代码每次都有不同的tag,则无需增加+"-"+BUILD_NUMBER
    29. def imageName = "${project_name}:${tag}"
    30. def jarname = "${project_name}.jar"
    31. container('docker') {
    32. sh "docker build -t ${imageName} -f ${WORKSPACE}/MFSearchPlatform_Office-restapi/script/Dockerfile ."
    33. //给镜像打标签
    34. sh "docker tag ${imageName} ${harbor_url}/${harbor_project_name}/${imageName}"
    35. //登录Harbor,并上传镜像
    36. withCredentials([usernamePassword(credentialsId: "${harbor_auth}", passwordVariable: 'password', usernameVariable: 'username')]) {
    37. //登录
    38. sh "docker login -u ${username} -p ${password} ${harbor_url}"
    39. //上传镜像
    40. sh "docker push ${harbor_url}/${harbor_project_name}/${imageName}"
    41. }
    42. //删除本地镜像
    43. sh "docker rmi -f ${imageName}"
    44. sh "docker rmi -f ${harbor_url}/${harbor_project_name}/${imageName}"
    45. }
    46. def deploy_image_name = "${harbor_url}/${harbor_project_name}/${imageName}"
    47. // 部署到K8S
    48. rancherRedeploy alwaysPull: true, credential: "${rancher_auth}", images: "${deploy_image_name}", workload:"/project/c-cr9qq:p-kmwh9/workloads/deployment:searchplatform-restapi:searchplatform-restapi"
    49. }
    50. }
    51. }

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

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

    项目记得设为“公开”,否则构建镜像的时候会报以下的错误: 

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

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

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

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

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

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

    再配置一下CPU内存:

  • 相关阅读:
    网规案例分析-0928
    pytest+requests+allure自动化测试接入Jenkins学习
    父域 Cookie实现sso单点登录
    C++类继承
    AI智能问答系统源码/AI绘画商业系统/支持GPT联网提问/支持Midjourney绘画
    Win11快捷安装到鼠标右键的快捷栏里(亲测有用哦)
    学不会的线段树
    TOYOTA MOTOR CORPORATION Programming Contest 2022(AtCoder Beginner Contest 270)
    linux笔记(4):东山哪吒开发板(D1-H)测试gpio点亮LED
    OKR设定实例,看这些名企是怎么做的?
  • 原文地址:https://blog.csdn.net/KGzhang/article/details/127441450