持续集成交付CICD:基于 GitLabCI 与 JenkinsCD 实现后端项目发布

目录

一、实验

1. GitLabCI环境设置

2.优化GitLabCI共享库代码

3.JenkinsCD 发布后端项目

4.再次优化GitLabCI共享库代码

5.JenkinsCD 再次发布后端项目


一、实验

1. GitLabCI环境设置

(1)GitLab给后端项目添加CI配置路径

持续集成交付CICD:基于 GitLabCI 与 JenkinsCD 实现后端项目发布_第1张图片

(2)项目添加runnner

(3)修改项目本地CI文件,避免运行远程流水线报错

持续集成交付CICD:基于 GitLabCI 与 JenkinsCD 实现后端项目发布_第2张图片

(4)分支RELEASE-1.1.1 添加到受保护分支

持续集成交付CICD:基于 GitLabCI 与 JenkinsCD 实现后端项目发布_第3张图片

(5)修改共享库代码

持续集成交付CICD:基于 GitLabCI 与 JenkinsCD 实现后端项目发布_第4张图片

修改CI.yaml

.pipelineInit:
  tags:
    - build
  stage: .pre
  variables:
    GIT_CHECKOUT: "true"
  script:
    - ls -l

.cibuild:
    tags:
      - build
    stage: build
    script:
      - echo "${BUILD_SHELL}"
      - ${BUILD_SHELL}
    artifacts:
      paths:
        - ${ARTIFACT_PATH}

.citest:
  tags:
    - build
  stage: test
  script:
    - echo "${TEST_SHELL}"
    - ${TEST_SHELL}
    # artifacts:
    # reports:
    #   - junit: ${TEST_REPORTS}

.sonarscan:
  tags: 
    - build
  stage: sonarscan
  script: 
    |-
      sonar-scanner -Dsonar.host.url=http://192.168.204.8:9000 \
        -Dsonar.projectKey=${CI_PROJECT_NAME}\
        -Dsonar.projectName=${CI_PROJECT_NAME} \
        -Dsonar.projectVersion=${CI_COMMIT_SHA} \
        -Dsonar.login=${SONAR_AUTH_TOKEN} \
        -Dsonar.ws.timeout=30 \
        -Dsonar.projectDescription=${CI_PROJECT_TITLE} \
        -Dsonar.links.homepage=${CI_PROJECT_URL} \
        -Dsonar.links.ci=${CI_PIPELINE_URL} \
        -Dsonar.sources=src \
        -Dsonar.sourceEncoding=UTF-8 \
        -Dsonar.java.binaries=target/classes \
        -Dsonar.java.test.binaries=target/test-classes \
        -Dsonar.java.surefire.report=target/surefire-reports \
        -Dsonar.core.codeCoveragePlugin=jacoco \
        -Dsonar.jacoco.reportPaths=target/jacoco.exec

.pushartifact:
  tags:
    - build
  stage: pushartifact
  script:
    |-
      if [[ ${PROJECT_TYPE} == "java" ]];then
          pkgName=`ls target/ | grep -e "^maven.*jar$"`
          cd target/
          mv ${pkgName} ${CI_PROJECT_NAME}-${CI_COMMIT_SHA}.jar
          curl -X POST "http://192.168.204.13:8081/service/rest/v1/components?repository=${CI_PROJECT_NAMESPACE}" \
          -H "accept: application/json" \
          -H "Content-Type: multipart/form-data" \
          -F "raw.directory=/${CI_PROJECT_NAMPESPACE}/${CI_PROJECT_NAME}/${{CI_COMMIT_SHA}}/" \
          -F "raw.asset1=@${CI_PROJECT_NAME}-${VERSION}.jar;type=application/java-archive" \
          -F "raw.asset1.filename=${CI_PROJECT_NAME}-${{CI_COMMIT_SHA}}.jar" -u admin:Admin123
      else
          echo "PROJECT_TYPE ERROR [java]"
      fi

修改Nexus仓库地址。

修改前:

修改后:

(6)手动运行Pipeline

持续集成交付CICD:基于 GitLabCI 与 JenkinsCD 实现后端项目发布_第5张图片

(7) 成功

持续集成交付CICD:基于 GitLabCI 与 JenkinsCD 实现后端项目发布_第6张图片

(8)Nexus查看制品(存在目录不统一问题)

持续集成交付CICD:基于 GitLabCI 与 JenkinsCD 实现后端项目发布_第7张图片

2.优化GitLabCI共享库代码

(1) 修改CI.yaml

.pipelineInit:
  tags:
    - build
  stage: .pre
  variables:
    GIT_CHECKOUT: "true"
  script:
    - ls -l

.cibuild:
    tags:
      - build
    stage: build
    script:
      - echo "${BUILD_SHELL}"
      - ${BUILD_SHELL}
    artifacts:
      paths:
        - ${ARTIFACT_PATH}

.citest:
  tags:
    - build
  stage: test
  script:
    - echo "${TEST_SHELL}"
    - ${TEST_SHELL}
    # artifacts:
    # reports:
    #   - junit: ${TEST_REPORTS}

.sonarscan:
  tags: 
    - build
  stage: sonarscan
  script: 
    |-
      sonar-scanner -Dsonar.host.url=http://192.168.204.8:9000 \
        -Dsonar.projectKey=${CI_PROJECT_NAME}\
        -Dsonar.projectName=${CI_PROJECT_NAME} \
        -Dsonar.projectVersion=${CI_COMMIT_SHA} \
        -Dsonar.login=${SONAR_AUTH_TOKEN} \
        -Dsonar.ws.timeout=30 \
        -Dsonar.projectDescription=${CI_PROJECT_TITLE} \
        -Dsonar.links.homepage=${CI_PROJECT_URL} \
        -Dsonar.links.ci=${CI_PIPELINE_URL} \
        -Dsonar.sources=src \
        -Dsonar.sourceEncoding=UTF-8 \
        -Dsonar.java.binaries=target/classes \
        -Dsonar.java.test.binaries=target/test-classes \
        -Dsonar.java.surefire.report=target/surefire-reports \
        -Dsonar.core.codeCoveragePlugin=jacoco \
        -Dsonar.jacoco.reportPaths=target/jacoco.exec

.pushartifact:
  tags:
    - build
  stage: pushartifact
  script:
    |-
      if [[ ${PROJECT_TYPE} == "java" ]];then
          pkgName=`ls target/ | grep -e "^maven.*jar$"`
          cd target/
          mv ${pkgName} ${CI_PROJECT_NAME}-${CI_COMMIT_SHA}.jar
          curl -X POST "http://192.168.204.13:8081/service/rest/v1/components?repository=${CI_PROJECT_NAMESPACE}" \
          -H "accept: application/json" \
          -H "Content-Type: multipart/form-data" \
          -F "raw.directory=/${CI_PROJECT_NAME}/${{CI_COMMIT_SHA}}/" \
          -F "raw.asset1=@${CI_PROJECT_NAME}-${VERSION}.jar;type=application/java-archive" \
          -F "raw.asset1.filename=${CI_PROJECT_NAME}-${{CI_COMMIT_SHA}}.jar" -u admin:Admin123
      else
          echo "PROJECT_TYPE ERROR [java]"
      fi

修改Nexus上传目录。

修改前:

持续集成交付CICD:基于 GitLabCI 与 JenkinsCD 实现后端项目发布_第8张图片

修改后:

(2)手动运行Pipeline

持续集成交付CICD:基于 GitLabCI 与 JenkinsCD 实现后端项目发布_第9张图片

(3)成功

持续集成交付CICD:基于 GitLabCI 与 JenkinsCD 实现后端项目发布_第10张图片

(4)Nexus查看制品(存在版本号不统一问题)

持续集成交付CICD:基于 GitLabCI 与 JenkinsCD 实现后端项目发布_第11张图片

3.JenkinsCD 发布后端项目

(1)查看ansible被控端状态

持续集成交付CICD:基于 GitLabCI 与 JenkinsCD 实现后端项目发布_第12张图片

持续集成交付CICD:基于 GitLabCI 与 JenkinsCD 实现后端项目发布_第13张图片

(2)拿到上一次GitLabCI上传到Nexus的版本号,在Jenkins上手动构建流水线

持续集成交付CICD:基于 GitLabCI 与 JenkinsCD 实现后端项目发布_第14张图片

(3)Blue Ocean查看

持续集成交付CICD:基于 GitLabCI 与 JenkinsCD 实现后端项目发布_第15张图片

4.再次优化GitLabCI共享库代码

(1 )修改CI.yaml

.pipelineInit:
  tags:
    - build
  stage: .pre
  variables:
    GIT_CHECKOUT: "true"
  script:
    - ls -l

.cibuild:
    tags:
      - build
    stage: build
    script:
      - echo "${BUILD_SHELL}"
      - ${BUILD_SHELL}
    artifacts:
      paths:
        - ${ARTIFACT_PATH}

.citest:
  tags:
    - build
  stage: test
  script:
    - echo "${TEST_SHELL}"
    - ${TEST_SHELL}
    # artifacts:
    # reports:
    #   - junit: ${TEST_REPORTS}

.sonarscan:
  tags: 
    - build
  stage: sonarscan
  script: 
    |-
      sonar-scanner -Dsonar.host.url=http://192.168.204.8:9000 \
        -Dsonar.projectKey=${CI_PROJECT_NAME}\
        -Dsonar.projectName=${CI_PROJECT_NAME} \
        -Dsonar.projectVersion=${CI_COMMIT_SHA} \
        -Dsonar.login=${SONAR_AUTH_TOKEN} \
        -Dsonar.ws.timeout=30 \
        -Dsonar.projectDescription=${CI_PROJECT_TITLE} \
        -Dsonar.links.homepage=${CI_PROJECT_URL} \
        -Dsonar.links.ci=${CI_PIPELINE_URL} \
        -Dsonar.sources=src \
        -Dsonar.sourceEncoding=UTF-8 \
        -Dsonar.java.binaries=target/classes \
        -Dsonar.java.test.binaries=target/test-classes \
        -Dsonar.java.surefire.report=target/surefire-reports \
        -Dsonar.core.codeCoveragePlugin=jacoco \
        -Dsonar.jacoco.reportPaths=target/jacoco.exec

.pushartifact:
  tags:
    - build
  stage: pushartifact
  script:
    |-
      if [[ ${PROJECT_TYPE} == "java" ]];then
          VERSION=`echo ${CI_COMMIT_BRANCH} | sed 's/RELEASE-//g'`
          pkgName=`ls target/ | grep -e "^maven.*jar$"`
          cd target/
          mv ${pkgName} ${CI_PROJECT_NAME}-${VERSION}.jar
          curl -X POST "http://192.168.204.13:8081/service/rest/v1/components?repository=${CI_PROJECT_NAMESPACE}" \
          -H "accept: application/json" \
          -H "Content-Type: multipart/form-data" \
          -F "raw.directory=/${CI_PROJECT_NAME}/${VERSION}/" \
          -F "raw.asset1=@${CI_PROJECT_NAME}-${VERSION}.jar;type=application/java-archive" \
          -F "raw.asset1.filename=${CI_PROJECT_NAME}-${VERSION}.jar" -u admin:Admin123
      else
          echo "PROJECT_TYPE ERROR [java]"
      fi

                  

修改分支变量。

修改前:

持续集成交付CICD:基于 GitLabCI 与 JenkinsCD 实现后端项目发布_第16张图片

修改后:

持续集成交付CICD:基于 GitLabCI 与 JenkinsCD 实现后端项目发布_第17张图片

(2)Nexus删除后端项目1.1.1分支的制品

持续集成交付CICD:基于 GitLabCI 与 JenkinsCD 实现后端项目发布_第18张图片

已删除

持续集成交付CICD:基于 GitLabCI 与 JenkinsCD 实现后端项目发布_第19张图片

(3)GitLab手动运行Pipeline

持续集成交付CICD:基于 GitLabCI 与 JenkinsCD 实现后端项目发布_第20张图片

(4) 成功

持续集成交付CICD:基于 GitLabCI 与 JenkinsCD 实现后端项目发布_第21张图片

(5)Nexus查看制品

持续集成交付CICD:基于 GitLabCI 与 JenkinsCD 实现后端项目发布_第22张图片

5.JenkinsCD 再次发布后端项目

(1)Jenkins上手动构建流水线

持续集成交付CICD:基于 GitLabCI 与 JenkinsCD 实现后端项目发布_第23张图片

(2)Blue Ocean 查看

持续集成交付CICD:基于 GitLabCI 与 JenkinsCD 实现后端项目发布_第24张图片

你可能感兴趣的:(ci/cd)