国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

DevOps系列文章 之GitLabCI模板庫的流水線

這篇具有很好參考價值的文章主要介紹了DevOps系列文章 之GitLabCI模板庫的流水線。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

目錄結構,jobs目錄用于存放作業(yè)模板。templates目錄用于存放流水線模板。這次使用??default-pipeline.yml??作為所有作業(yè)的基礎模板。

DevOps系列文章 之GitLabCI模板庫的流水線,運維

作業(yè)模板

作業(yè)分為Build、test、codeanalysis、artifactory、deploy部分,在每個作業(yè)中配置了rules功能開關,由變量控制最終作業(yè)的運行。

jobs/build.yml ?構建作業(yè)模板

包含兩個作業(yè)模板,分別是普通的構建模板(maven/npm/gradle)和docker 鏡像構建模板。

## build相關作業(yè)

.build:
  stage: build
  script: 
    - |
      ${BUILD_SHELL}
  variables:
    GIT_CHECKOUT: "true"
  rules:
    - if: " $RUN_PIPELINE_BUILD == 'no' "
      when: never
    - when: always


## 構建鏡像
.build-docker:
  stage: buildimage
  script:
    - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWD  $CI_REGISTRY
    - docker build -t ${IMAGE_NAME} -f ${DOCKER_FILE_PATH} .
    - docker push ${IMAGE_NAME} 
    - docker rmi ${IMAGE_NAME} 
  rules:
    - if: " $RUN_BUILD_IMAGE == 'no' "
      when: never
    - when: always
jobs/test.yml ?測試作業(yè)模板

主要用于運行項目單元測試,例如maven、gradle、npm單元測試。

#單元測試
.test:
  stage: test
  script:
    - $TEST_SHELL
  artifacts:
    reports:
      junit: ${JUNIT_REPORT_PATH}
  rules:
    - if: " $RUN_PIPELINE_TEST == 'no' "
      when: never
    - when: always
jobs/codeanalysis.yml 代碼掃描模板

包含兩個作業(yè)模板,分別為掃描作業(yè)和獲取掃描結果。這里面將掃描參數(shù)進行了分類,通用的項目參數(shù)、特殊的合并請求參數(shù)、自定義的項目參數(shù)。

##代碼掃描
##
##
##

.code_analysis:
  variables:
    GLOBAL_PROJECT_ARGS: "-Dsonar.projectKey=${CI_PROJECT_NAME} 
                          -Dsonar.projectName=${CI_PROJECT_NAME} 
                          -Dsonar.projectVersion=${CI_COMMIT_REF_NAME} 
                          -Dsonar.projectDescription=${CI_PROJECT_TITLE}"
    GLOBAL_SERVER_ARGS:  "-Dsonar.ws.timeout=30 
                          -Dsonar.links.homepage=${CI_PROJECT_URL} 
                          -Dsonar.host.url=${SONAR_SERVER_URL} 
                          -Dsonar.login=${SONAR_SERVER_LOGIN}
                          -Dsonar.sourceEncoding=UTF-8 "
    GLOBAL_MR_ARGS: " -Dsonar.pullrequest.key=${CI_MERGE_REQUEST_IID} 
                      -Dsonar.pullrequest.branch=${CI_MERGE_REQUEST_SOURCE_BRANCH_NAME} 
                      -Dsonar.pullrequest.base=${CI_MERGE_REQUEST_TARGET_BRANCH_NAME} 
                      -Dsonar.gitlab.ref_name=${CI_COMMIT_REF_NAME} 
                      -Dsonar.gitlab.commit_sha=${CI_COMMIT_SHA} 
                      -Dsonar.gitlab.project_id=${CI_PROJECT_PATH} 
                      -Dsonar.pullrequest.gitlab.repositorySlug=${CI_PROJECT_ID} "
    MULTI_BRANCH_ARGS: "-Dsonar.branch.name=${CI_COMMIT_REF_NAME}"
  stage: code_analysis
  script:
    - echo ${GLOBAL_PROJECT_ARGS} ${GLOBAL_SERVER_ARGS} ${SONAR_SCAN_ARGS} ${GLOBAL_MR_ARGS}
    #sonar-scanner $GLOBAL_PROJECT_ARGS $GLOBAL_SERVER_ARGS $SCAN_JAVA_ARGS
    - |
        if [ $CI_PIPELINE_SOURCE == 'merge_request_event' ] 
        
        then
           echo "sonar-scanner ${GLOBAL_PROJECT_ARGS} ${GLOBAL_SERVER_ARGS} ${SONAR_SCAN_ARGS} " 
           sonar-scanner ${GLOBAL_PROJECT_ARGS} ${GLOBAL_SERVER_ARGS} ${SONAR_SCAN_ARGS} 
        else 
           echo "sonar-scanner ${GLOBAL_PROJECT_ARGS} ${GLOBAL_SERVER_ARGS} ${SONAR_SCAN_ARGS} ${MULTI_BRANCH_ARGS}"
           sonar-scanner ${GLOBAL_PROJECT_ARGS} ${GLOBAL_SERVER_ARGS} ${SONAR_SCAN_ARGS}  ${MULTI_BRANCH_ARGS}
        fi 
  rules:
    - if: " $RUN_CODE_ANALYSIS == 'no' "
      when: never
    - when: always


#### 獲取代碼掃描結果
.get_analysis_result:
  stage: get_analysis_result
  script:
    - |
        SONAR_REPORT_URL=$(grep "ceTaskUrl" .scannerwork/report-task.txt  | awk -F = '{OFS="=";print $2,$3}')
        echo ${SONAR_REPORT_URL}
        
        
        for i in {1..10}
        do
          curl -k -u "${SONAR_SERVER_LOGIN}":"" ${SONAR_REPORT_URL}  -o sonar_result.txt -s
          grep '"status":"SUCCESS"' sonar_result.txt  && SONAR_SCAN_RESULT='SUCCESS'
        
          if [ ${SONAR_SCAN_RESULT} == 'SUCCESS' ]
            then
              echo "${SONAR_SCAN_RESULT}"
              SONAR_SCAN_RESULT=SUCCESS

              curl -k -u "${SONAR_SERVER_LOGIN}":"" "${SONAR_SERVER_URL}/api/qualitygates/project_status?projectKey=$CI_PROJECT_NAME&branch=$CI_COMMIT_REF_NAME" -o result.txt  -s
              echo "result info ---->>>>>"
              cat result.txt
              result=`cat result.txt | awk -F ':' '{print $3}' | awk -F '"' '{print$2}'`
              
              echo $result

              if [ $result == 'ERROR' ]                 
                then 
                  echo "${result}"
                  exit 122
                  break;
              else
                  echo "success!"
                  break;
              fi
            
          else
            SONAR_SCAN_RESULT='ERROR'
            echo "第$i次獲取結果信息,不是成功狀態(tài),睡眠10秒!"
            cat sonar_result.txt
            sleep 10
          fi
        done
        
  rules:
    - if: " $RUN_CODE_ANALYSIS == 'no' "
      when: never
    - when: always
jobs/artifactory.yml 制品管理作業(yè)

包含兩個作業(yè),制品上傳與下載。使用artifactory制品庫接口。

## 制品庫相關
##

.deploy-artifact:
  stage: deploy-artifact
  script:
    - echo "curl -u${ARTIFACT_USER}:${ARTIFACT_PASSWD} -T ${ARTIFACT_PATH} $ARTIFACTORY_URL/$ARTIFACTORY_NAME/$TARGET_FILE_PATH/$TARGET_ARTIFACT_NAME"
    - curl -u${ARTIFACT_USER}:${ARTIFACT_PASSWD} -T ${ARTIFACT_PATH} "$ARTIFACTORY_URL/$ARTIFACTORY_NAME/$TARGET_FILE_PATH/$TARGET_ARTIFACT_NAME"
  rules:
    - if: " $RUN_DEPLOY_ARTIFACTS == 'no' "
      when: never
    - when: always


.down-artifact:
  stage: down-artifact
  script:
    - curl -u${ARTIFACT_USER}:${ARTIFACT_PASSWD} -O "$ARTIFACTORY_URL/$ARTIFACTORY_NAME/$TARGET_FILE_PATH/$TARGET_ARTIFACT_NAME"
    - ls
jobs/deploy.yml ?發(fā)布作業(yè)模板

發(fā)布基于k8s的發(fā)布和回滾配置。

## 應用發(fā)布


## 使用kubectl鏡像發(fā)布
.deploy_k8s:
  stage: deploy
  script:
    - echo $KUBE_TOKEN
    - kubectl config set-cluster my-cluster --server=${KUBE_URL} --certificate-authority="${KUBE_CA_PEM_FILE}"
    - kubectl config set-credentials admin --token=${KUBE_TOKEN}
    - ls -a 
    - sed -i "s#__namespace__#${NAMESPACE}#g" ${DEPLOY_FILE}
    - sed -i "s#__appname__#${APP_NAME}#g" ${DEPLOY_FILE}
    - sed -i "s#__containerport__#${CONTAINER_PORT}#g" ${DEPLOY_FILE} 
    - sed -i "s#__nodeport__#${NODE_PORT}#g" ${DEPLOY_FILE} 
    - sed -i "s#__imagename__#${IMAGE_NAME}#g" ${DEPLOY_FILE} 
    - sed -i "s#__CI_ENVIRONMENT_SLUG__#${CI_ENVIRONMENT_SLUG}#g" ${DEPLOY_FILE}
    - sed -i "s#__CI_PROJECT_PATH_SLUG__#${CI_PROJECT_PATH_SLUG}#g" ${DEPLOY_FILE}
    - sed -i "s#__ingressdomain__#${ENV_URL}#g" ${DEPLOY_FILE}
    - cat ${DEPLOY_FILE}
    - "kubectl create secret docker-registry ${APP_NAME} \
            --docker-server=${CI_REGISTRY} \
            --docker-username=$CI_REGISTRY_USER \
            --docker-password=${CI_REGISTRY_PASSWD} \
            --docker-email=test@test.com -n ${NAMESPACE} || echo 'secrets already exists'"
    - kubectl apply -f ${DEPLOY_FILE}
  rules:
    - if: " $RUN_DEPLOY_K8S == 'no'"
      when: never
    - when: manual
  environment:
    name: "${ENV_NAME}"
    url: "http://${ENV_NAME}.${CI_PROJECT_NAMESPACE}.${CI_PROJECT_NAME}.devops.com"

  


## 回滾
.rollout_k8s:
  stage: deploy
  script:
    - rm -rf $HOME/.kube
    - kubectl config set-cluster my-cluster --server=${KUBE_URL} --certificate-authority="${KUBE_CA_PEM_FILE}"
    - kubectl config set-credentials admin --token=${KUBE_TOKEN}
    - kubectl rollout history deployment ${APP_NAME} -n ${NAMESPACE}
    - kubectl rollout undo deployment ${APP_NAME} -n ${NAMESPACE}
  rules:
    - if: " $RUN_DEPLOY_K8S == 'no' "
      when: never
    - when: manual
  environment:
    name: "${ENV_NAME}"
    action: stop

default流水線模板

templates/default-pipeline.yml 模板分成個部分

  • include導入作業(yè)模板
  • variables 定義全局變量
  • workflow 定義流水線控制
  • jobs 構建與發(fā)布作業(yè)

include導入作業(yè)模板

include:
  - project: 'cidevops/cidevops-newci-service'
    ref: master
    file: 'jobs/build.yml'
  - project: 'cidevops/cidevops-newci-service'
    ref: master
    file: 'jobs/test.yml'
  - project: 'cidevops/cidevops-newci-service'
    ref: master
    file: 'jobs/codeanalysis.yml'
  - project: 'cidevops/cidevops-newci-service'
    ref: master
    file: 'jobs/deploy.yml'
  - project: 'cidevops/cidevops-newci-service'
    ref: master
    file: 'jobs/artifactory.yml'

variables 定義全局變量

variables:
  ## 全局配置
  GIT_CLONE_PATH: ${CI_BUILDS_DIR}/builds/${CI_PROJECT_NAMESPACE}/${CI_PROJECT_NAME}/${CI_PIPELINE_ID}    
  GIT_CHECKOUT: "false"
  CACHE_DIR: ""

  ## 作業(yè)控制
  RUN_PIPELINE_BUILD: ""     #是否運行構建 yes/no 
  RUN_PIPELINE_TEST: ""      #是否運行測試 yes/no 
  RUN_CODE_ANALYSIS: ""      #是否代碼掃描 yes/no 
  RUN_BUILD_IMAGE: ""        #是否生成鏡像 yes/no
  RUN_DEPLOY_ARTIFACTS: ""   #是否上傳制品 yes/no
  RUN_DEPLOY_K8S: ""         #是否發(fā)布K8S yes/no

  ## 依賴容器鏡像
  BUILD_IMAGE: ""
  CURL_IMAGE: "curlimages/curl:7.70.0"
  SONAR_IMAGE: "sonarsource/sonar-scanner-cli:latest"
  KUBECTL_IMAGE: "lucj/kubectl:1.17.2"
  
  
  ## 構建測試參數(shù)
  MAVEN_OPTS: ""                #maven構建參數(shù) 
  GRADLE_OPTS: ""               #gradle構建參數(shù)
  BUILD_SHELL: ''               #構建命令

  ## 單元測試參數(shù)
  TEST_SHELL : 'mvn test  --settings=./settings.xml '       #測試命令
  JUNIT_REPORT_PATH: 'target/surefire-reports/TEST-*.xml'   #單元測試報告

  ## 代碼掃描
  SONAR_SOURCE_DIR : "src"                                          #項目源碼目錄
  SONAR_SERVER_URL: "http://192.168.1.200:30090"                    #SonarQube服務器信息
  SONAR_SERVER_LOGIN: "ee2bcb37deeb6dfe3a07fe08fb529559b00c1b7b"    #Sonar Token最好在項目中定義。
  SONAR_SCAN_ARGS: "-Dsonar.sources=${SONAR_SOURCE_DIR}"            #項目掃描參數(shù)

  ## 構建鏡像
  CI_REGISTRY: 'registry.cn-beijing.aliyuncs.com'               #鏡像倉庫地址              
  CI_REGISTRY_USER: 'xxxxxx'                               #倉庫用戶信息
  #CI_REGISTRY_PASSWD: 'xxxxxxxx.'                              #倉庫用戶密碼
  IMAGE_NAME: "${CI_REGISTRY}/${CI_PROJECT_PATH}:${CI_COMMIT_REF_NAME}-${CI_COMMIT_SHORT_SHA}"     #鏡像名稱
  DOCKER_FILE_PATH: "./Dockerfile"                              #Dockerfile位置

  ## 上傳制品庫(artifactory)
  ARTIFACTORY_URL: "http://192.168.1.200:30082/artifactory"     #制品庫地址
  ARTIFACTORY_NAME: "${CI_PROJECT_NAMESPACE}"                   #制品庫名稱
  ARTIFACT_PACKAGE: "jar"                                       #制品類型
  ARTIFACT_PATH: "target/*.${ARTIFACT_PACKAGE}"                 #制品位置
  TARGET_FILE_PATH: "${CI_PROJECT_NAMESPACE}/${CI_PROJECT_NAME}/${CI_COMMIT_REF_NAME}-${CI_COMMIT_SHORT_SHA}"   #目標制品位置(目錄結構)
  TARGET_ARTIFACT_NAME: "${CI_PROJECT_NAME}-${CI_COMMIT_REF_NAME}-${CI_COMMIT_SHORT_SHA}.${ARTIFACT_PACKAGE}"   #目標制品名稱

  ## 部署應用k8s
  APP_NAME: "$CI_PROJECT_NAME"                #應用名稱 <--> deploymentName
  CONTAINER_PORT: "8081"                      #服務端口 <--> servicesPort
  NAMESPACE: "$CI_PROJECT_NAME-$CI_PROJECT_ID-$CI_ENVIRONMENT_SLUG"             #名稱空間
  ENV_URL: "${ENV_NAME}.${CI_PROJECT_NAMESPACE}.${CI_PROJECT_NAME}.devops.com"  #IngressHosts

流水線設置

## 流水線控制
workflow:
  rules:
    - if: "$CI_MERGE_REQUEST_ID"          #過濾合并請求
      when: never
    - if: "$CI_PIPELINE_SOURCE == 'web'"    #允許在web頁面發(fā)布
    - if: "$CI_COMMIT_REF_NAME =~ /^RELEASE-*/ || $CI_COMMIT_REF_NAME =~ /master/ "  #過濾版本分支和主干分支提交代碼觸發(fā)
      when: never
    - if: "$CI_COMMIT_BEFORE_SHA == '0000000000000000000000000000000000000000'"     #過濾分支創(chuàng)建請求
      when: never
    ### 默認策略
    - when: always


## 運行階段  
stages:
  - build
  - test
  - parallel01
  - get_analysis_result
  - deploy-artifact
  - deploy-feature
  - rollout-feature
  - deploy-uat
  - rollout-uat
  - deploy-stag
  - rollout-stag
  - deploy-prod
  - rollout-prod

cache:
  paths:
    - ${CACHE_DIR}
    
before_script:
  - export

構建作業(yè)配置

################# Jobs Configure #####################
## 構建作業(yè)
build:
  image: ${BUILD_IMAGE}
  extends: .build

## 測試作業(yè)
test:
  image: ${BUILD_IMAGE}
  extends: .test
  before_script:
    - ls 
    - ls ${CACHE_DIR}

## 代碼掃描
code_analysis:
  stage: parallel01
  image: ${SONAR_IMAGE}
  extends: .code_analysis

## 獲取構建結果
get_analysis_result:
  image: ${CURL_IMAGE}
  extends: .get_analysis_result
  needs:
    - code_analysis


## 構建鏡像
build_image:
  image: docker:latest
  services:
    - name: docker:dind
  stage: parallel01
  extends: .build-docker


## 上傳制品
deploy_artifact:
  image: ${CURL_IMAGE}
  stage: deploy-artifact
  extends: .deploy-artifact

## 下載制品  
#down_artifact:  
#  image: ${CURL_IMAGE}
#  stage: down_artifact
#  extends: .down-artifact

發(fā)布部署作業(yè)配置

發(fā)布部署作業(yè)配置

#################Deploy Feature Jobs Configure #####################
## feature發(fā)布應用
deploy_feature:
  variables:
    DEPLOY_FILE: 'deployment.yaml'
    ENV_NAME: 'feature'
  stage: deploy-feature
  image: ${KUBECTL_IMAGE}
  extends: .deploy_k8s
  environment:
    on_stop: "rollout_feature"
  rules:
    - if: $RUN_DEPLOY_K8S == 'no'
      when: never
    - if: $CI_COMMIT_REF_NAME =~ /^RELEASE-*/ || $CI_COMMIT_REF_NAME =~ /master/ || $CI_COMMIT_TAG
      when: never
    - when: manual
    
## 應用回滾
rollout_feature:
  variables:
    DEPLOY_FILE: 'deployment.yaml'
    ENV_NAME: 'feature'
  stage: rollout-feature
  image: ${KUBECTL_IMAGE}
  extends: .rollout_k8s
  needs:
    - deploy_feature
  rules:
    - if: $RUN_DEPLOY_K8S == 'no'
      when: never
    - if: $CI_COMMIT_REF_NAME =~ /^RELEASE-*/ || $CI_COMMIT_REF_NAME =~ /master/ || $CI_COMMIT_TAG
      when: never
    - when: on_failure


#################Deploy UAT Jobs Configure #####################
## UAT
deploy_uat:
  variables:
    DEPLOY_FILE: 'config/deployment-uat.yaml'
    ENV_NAME: 'uat'
  stage: deploy-uat
  image: ${KUBECTL_IMAGE}
  extends: .deploy_k8s
  environment:
    on_stop: "rollout_uat"
  rules:
    - if: $RUN_DEPLOY_K8S == 'no'
      when: never
    - if: $CI_COMMIT_REF_NAME =~ /^RELEASE-*/ || $CI_COMMIT_REF_NAME =~ /master/ || $CI_COMMIT_TAG
      when: manual
    - when: never

## UAT應用回滾
rollout_uat:
  variables:
    DEPLOY_FILE: 'config/deployment-uat.yaml'
    ENV_NAME: 'uat'
  stage: rollout-uat
  image: ${KUBECTL_IMAGE}
  extends: .rollout_k8s
  needs:
    - deploy_uat
  rules:
    - if: $RUN_DEPLOY_K8S == 'no'
      when: never
    - if: $CI_COMMIT_REF_NAME =~ /^RELEASE-*/ || $CI_COMMIT_REF_NAME =~ /master/ || $CI_COMMIT_TAG
      when: on_failure
    - when: never

#################Deploy STAG Jobs Configure #####################
## STAG
deploy_stag:
  variables:
    DEPLOY_FILE: 'config/deployment-stag.yaml'
    ENV_NAME: 'stag'
  stage: deploy-stag
  image: ${KUBECTL_IMAGE}
  extends: .deploy_k8s
  environment:
    on_stop: "rollout_stag"
  needs:
    - deploy_uat
  rules:
    - if: $RUN_DEPLOY_K8S == 'no'
      when: never
    - if: $CI_COMMIT_REF_NAME =~ /^RELEASE-*/ || $CI_COMMIT_REF_NAME =~ /master/ || $CI_COMMIT_TAG
      when: manual
    - when: never

## STAG應用回滾
rollout_stag:
  variables:
    DEPLOY_FILE: 'config/deployment-stag.yaml'
    ENV_NAME: 'stag'
  stage: rollout-stag
  image: ${KUBECTL_IMAGE}
  extends: .rollout_k8s
  needs:
    - deploy_stag
  rules:
    - if: $RUN_DEPLOY_K8S == 'no'
      when: never
    - if: $CI_COMMIT_REF_NAME =~ /^RELEASE-*/ || $CI_COMMIT_REF_NAME =~ /master/ || $CI_COMMIT_TAG
      when: on_failure
    - when: never

#################Deploy PROD Jobs Configure #####################
## PROD
deploy_prod:
  variables:
    DEPLOY_FILE: 'config/deployment-prod.yaml'
    ENV_NAME: 'prod'
  stage: deploy-prod
  image: ${KUBECTL_IMAGE}
  extends: .deploy_k8s
  environment:
    on_stop: "rollout_prod"
  needs:
    - deploy_stag
  rules:
    - if: $RUN_DEPLOY_K8S == 'no'
      when: never
    - if: $CI_COMMIT_REF_NAME =~ /^RELEASE-*/ || $CI_COMMIT_REF_NAME =~ /master/ || $CI_COMMIT_TAG
      when: manual
    - when: never

## PROD應用回滾
rollout_prod:
  variables:
    DEPLOY_FILE: 'config/deployment-prod.yaml'
    ENV_NAME: 'prod'
  stage: rollout-prod
  image: ${KUBECTL_IMAGE}
  extends: .rollout_k8s
  needs:
    - deploy_prod
  rules:
    - if: $RUN_DEPLOY_K8S == 'no'
      when: never
    - if: $CI_COMMIT_REF_NAME =~ /^RELEASE-*/ || $CI_COMMIT_REF_NAME =~ /master/ || $CI_COMMIT_TAG
      when: on_failure
    - when: never

JAVA項目交付流水線

導入作業(yè)模板

include:
  - project: 'cidevops/cidevops-newci-service'
    ref: master
    file: 'templates/default-pipeline.yml'

配置項目參數(shù)

variables:
  ## 全局配置
  GIT_CLONE_PATH: ${CI_BUILDS_DIR}/builds/${CI_PROJECT_NAMESPACE}/${CI_PROJECT_NAME}/${CI_PIPELINE_ID}    
  GIT_CHECKOUT: "false"
  CACHE_DIR: "target/"

  ## 作業(yè)控制
  RUN_PIPELINE_BUILD:   "yes"     #是否運行構建 yes/no 
  RUN_PIPELINE_TEST:    "yes"      #是否運行測試 yes/no 
  RUN_CODE_ANALYSIS:    "yes"     #是否代碼掃描 yes/no 
  RUN_BUILD_IMAGE:      "yes"     #是否生成鏡像 yes/no
  RUN_DEPLOY_ARTIFACTS: "no"      #是否上傳制品 yes/no
  RUN_DEPLOY_K8S:       "yes"     #是否發(fā)布K8S yes/no

  ## 依賴容器鏡像
  BUILD_IMAGE: "maven:3.6.3-jdk-8"
  CURL_IMAGE: "curlimages/curl:7.70.0"
  SONAR_IMAGE: "sonarsource/sonar-scanner-cli:latest"
  KUBECTL_IMAGE: "lucj/kubectl:1.17.2"
  
  
  ## 構建測試參數(shù)
  MAVEN_OPTS: "-Dmaven.repo.local=/home/gitlab-runner/ci-build-cache/maven "  #maven構建參數(shù)
  BUILD_SHELL: 'mvn clean package  -DskipTests  --settings=./settings.xml '   #構建命令
  #GRADLE_OPTS: ""               #gradle構建參數(shù)

  ## 單元測試參數(shù)
  TEST_SHELL : 'mvn test  --settings=./settings.xml   '       #測試命令
  JUNIT_REPORT_PATH: 'target/surefire-reports/TEST-*.xml'   #單元測試報告

  ## 代碼掃描
  SONAR_SOURCE_DIR : "src"                                          #項目源碼目錄
  SONAR_SERVER_URL: "http://192.168.1.200:30090"                    #SonarQube服務器信息
  SONAR_SERVER_LOGIN: "ee2bcb37deeb6dfe3a07fe08fb529559b00c1b7b"    #Sonar Token最好在項目中定義。
  SONAR_SCAN_ARGS: "-Dsonar.sources=${SONAR_SOURCE_DIR} 
                   -Dsonar.java.binaries=target/classes 
                   -Dsonar.java.test.binaries=target/test-classes 
                   -Dsonar.java.surefire.report=target/surefire-reports "                                     #項目掃描參數(shù)

  ## 構建鏡像
  CI_REGISTRY: 'registry.cn-beijing.aliyuncs.com'               #鏡像倉庫地址              
  CI_REGISTRY_USER: 'xxxxxx'                               #倉庫用戶信息
  #CI_REGISTRY_PASSWD: 'xxxxxxxx.'                              #倉庫用戶密碼
  IMAGE_NAME: "${CI_REGISTRY}/${CI_PROJECT_PATH}:${CI_COMMIT_REF_NAME}-${CI_COMMIT_SHORT_SHA}"     #鏡像名稱
  DOCKER_FILE_PATH: "./Dockerfile"                              #Dockerfile位置

  ## 上傳制品庫(artifactory)
  #ARTIFACTORY_URL: "http://192.168.1.200:30082/artifactory"     #制品庫地址
  #ARTIFACTORY_NAME: "${CI_PROJECT_NAMESPACE}"                   #制品庫名稱
  #ARTIFACT_PACKAGE: "jar"                                       #制品類型
  #ARTIFACT_PATH: "target/*.${ARTIFACT_PACKAGE}"                 #制品位置
  #TARGET_FILE_PATH: "${CI_PROJECT_NAMESPACE}/${CI_PROJECT_NAME}/${CI_COMMIT_REF_NAME}-${CI_COMMIT_SHORT_SHA}"   #目標制品位置(目錄結構)
  #TARGET_ARTIFACT_NAME: "${CI_PROJECT_NAME}-${CI_COMMIT_REF_NAME}-${CI_COMMIT_SHORT_SHA}.${ARTIFACT_PACKAGE}"   #目標制品名稱

  ## 部署應用k8s
  APP_NAME: "$CI_PROJECT_NAME"                #應用名稱 <-->deploymentName
  CONTAINER_PORT: "8081"                      #服務端口 <--> servicesPort
  NAMESPACE: "$CI_PROJECT_NAME-$CI_PROJECT_ID-$CI_ENVIRONMENT_SLUG"             #名稱空間
  ENV_URL: "${ENV_NAME}.${CI_PROJECT_NAMESPACE}.${CI_PROJECT_NAME}.devops.com"  #IngressHosts

指定CI文件

 

DevOps系列文章 之GitLabCI模板庫的流水線,運維

運行流水線測試

DevOps系列文章 之GitLabCI模板庫的流水線,運維

docker鏡像倉庫

DevOps系列文章 之GitLabCI模板庫的流水線,運維

部署環(huán)境演示

 

DevOps系列文章 之GitLabCI模板庫的流水線,運維

Kubernetes集群中應用狀態(tài)

DevOps系列文章 之GitLabCI模板庫的流水線,運維

模板案例文章來源地址http://www.zghlxwxcb.cn/news/detail-603231.html

variables:
  REPOSITORY: "xxxx/xxxxxx"
stages:
   - deploy

build:
  stage: deploy
  only:
    - master
  script:
    - docker build -t $REPOSITORY:prod .
    - docker tag $REPOSITORY:prod "私有鏡像庫地址"/$REPOSITORY:prod
    - docker push "私有鏡像庫地址"/$REPOSITORY:prod
  tags:
    - lable

test:
  stage: deploy
  only:
    - test
  script:
    - docker build -t $REPOSITORY:testing .
    - docker tag $REPOSITORY:testing "私有鏡像庫地址"/$REPOSITORY:testing
    - docker push "私有鏡像庫地址"/$REPOSITORY:testing
  tags:
    - lable

dev:
  stage: deploy
  only:
    - dev
  script:
    - docker build -t $REPOSITORY:dev .
    - docker tag $REPOSITORY:dev "私有鏡像庫地址"/$REPOSITORY:dev
    - docker push "私有鏡像庫地址"/$REPOSITORY:dev
  tags:
    - lable

到了這里,關于DevOps系列文章 之GitLabCI模板庫的流水線的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 云計算課程第四次實驗-搭建DevOps流水線

    云計算課程第四次實驗-搭建DevOps流水線

    子任務2:搭建DevOps流水線環(huán)境 ? 本實驗以主機本地虛擬機為載體,搭建Dev-ops流水線環(huán)境 使用的工具: 目錄 一、實驗概述 1.實驗名稱 2.實驗目的 3.實驗環(huán)境 二、實驗內容 1.實驗設計 2.實驗過程 1.gitlab-server的搭建 2.harbor-server的搭建 3.Jenkins-server的搭建 4.Web-server的搭建 5.Dev搭

    2024年02月03日
    瀏覽(37)
  • (十六)devops持續(xù)集成開發(fā)——jenkins流水線構建之郵件通知

    (十六)devops持續(xù)集成開發(fā)——jenkins流水線構建之郵件通知

    本節(jié)內容主要介紹jenkins在流水線任務構建完成后的通知操作,使用jenkins的郵件通知插件完成構建任務結束的通知。一般項目發(fā)布都會通知相關的責任人,這樣項目發(fā)布在出現(xiàn)問題時能夠及時的處理。 ①在插件中心安裝Email Extension郵件通知插件 ②申請一個發(fā)送郵件的郵箱服務

    2024年02月21日
    瀏覽(35)
  • DevOps落地筆記-14|部署流水線:打造一站式部署的關鍵平臺

    DevOps落地筆記-14|部署流水線:打造一站式部署的關鍵平臺

    上一課時我主要介紹了實現(xiàn)自動化測試的范圍、流程和結構圖,自動化測試是持續(xù)集成實踐不可或缺的一部分,從而使得軟件向高效率和高質量邁進了一大步。持續(xù)集成主要關注的是代碼是否可以編譯成功、是否可以通過單元測試和驗收測試等。但持續(xù)集成并不能實現(xiàn)軟件包

    2024年02月22日
    瀏覽(34)
  • (十四)devops持續(xù)集成開發(fā)——jenkins流水線使用pipeline方式發(fā)布項目

    (十四)devops持續(xù)集成開發(fā)——jenkins流水線使用pipeline方式發(fā)布項目

    本節(jié)內容我們使用另外一種方式pipeline實現(xiàn)項目的流水線部署發(fā)布,Jenkins Pipeline是一種允許以代碼方式定義持續(xù)集成和持續(xù)交付流水線的工具。通過Jenkins Pipeline,可以將整個項目的構建、測試和部署過程以腳本的形式寫入Jenkinsfile中,實現(xiàn)對整個流程的可視化管理和控制。在

    2024年02月21日
    瀏覽(35)
  • PingCode DevOps 團隊:企業(yè)CICD流水線可能會遇到的問題及解法

    CICD 流水線是指一系列自動化的構建、測試和部署步驟,用于將應用程序從開發(fā)到生產(chǎn)環(huán)境的過程。在 CICD 流水線中,每個步驟都是自動化的,并且在完成后會觸發(fā)下一個步驟的執(zhí)行。 CICD 流水線可以幫助團隊更快地交付產(chǎn)品,減少手動錯誤,并提高軟件質量。通過自動化構

    2024年02月10日
    瀏覽(20)
  • devops-5:從0開始構建一條完成的CI CD流水線

    devops-5:從0開始構建一條完成的CI CD流水線

    前文中已經(jīng)講述了靜態(tài)、動態(tài)增加agent節(jié)點,以動態(tài)的k8s cloud為例,下面就以Maven構建Java程序為例,開始構建出一條完整的CI CD流水線。 實現(xiàn)功能目標: 1.分別可以根據(jù)分支和tag從源碼倉庫clone代碼 2.拿到源碼后開始編譯 3.構建image,并push到鏡像倉庫 4.部署到對應k8s集群 5.部署

    2023年04月20日
    瀏覽(41)
  • (十五)devops持續(xù)集成開發(fā)——jenkins流水線構建策略配置及觸發(fā)器的使用

    (十五)devops持續(xù)集成開發(fā)——jenkins流水線構建策略配置及觸發(fā)器的使用

    本節(jié)內容我們主要介紹在Jenkins流水線中,其構建過程中的一些構建策略的配置,例如通過遠程http構建、定時任務構建、輪詢SCM構建、參數(shù)化構建、Git hook鉤子觸發(fā)構建等,可根據(jù)不同的需求完成不同構建策略的配置。 - 構建策略說明: - 測試驗證 - 構建說明 - 測試驗證 - 配置

    2024年02月21日
    瀏覽(36)
  • 【業(yè)務功能115】微服務-springcloud-springboot-Kubernetes-k8s集群-Kubesphere實現(xiàn)DevOps流水線-CI/CD-SonarQube- Jenkins

    【業(yè)務功能115】微服務-springcloud-springboot-Kubernetes-k8s集群-Kubesphere實現(xiàn)DevOps流水線-CI/CD-SonarQube- Jenkins

    dev 怎么開發(fā) ops 怎么運維 參考項目鏈接:https://github.com/kubesphere/devops-maven-sample 持續(xù)集成是指軟件個人的部分向軟件整體部分交付,頻繁進行集成以便更快地發(fā)現(xiàn)其中錯誤。 CI需要具備這些: 全面的自動化測試 這是實踐持續(xù)集成持續(xù)部署的基礎,同時,選擇合適的自動化測

    2024年02月04日
    瀏覽(43)
  • DevOps系列文章之 DevOps 運維服務體系

    DevOps系列文章之 DevOps 運維服務體系

    DevOps 體系是從原始運維一步步走過來的,原始運維好比是本,有了本進而想繼續(xù)提升效率、減少出錯、優(yōu)化流程,就發(fā)展到了 DevOps,AIOps……各種Ops 首先,運維的業(yè)務職能規(guī)范后形成章程、綱領,在互聯(lián)網(wǎng)快速發(fā)展的特點下,形成了一套應對”快”和”變”的體系,并不停

    2024年02月12日
    瀏覽(23)
  • DevOps系列文章 之 Python 基礎

    考點:字符串:str( )、整型數(shù):int( )、浮點數(shù):float( ) 考點:條件分支 考點:引入隨機數(shù) 考點:while循環(huán)語句 考點:for循環(huán)語句 Python語言支持以下類型的運算符 以下假設變量a為10,變量b為20: 運算符 描述 實例 + 加 - 兩個對象相加 a + b 輸出結果 30 - 減 - 得到負數(shù)或是一個

    2024年02月11日
    瀏覽(17)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包