GitLabCI テンプレートライブラリのパイプライン最適化の実践

GitLabCI テンプレートライブラリのパイプライン最適化の実践

[[441815]]

以前のディレクトリ構造に従って完了します。ジョブ ディレクトリは、ジョブ テンプレートを保存するために使用されます。テンプレート ディレクトリは、パイプライン テンプレートを保存するために使用されます。今回は、すべてのジョブのベース テンプレートとして default-pipeline.yml を使用します。

ジョブテンプレート

ジョブは、ビルド、テスト、コード分析、アーティファクト、デプロイに分かれています。ルール機能スイッチはジョブごとに設定され、最終ジョブの動作は変数によって制御されます。

jobs/build.yml ビルドジョブテンプレート

共通ビルド テンプレート (maven/npm/gradle) と docker イメージ ビルド テンプレートの 2 つのジョブ テンプレートが含まれています。

  1. ## ビルド関連タスク
  2.  
  3. 。建てる:
  4. ステージ: ビルド
  5. スクリプト:
  6. - |
  7. ${ビルドシェル}
  8. 変数:
  9. GIT_CHECKOUT: "true"  
  10. ルール:
  11. - if: " $RUN_PIPELINE_BUILD == 'no' "  
  12. いつ:決して
  13. -いつ: いつも
  14.  
  15.  
  16. ## イメージをビルドする
  17. .build-docker:
  18. ステージ: ビルドイメージ
  19. スクリプト:
  20. - dockerログイン -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWD $CI_REGISTRY
  21. - docker build -t ${IMAGE_NAME} -f ${DOCKER_FILE_PATH} 。
  22. -docker push ${IMAGE_NAME}
  23. -docker rmi ${イメージ名}
  24. ルール:
  25. - if: " $RUN_BUILD_IMAGE == 'no' "  
  26. いつ:決して
  27. -いつ: いつも

jobs/test.yml テストジョブテンプレート

主に、Maven、Gradle、npm ユニット テストなどのプロジェクト ユニット テストを実行するために使用されます。

  1. #ユニットテスト
  2. 。テスト:
  3. ステージ: テスト
  4. スクリプト:
  5. -$テストシェル
  6. アーティファクト:
  7. レポート:
  8. junit: ${JUNIT_REPORT_PATH}
  9. ルール:
  10. - if: " $RUN_PIPELINE_TEST == 'no' "  
  11. いつ:決して
  12. -いつ: いつも

jobs/codeanalysis.yml コードスキャンテンプレート

スキャン ジョブとスキャン結果の取得の 2 つのジョブ テンプレートが含まれています。ここで、スキャン パラメータは、共通プロジェクト パラメータ、特別なマージ リクエスト パラメータ、カスタム プロジェクト パラメータに分類されます。

  1. ##コードスキャン
  2. ##
  3. ##
  4. ##
  5.  
  6. .コード分析:
  7. 変数:
  8. GLOBAL_PROJECT_ARGS: "-Dsonar.projectKey=${CI_PROJECT_NAME}
  9. -Dsonar.projectName=${CI_PROJECT_NAME}
  10. -Dsonar.projectVersion=${CI_COMMIT_REF_NAME}
  11. -Dsonar.projectDescription=${CI_PROJECT_TITLE}"
  12. GLOBAL_SERVER_ARGS: "-Dsonar.ws.timeout=30
  13. -Dsonar.links.homepage=${CI_PROJECT_URL}
  14. -Dsonar.host.url=${SONAR_SERVER_URL}
  15. -Dsonar.login=${SONAR_SERVER_LOGIN}
  16. -Dsonar.sourceEncoding=UTF-8 "
  17. GLOBAL_MR_ARGS: " -Dsonar.pullrequest. key =${CI_MERGE_REQUEST_IID}
  18. -Dsonar.pullrequest.branch=${CI_MERGE_REQUEST_SOURCE_BRANCH_NAME}
  19. -Dsonar.pullrequest.base=${CI_MERGE_REQUEST_TARGET_BRANCH_NAME}
  20. -Dsonar.gitlab.ref_name=${CI_COMMIT_REF_NAME}
  21. -Dsonar.gitlab.commit_sha=${CI_COMMIT_SHA}
  22. -Dsonar.gitlab.project_id=${CI_PROJECT_PATH}
  23. -Dsonar.pullrequest.gitlab.repositorySlug=${CI_PROJECT_ID} "
  24. 複数のブランチ引数: "-Dsonar.branch.name=${CI_COMMIT_REF_NAME}"  
  25. ステージ: コード分析
  26. スクリプト:
  27. - エコー ${GLOBAL_PROJECT_ARGS} ${GLOBAL_SERVER_ARGS} ${SONAR_SCAN_ARGS} ${GLOBAL_MR_ARGS}
  28. #sonar-scanner $GLOBAL_PROJECT_ARGS $GLOBAL_SERVER_ARGS $SCAN_JAVA_ARGS
  29. - |
  30. [ $CI_PIPELINE_SOURCE == 'merge_request_event' ]の場合
  31.          
  32. それから 
  33. echo "ソナースキャナ ${GLOBAL_PROJECT_ARGS} ${GLOBAL_SERVER_ARGS} ${SONAR_SCAN_ARGS} "   
  34. ソナースキャナー ${GLOBAL_PROJECT_ARGS} ${GLOBAL_SERVER_ARGS} ${SONAR_SCAN_ARGS}
  35. それ以外  
  36. echo "sonar-scanner ${GLOBAL_PROJECT_ARGS} ${GLOBAL_SERVER_ARGS} ${SONAR_SCAN_ARGS} ${MULTI_BRANCH_ARGS}"  
  37. ソナー スキャナー ${GLOBAL_PROJECT_ARGS} ${GLOBAL_SERVER_ARGS} ${SONAR_SCAN_ARGS} ${MULTI_BRANCH_ARGS}
  38. フィ
  39. ルール:
  40. - if: " $RUN_CODE_ANALYSIS == 'no' "  
  41. いつ:決して
  42. -いつ: いつも
  43.  
  44.  
  45. #### コードスキャン結果を取得する
  46. .get_analysis_result:
  47. ステージ: get_analysis_result
  48. スクリプト:
  49. - |
  50. SONAR_REPORT_URL=$(grep "ceTaskUrl" .scannerwork/report-task.txt | awk -F = '{OFS="=";print $2,$3}' )
  51. ${SONAR_REPORT_URL} をエコーし​​ます
  52.          
  53.          
  54. i{1..10}場合
  55. する
  56. curl -k -u "${SONAR_SERVER_LOGIN}" : "" ${SONAR_REPORT_URL} -o sonar_result.txt -s
  57. grep '"status":"SUCCESS"' sonar_result.txt && SONAR_SCAN_RESULT= 'SUCCESS'  
  58.          
  59. [ ${SONAR_SCAN_RESULT} == 'SUCCESS' ]の場合
  60. それから 
  61. 「${SONAR_SCAN_RESULT}」をエコーし​​ます 
  62. SONAR_SCAN_RESULT=成功
  63.  
  64. 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
  65. echo "結果情報 ---->>>>>"  
  66. 猫の結果.txt
  67. 結果=`cat result.txt | awk -F ':'   '{印刷$3}' | awk -F '"'   '{print$2}' `
  68.                
  69. $結果をエコーする
  70.  
  71. [ $result == 'ERROR' ]の場合
  72. それから  
  73. echo "${result}"  
  74. 出口122
  75. 壊す;
  76. それ以外 
  77. 「成功しました!」とエコーします。  
  78. 壊す;
  79. フィ
  80.              
  81. それ以外 
  82. SONAR_SCAN_RESULT = 'エラー'  
  83. echo "$i 回目に結果情報を取得しましたが、失敗しました。10 秒間スリープします。"  
  84. 猫ソナー結果.txt
  85. 睡眠10
  86. フィ
  87. 終わり
  88.          
  89. ルール:
  90. - if: " $RUN_CODE_ANALYSIS == 'no' "  
  91. いつ:決して
  92. -いつ: いつも

jobs/artifactory.yml アーティファクト管理ジョブ

製品のアップロードとダウンロードという 2 つのタスクが含まれます。アーティファクトリー リポジトリ インターフェースを使用します。

  1. ## 製品ライブラリ関連
  2. ##
  3.  
  4. .deploy-アーティファクト:
  5. ステージ: デプロイアーティファクト
  6. スクリプト:
  7. - echo "curl -u${ARTIFACT_USER}:${ARTIFACT_PASSWD} -T ${ARTIFACT_PATH} $ARTIFACTORY_URL/$ARTIFACTORY_NAME/$TARGET_FILE_PATH/$TARGET_ARTIFACT_NAME"  
  8. - curl -u${ARTIFACT_USER}:${ARTIFACT_PASSWD} -T ${ARTIFACT_PATH} "$ARTIFACTORY_URL/$ARTIFACTORY_NAME/$TARGET_FILE_PATH/$TARGET_ARTIFACT_NAME"  
  9. ルール:
  10. - if: " $RUN_DEPLOY_ARTIFACTS == 'no' "  
  11. いつ:決して
  12. -いつ: いつも
  13.  
  14.  
  15. .down-アーティファクト:
  16. ステージ: ダウンアーティファクト
  17. スクリプト:
  18. - curl -u${ARTIFACT_USER}:${ARTIFACT_PASSWD} -O "$ARTIFACTORY_URL/$ARTIFACTORY_NAME/$TARGET_FILE_PATH/$TARGET_ARTIFACT_NAME"  
  19. -ls

jobs/deploy.yml デプロイメントジョブテンプレート

k8s に基づいてリリースおよびロールバック構成をリリースします。

  1. ## アプリケーションリリース
  2.  
  3.  
  4. ## kubectlイメージ公開を使用する
  5. .deploy_k8s:
  6. ステージ: デプロイ
  7. スクリプト:
  8. - $KUBE_TOKENをエコーする
  9. - kubectl config set -cluster my-cluster --server=${KUBE_URL} --certificate-authority="${KUBE_CA_PEM_FILE}"  
  10. - kubectl config set -credentials admin --token=${KUBE_TOKEN}  
  11. -ls -a
  12. - sed -i "s#__namespace__#${NAMESPACE}#g" ${DEPLOY_FILE}
  13. - sed -i "s#__appname__#${APP_NAME}#g" ${DEPLOY_FILE}
  14. - sed -i "s#__containerport__#${CONTAINER_PORT}#g" ${DEPLOY_FILE}
  15. - sed -i "s#__nodeport__#${NODE_PORT}#g" ${DEPLOY_FILE}
  16. - sed -i "s#__imagename__#${IMAGE_NAME}#g" ${DEPLOY_FILE}
  17. - sed -i "s#__CI_ENVIRONMENT_SLUG__#${CI_ENVIRONMENT_SLUG}#g" ${DEPLOY_FILE}
  18. - sed -i "s#__CI_PROJECT_PATH_SLUG__#${CI_PROJECT_PATH_SLUG}#g" ${DEPLOY_FILE}
  19. - sed -i "s#__ingressdomain__#${ENV_URL}#g" ${DEPLOY_FILE}
  20. - cat ${DEPLOY_FILE}
  21. - 「kubectlシークレット docker-registry ${APP_NAME}を作成します\
  22. --docker-server=${CI_REGISTRY} \  
  23. --docker-username=$CI_REGISTRY_USER \  
  24. --docker-password=${CI_REGISTRY_PASSWD} \  
  25. [email protected] -n ${NAMESPACE} || echo 'secrets はすでに存在します'"  
  26. - kubectl apply -f ${DEPLOY_FILE}
  27. ルール:
  28. - if: " $RUN_DEPLOY_K8S == 'no'"  
  29. いつ:決して
  30. -場合: 手動
  31. 環境:
  32. 名前: "${ENV_NAME}"  
  33. URL: "http://${ENV_NAME}.${CI_PROJECT_NAMESPACE}.${CI_PROJECT_NAME}.devops.com"  
  34.  
  35.    
  36.  
  37.  
  38. ## ロールバック
  39. .rollout_k8s:
  40. ステージ: デプロイ
  41. スクリプト:
  42. -rm -rf $HOME/.kube
  43. - kubectl config set -cluster my-cluster --server=${KUBE_URL} --certificate-authority="${KUBE_CA_PEM_FILE}"  
  44. - kubectl config set -credentials admin --token=${KUBE_TOKEN}  
  45. - kubectl ロールアウト履歴デプロイメント ${APP_NAME} -n ${NAMESPACE}
  46. - kubectl ロールアウト デプロイメントを元に戻す ${APP_NAME} -n ${NAMESPACE}
  47. ルール:
  48. - if: " $RUN_DEPLOY_K8S == 'no' "  
  49. いつ:決して
  50. -場合: 手動
  51. 環境:
  52. 名前: "${ENV_NAME}"  
  53. アクション:停止

デフォルトのパイプライン テンプレート

templates/default-pipeline.yml テンプレートは、次の部分に分かれています。

  • インポートジョブテンプレートを含める
  • 変数はグローバル変数を定義します
  • ワークフローはパイプライン制御を定義する
  • ジョブ ジョブを作成して公開する

インポートジョブテンプレートを含める

  1. 含む:
  2. - プロジェクト: 'cidevops/cidevops-newci-service'  
  3. 参照: マスター
  4. ファイル: 'jobs/build.yml'  
  5. - プロジェクト: 'cidevops/cidevops-newci-service'  
  6. 参照: マスター
  7. ファイル: 'jobs/test.yml'  
  8. - プロジェクト: 'cidevops/cidevops-newci-service'  
  9. 参照: マスター
  10. ファイル: 'jobs/codeanalysis.yml'  
  11. - プロジェクト: 'cidevops/cidevops-newci-service'  
  12. 参照: マスター
  13. ファイル: 'jobs/deploy.yml'  
  14. - プロジェクト: 'cidevops/cidevops-newci-service'  
  15. 参照: マスター
  16. ファイル: 'jobs/artifactory.yml'  

変数はグローバル変数を定義します

  1. 変数:
  2. ## グローバル設定
  3. GIT_CLONE_PATH: ${CI_BUILDS_DIR}/builds/${CI_PROJECT_NAMESPACE}/${CI_PROJECT_NAME}/${CI_PIPELINE_ID}
  4. GIT_CHECKOUT: 「偽」  
  5. CACHE_DIR: ""  
  6.  
  7. ## ジョブ制御
  8. RUN_PIPELINE_BUILD: "" #ビルドを実行するかどうか yes/ no   
  9. RUN_PIPELINE_TEST: "" #テストを実行するかどうか yes/ no   
  10. RUN_CODE_ANALYSIS: "" #コードをスキャンするかどうか yes/ no   
  11. RUN_BUILD_IMAGE: "" #イメージを生成するかどうか yes/ no  
  12. RUN_DEPLOY_ARTIFACTS: "" #製品をアップロードするかどうか yes/ no  
  13. RUN_DEPLOY_K8S: "" #K8S をリリースするかどうか yes/ no  
  14.  
  15. ## コンテナイメージへの依存
  16. ビルドイメージ: ""  
  17. CURL_IMAGE: "curlimages/curl:7.70.0"  
  18. SONAR_IMAGE: "sonarsource/sonar-scanner-cli:latest"  
  19. KUBECTL_IMAGE: "lucj/kubectl:1.17.2"  
  20.    
  21.    
  22. ## テストパラメータを構築する
  23. MAVEN_OPTS: "" #Maven ビルドパラメータ
  24. GRADLE_OPTS: "" #gradle ビルドパラメータ
  25. BUILD_SHELL: '' #ビルドコマンド
  26.  
  27. ## ユニットテストパラメータ
  28. TEST_SHELL : 'mvn test --settings=./settings.xml ' #テストコマンド
  29. JUNIT_REPORT_PATH: 'target/surefire-reports/TEST-*.xml' #ユニットテストレポート
  30.  
  31. ## コードスキャン
  32. SONAR_SOURCE_DIR : "src" #プロジェクトソースディレクトリ
  33. SONAR_SERVER_URL: "http://192.168.1.200:30090" #SonarQube サーバー情報
  34. SONAR_SERVER_LOGIN: "ee2bcb37deeb6dfe3a07fe08fb529559b00c1b7b" #Sonar トークンはプロジェクト内で定義するのが最適です。
  35. SONAR_SCAN_ARGS: "-Dsonar.sources=${SONAR_SOURCE_DIR}" #プロジェクトスキャンパラメータ
  36.  
  37. ## イメージをビルドする
  38. CI_REGISTRY: 'registry.cn-beijing.aliyuncs.com' #ミラーリポジトリアドレス
  39. CI_REGISTRY_USER: 'xxxxxx' #ウェアハウスユーザー情報
  40. #CI_REGISTRY_PASSWD: 'xxxxxxx.' #倉庫ユーザーパスワード
  41. IMAGE_NAME: "${CI_REGISTRY}/${CI_PROJECT_PATH}:${CI_COMMIT_REF_NAME}-${CI_COMMIT_SHORT_SHA}" #イメージ名
  42. DOCKER_FILE_PATH: "./Dockerfile" #Dockerfile の場所
  43.  
  44. ## アーティファクトライブラリをアップロードする (artifactory)
  45. ARTIFACTORY_URL: "http://192.168.1.200:30082/artifactory" #アーティファクト ライブラリ アドレス
  46. ARTIFACTORY_NAME: "${CI_PROJECT_NAMESPACE}" #アーティファクトライブラリ名
  47. ARTIFACT_PACKAGE: "jar" #アーティファクトタイプ
  48. ARTIFACT_PATH: "target/*.${ARTIFACT_PACKAGE}" #アーティファクトの場所
  49. TARGET_FILE_PATH: "${CI_PROJECT_NAMESPACE}/${CI_PROJECT_NAME}/${CI_COMMIT_REF_NAME}-${CI_COMMIT_SHORT_SHA}" #ターゲット成果物の場所 (ディレクトリ構造)
  50. TARGET_ARTIFACT_NAME: "${CI_PROJECT_NAME}-${CI_COMMIT_REF_NAME}-${CI_COMMIT_SHORT_SHA}.${ARTIFACT_PACKAGE}" #ターゲットアーティファクト名
  51.  
  52. ## アプリケーションk8sをデプロイする
  53. APP_NAME: "$CI_PROJECT_NAME" #アプリケーション名 < --> デプロイメント名 
  54. CONTAINER_PORT: "8081" #サービスポート < --> servicesPort  
  55. 名前空間: "$CI_PROJECT_NAME-$CI_PROJECT_ID-$CI_ENVIRONMENT_SLUG "
  56. ENV_URL: "${ENV_NAME}.${CI_PROJECT_NAMESPACE}.${CI_PROJECT_NAME}.devops.com" #IngressHosts

パイプライン設定

  1. ## パイプライン制御
  2. ワークフロー:
  3. ルール:
  4. - if: "$CI_MERGE_REQUEST_ID" #マージリクエストをフィルタリング
  5. いつ:決して
  6. - if: "$CI_PIPELINE_SOURCE == 'web'" #Web ページへの公開を許可する
  7. - if: "$CI_COMMIT_REF_NAME =~ /^RELEASE-*/ || $CI_COMMIT_REF_NAME =~ /master/ " #コードトリガーを送信するバージョンブランチとトランクブランチをフィルタリングします
  8. いつ:決して
  9. - if: "$CI_COMMIT_BEFORE_SHA == '000000000000000000000000000000000000000000000'" #ブランチ作成リクエストをフィルタリング
  10. いつ:決して
  11. ### デフォルト戦略
  12. -いつ: いつも
  13.  
  14.  
  15. ## 実行フェーズ
  16. ステージ:
  17. - 建てる
  18. - テスト
  19. -パラレル01
  20. -分析結果を取得する
  21. - アーティファクトのデプロイ
  22. - デプロイ機能
  23. - ロールアウト機能
  24. - デプロイ-UAT
  25. -ロールアウト-uat
  26. - デプロイステージ
  27. -ロールアウトステージ
  28. - デプロイ-prod
  29. - ロールアウト製品
  30.  
  31. キャッシュ:
  32. パス:
  33. - ${CACHE_DIR}
  34.      
  35. 前スクリプト:
  36. - 輸出

ビルドジョブ構成

  1. ################# ジョブの構成 ######################
  2. ## ビルドジョブ
  3. 建てる:
  4. イメージ: ${BUILD_IMAGE}
  5. 拡張: .build
  6.  
  7. ## テストの割り当て
  8. テスト:
  9. イメージ: ${BUILD_IMAGE}
  10. 拡張: .test
  11. 前スクリプト:
  12. -ls
  13. -ls ${CACHE_DIR}
  14.  
  15. ## コードスキャン
  16. コード分​​析:
  17. ステージ: parallel01
  18. 画像: ${SONAR_IMAGE}
  19. 拡張: .code_analysis
  20.  
  21. ## ビルド結果を取得する
  22. 分析結果を取得:
  23. 画像: ${CURL_IMAGE}
  24. 拡張: .get_analysis_result
  25. ニーズ:
  26. - コード分析
  27.  
  28.  
  29. ## イメージをビルドする
  30. ビルドイメージ:
  31. イメージ: docker:latest
  32. サービス:
  33. -名前: docker:dind
  34. ステージ: parallel01
  35. 拡張: .build-docker
  36.  
  37.  
  38. ## 商品をアップロードする
  39. デプロイアーティファクト:
  40. 画像: ${CURL_IMAGE}
  41. ステージ: デプロイアーティファクト
  42. 拡張: .deploy-artifact
  43.  
  44. ## アーティファクトをダウンロードする
  45. #ダウンアーティファクト:
  46. # 画像: ${CURL_IMAGE}
  47. # ステージ: down_artifact
  48. # 拡張: .down-artifact

リリース展開ジョブ構成

  1. ################## 機能ジョブのデプロイ構成 ######################
  2. ## 機能リリースアプリケーション
  3. デプロイ機能:
  4. 変数:
  5. DEPLOY_FILE: 'deployment.yaml'  
  6. ENV_NAME: '機能'  
  7. ステージ: デプロイ機能
  8. イメージ: ${KUBECTL_IMAGE}
  9. 拡張: .deploy_k8s
  10. 環境:
  11. on_stop: "ロールアウト機能"  
  12. ルール:
  13. - 場合: $RUN_DEPLOY_K8S == 'no'  
  14. いつ:決して
  15. - の場合: $CI_COMMIT_REF_NAME =~ /^RELEASE-*/ || $CI_COMMIT_REF_NAME =~ /master/ || $CI_COMMIT_TAG
  16. いつ:決して
  17. -場合: 手動
  18.      
  19. ## アプリケーションのロールバック
  20. ロールアウト機能:
  21. 変数:
  22. DEPLOY_FILE: 'deployment.yaml'  
  23. ENV_NAME: '機能'  
  24. ステージ: ロールアウト機能
  25. イメージ: ${KUBECTL_IMAGE}
  26. 拡張: .rollout_k8s
  27. ニーズ:
  28. - デプロイ機能
  29. ルール:
  30. - 場合: $RUN_DEPLOY_K8S == 'no'  
  31. いつ:決して
  32. - の場合: $CI_COMMIT_REF_NAME =~ /^RELEASE-*/ || $CI_COMMIT_REF_NAME =~ /master/ || $CI_COMMIT_TAG
  33. いつ:決して
  34. -場合: on_failure
  35.  
  36.  
  37. ##################UAT ジョブをデプロイして構成する #####################
  38. ##UAT
  39. デプロイuat:
  40. 変数:
  41. DEPLOY_FILE: 'config/deployment-uat.yaml'  
  42. ENV_NAME: 'uat'  
  43. ステージ: デプロイ-UAT
  44. イメージ: ${KUBECTL_IMAGE}
  45. 拡張: .deploy_k8s
  46. 環境:
  47. on_stop: "rollout_uat"  
  48. ルール:
  49. - 場合: $RUN_DEPLOY_K8S == 'no'  
  50. いつ:決して
  51. - の場合: $CI_COMMIT_REF_NAME =~ /^RELEASE-*/ || $CI_COMMIT_REF_NAME =~ /master/ || $CI_COMMIT_TAG
  52. いつ:手動
  53. -いつ:決して
  54.  
  55. ## UAT アプリケーションのロールバック
  56. ロールアウト_uat:
  57. 変数:
  58. DEPLOY_FILE: 'config/deployment-uat.yaml'  
  59. ENV_NAME: 'uat'  
  60. ステージ: ロールアウト-UAT
  61. イメージ: ${KUBECTL_IMAGE}
  62. 拡張: .rollout_k8s
  63. ニーズ:
  64. - デプロイ
  65. ルール:
  66. - 場合: $RUN_DEPLOY_K8S == 'no'  
  67. いつ:決して
  68. - の場合: $CI_COMMIT_REF_NAME =~ /^RELEASE-*/ || $CI_COMMIT_REF_NAME =~ /master/ || $CI_COMMIT_TAG
  69. 場合: on_failure
  70. -いつ:決して
  71.  
  72. ##################STAG ジョブをデプロイして構成する #####################
  73. ## スタッグ
  74. デプロイステージ:
  75. 変数:
  76. DEPLOY_FILE: 'config/deployment-stag.yaml'  
  77. ENV_NAME: 'スタッグ'  
  78. ステージ: デプロイステージ
  79. イメージ: ${KUBECTL_IMAGE}
  80. 拡張: .deploy_k8s
  81. 環境:
  82. on_stop: "ロールアウトタグ"  
  83. ニーズ:
  84. - デプロイ
  85. ルール:
  86. - 場合: $RUN_DEPLOY_K8S == 'no'  
  87. いつ:決して
  88. - の場合: $CI_COMMIT_REF_NAME =~ /^RELEASE-*/ || $CI_COMMIT_REF_NAME =~ /master/ || $CI_COMMIT_TAG
  89. いつ:手動
  90. -いつ:決して
  91.  
  92. ## STAG アプリケーションのロールバック
  93. ロールアウトタグ:
  94. 変数:
  95. DEPLOY_FILE: 'config/deployment-stag.yaml'  
  96. ENV_NAME: 'スタッグ'  
  97. ステージ: ロールアウト段階
  98. イメージ: ${KUBECTL_IMAGE}
  99. 拡張: .rollout_k8s
  100. ニーズ:
  101. - デプロイステージ
  102. ルール:
  103. - 場合: $RUN_DEPLOY_K8S == 'no'  
  104. いつ:決して
  105. - の場合: $CI_COMMIT_REF_NAME =~ /^RELEASE-*/ || $CI_COMMIT_REF_NAME =~ /master/ || $CI_COMMIT_TAG
  106. 場合: on_failure
  107. -いつ:決して
  108.  
  109. #################PROD ジョブをデプロイして構成する #####################
  110. ##製品
  111. デプロイ製品:
  112. 変数:
  113. デプロイファイル: 'config/deployment-prod.yaml'  
  114. ENV_NAME: 'prod'  
  115. ステージ: deploy-prod
  116. イメージ: ${KUBECTL_IMAGE}
  117. 拡張: .deploy_k8s
  118. 環境:
  119. on_stop: "rollout_prod"  
  120. ニーズ:
  121. - デプロイステージ
  122. ルール:
  123. - 場合: $RUN_DEPLOY_K8S == 'no'  
  124. いつ:決して
  125. - の場合: $CI_COMMIT_REF_NAME =~ /^RELEASE-*/ || $CI_COMMIT_REF_NAME =~ /master/ || $CI_COMMIT_TAG
  126. いつ:手動
  127. -いつ:決して
  128.  
  129. ## PROD アプリケーションのロールバック
  130. ロールアウト製品:
  131. 変数:
  132. デプロイファイル: 'config/deployment-prod.yaml'  
  133. ENV_NAME: 'prod'  
  134. ステージ: ロールアウト-製品版
  135. イメージ: ${KUBECTL_IMAGE}
  136. 拡張: .rollout_k8s
  137. ニーズ:
  138. - デプロイ
  139. ルール:
  140. - 場合: $RUN_DEPLOY_K8S == 'no'  
  141. いつ:決して
  142. - の場合: $CI_COMMIT_REF_NAME =~ /^RELEASE-*/ || $CI_COMMIT_REF_NAME =~ /master/ || $CI_COMMIT_TAG
  143. 場合: on_failure
  144. -いつ:決して

JAVA プロジェクト配信パイプライン

ジョブテンプレートのインポート

  1. 含む:
  2. - プロジェクト: 'cidevops/cidevops-newci-service'  
  3. 参照: マスター
  4. ファイル: 'templates/default-pipeline.yml'  

プロジェクトパラメータを設定する

  1. 変数:
  2. ## グローバル設定
  3. GIT_CLONE_PATH: ${CI_BUILDS_DIR}/builds/${CI_PROJECT_NAMESPACE}/${CI_PROJECT_NAME}/${CI_PIPELINE_ID}
  4. GIT_CHECKOUT: 「偽」  
  5. CACHE_DIR: "ターゲット/"  
  6.  
  7. ## ジョブ制御
  8. RUN_PIPELINE_BUILD: "yes" #ビルドを実行するかどうか yes/ no   
  9. RUN_PIPELINE_TEST: "yes" #テストを実行するかどうか yes/ no   
  10. RUN_CODE_ANALYSIS: "yes" #コードスキャンのはい/いいえ  
  11. RUN_BUILD_IMAGE: "yes" #イメージを生成するかどうか yes/ no  
  12. RUN_DEPLOY_ARTIFACTS: "no" #製品をアップロードするかどうか yes/ no  
  13. RUN_DEPLOY_K8S: "yes" #K8S をリリースするかどうか yes/ no  
  14.  
  15. ## コンテナイメージへの依存
  16. ビルドイメージ: "maven:3.6.3-jdk-8"  
  17. CURL_IMAGE: "curlimages/curl:7.70.0"  
  18. SONAR_IMAGE: "sonarsource/sonar-scanner-cli:latest"  
  19. KUBECTL_IMAGE: "lucj/kubectl:1.17.2"  
  20.    
  21.    
  22. ## テストパラメータを構築する
  23. MAVEN_OPTS: "-Dmaven.repo.local=/home/gitlab-runner/ci-build-cache/maven" #Maven ビルド パラメータ
  24. BUILD_SHELL: 'mvn clean package -DskipTests --settings=./settings.xml ' #ビルドコマンド
  25. #GRADLE_OPTS: "" #gradle ビルドパラメータ
  26.  
  27. ## ユニットテストパラメータ
  28. TEST_SHELL : 'mvn test --settings=./settings.xml ' #テストコマンド
  29. JUNIT_REPORT_PATH: 'target/surefire-reports/TEST-*.xml' #ユニットテストレポート
  30.  
  31. ## コードスキャン
  32. SONAR_SOURCE_DIR : "src" #プロジェクトソースディレクトリ
  33. SONAR_SERVER_URL: "http://192.168.1.200:30090" #SonarQube サーバー情報
  34. SONAR_SERVER_LOGIN: "ee2bcb37deeb6dfe3a07fe08fb529559b00c1b7b" #Sonar トークンはプロジェクト内で定義するのが最適です。
  35. SONAR_SCAN_ARGS: "-Dsonar.sources=${SONAR_SOURCE_DIR}
  36. -Dsonar.java.binaries=ターゲット/クラス
  37. -Dsonar.java.test.binaries=ターゲット/テストクラス
  38. -Dsonar.java.surefire.report=target/surefire-reports " #プロジェクトスキャンパラメータ
  39.  
  40. ## イメージをビルドする
  41. CI_REGISTRY: 'registry.cn-beijing.aliyuncs.com' #ミラーリポジトリアドレス
  42. CI_REGISTRY_USER: 'xxxxxx' #ウェアハウスユーザー情報
  43. #CI_REGISTRY_PASSWD: 'xxxxxxx.' #倉庫ユーザーパスワード
  44. IMAGE_NAME: "${CI_REGISTRY}/${CI_PROJECT_PATH}:${CI_COMMIT_REF_NAME}-${CI_COMMIT_SHORT_SHA}" #イメージ名
  45. DOCKER_FILE_PATH: "./Dockerfile" #Dockerfile の場所
  46.  
  47. ## アーティファクトライブラリをアップロードする (artifactory)
  48. #ARTIFACTORY_URL: "http://192.168.1.200:30082/artifactory" #アーティファクト ライブラリ アドレス
  49. #ARTIFACTORY_NAME: "${CI_PROJECT_NAMESPACE}" #アーティファクトライブラリ名
  50. #ARTIFACT_PACKAGE: "jar" #アーティファクトタイプ
  51. #ARTIFACT_PATH: "target/*.${ARTIFACT_PACKAGE}" #アーティファクトの場所
  52. #TARGET_FILE_PATH: "${CI_PROJECT_NAMESPACE}/${CI_PROJECT_NAME}/${CI_COMMIT_REF_NAME}-${CI_COMMIT_SHORT_SHA}" #ターゲット成果物の場所 (ディレクトリ構造)
  53. #TARGET_ARTIFACT_NAME: "${CI_PROJECT_NAME}-${CI_COMMIT_REF_NAME}-${CI_COMMIT_SHORT_SHA}.${ARTIFACT_PACKAGE}" #ターゲット アーティファクト名
  54.  
  55. ## アプリケーションk8sをデプロイする
  56. APP_NAME: "$CI_PROJECT_NAME" #アプリケーション名 < --> デプロイメント名 
  57. CONTAINER_PORT: "8081" #サービスポート < --> servicesPort  
  58. 名前空間: "$CI_PROJECT_NAME-$CI_PROJECT_ID-$CI_ENVIRONMENT_SLUG "
  59. ENV_URL: "${ENV_NAME}.${CI_PROJECT_NAMESPACE}.${CI_PROJECT_NAME}.devops.com" #IngressHosts

CIファイルを指定する

パイプラインテストを実行する

Docker イメージリポジトリ

導入環境のデモンストレーション

Kubernetes クラスター内のアプリケーション ステータス

<<:  アリババクラウド神龍アクセラレータエンジンがTPCx-BBで1位を獲得、2位に40%差

>>:  オープンソースを商業化しクラウド化するにはどうすればよいでしょうか?

推薦する

Magoro 384M メモリ/KVM/ミシガン

Magoro.com は 2010 年から KVM ベースの VPS を販売しており、4 年間販売し...

Hiformance: 6 ドル/KVM/4G メモリ/2 コア/100G ハードディスク/2T トラフィック/ロサンゼルス/Alipay

Hiformance は、Labor Day イベントに間に合いませんでしたが、何もしていなかったわ...

2022 年に起こる 16 のクラウド イノベーション トレンド

従量課金制の価格モデルの背後には、パブリック クラウドが最新かつ最高の開発、DevOps、AI ツー...

Apple がゲームプレイを継続的にアップデートしていく中で、ASO はどのような機会と課題に直面するのでしょうか?

現在、App Store のアプリ数は 180 万に達しており、数万のアプリの中から目立つことはもは...

360 Searchの独立ブランド「360 Search+」を体験

360総合検索は8月31日、独立ブランド「360 Search+」を立ち上げ、新しい独立ドメイン名3...

bluevm-1g メモリ KVM 年間支払額 30 ドル / 512 メモリ KVM 年間支払額 18 ドル

半年後、bluevm は KVM の超割引年払いバージョンを再びリリースしました。1G メモリの K...

ウェブサイトを再設計する際に考慮すべき最も重要な 2 つの点は、データとユーザー エクスペリエンスです。

SEO コミュニティでは、Web サイトの改訂により降格や悪影響が生じるという意見をよく耳にします。...

毛沢東思想を身につけて総合的なウェブマスターになろう

毛沢東は偉大な人物でした。彼が世界に残したのは、私たち中国人が自らの運命を決定できる国だけではなく、...

最大vps-64mメモリKVM簡易評価

つい最近、Hostcat に maximumvps に関する記事が掲載されました (maximumv...

クラウドコンピューティングは新たな重要な節目を迎えようとしている

クラウド サービスの支出は、企業顧客が 2022 年第 1 四半期にクラウド コンピューティングとス...

クラウドコンピューティングが教育業界にもたらす力

COVID-19パンデミックは多くの分野に大きな混乱を引き起こしており、教育も例外ではありません。世...

DouyuとHuyaの合併はなぜ避けられないのでしょうか?

競争相手は変わっており、 Douyuと Huya が以前と同じように競争を続けることはあまり意味があ...

クラウドコンピューティングの場所と動きを追跡する方法

クラウド コンピューティングが今日の IT とビジネスで最も議論されているトピックであり、企業にまっ...

新しい顧客はどこにいますか?

ビジネスの初期の成功は、多くの場合、「ユニークなトリック」の結果です。例を挙げると、かつてテレビ広告...