ねえ、私はドローンCIを行うために使用しました

ベースのドローンは、私はそれは主に次のような利点を持っていると思う、CI / CD、業界の兄貴jekinsに対する本当に良い個人的な感情は、私は比較的に言えば、ドローンを好む行います

  1. 追加のプラグイン管理ん
  2. YAMLファイルベース、製造が容易、バージョン管理を構成することができます
  3. さまざまな条件に応じて構築することができます
  4. よりユーザーフレンドリーなUIインターフェース

我々はそれを行うCIかの点で、私たちのバックエンドのJavaプロジェクトのために?

コードをコミットし、次のように一般的な手順は、

  1. ローカルにクローンプロジェクトは、gitのチェックアウト-b機能/同期状況、新機能の開発を完了するために、ブランチを作成します。このブランチでいくつかのコードを変更します。
  2. gitのアドオン。、書き込みコミットとコードを提出し、「同期記事のステータスを」-mコミットgitの準拠
  3. コードライブラリの枝に対応するプッシュコード、gitのプッシュ原点機能/同期のステータス
  4. 機能が開発されている場合は、開発(またはマスター)ブランチにプル要求を開始し、プロジェクトコードレビューの担当者を聞かせすることができます
  5. プロジェクトリーダーによってレビューは、メインブランチブランチにマージされます後

上の図から、我々はコードを送信すると、CIは2:00次の点に注意してくださいし、全体のプロセスを実行します見ることができます

  1. 道それが失敗した場合、それはスラックにメッセージを送信します、時間のビルドやユニットテストを実行するために、開発者が問題に気づくことができるようになり、この時間は、当然のことながら、メールまたはマイクロ手紙を送るためにも使用することが
  2. 問題が戻ってgithubのに書かれた結果だろうがある場合SonarQubeチェックを実行すると、開発者はこの問題を見ていきます

何githubの結果を確認するために戻って書かれSonarQubeを見て

ソナーのQubeのテストが完了したら、あなたはgithubのにトークン個人のアクセスを作成する必要があるので、テスト結果は(これがダウンして記述する必要があります)、githubのにはOAuth経由して送信されます

あなたのコードリポジトリを有効にすると、無人機は自動的に手動設定を必要とせずに、このようGitHubのようバージョン管理システムへのウェブフックが追加されます

kind: pipeline
name: default

steps:
# build for push and pull_request
- name: build-pr
  image: maven:latest
  pull: if-not-exists
  commands:
  - mvn clean org.jacoco:jacoco-maven-plugin:prepare-agent install -Dmaven.test.skip=true -s settings.xml
  when:
    branch:
    - feature/*
    - issue/*
    - develop
    event:
    - push
    - pull_request

- name: unittest
  image: maven:latest
  pull: if-not-exists
  commands:
  - mvn test -s settings.xml
  when:
    branch:
    - develop
    event:
      include:
      - pull_request
      - push

# 这里我们使用命令来深度定制我们的扫描,而不是使用drone sonar plugin
- name: sonar-scan
  image: newtmitch/sonar-scanner:4.0.0-alpine
  environment:
    SONAR_TOKEN:
      from_secret: sonar_token
    GITHUB_ACCESS_TOKEN_FOR_SONARQUBE:
      from_secret: github_access_token_for_sonarqube
  commands:
  - >
    sonar-scanner
    -Dsonar.host.url=https://sonarqube.company-beta.com/
    -Dsonar.login=$$SONAR_TOKEN
    -Dsonar.projectKey=smcp-service-BE
    -Dsonar.projectName=smcp-service-BE
    -Dsonar.projectVersion=${DRONE_BUILD_NUMBER}
    -Dsonar.sources=src/main/java
    -Dsonar.tests=src/test/java
    -Dsonar.language=java
    -Dsonar.java.coveragePlugin=jacoco
    -Dsonar.modules=smcp-api,smcp-web
    -Dsonar.java.binaries=target
    -Dsonar.projectBaseDir=.
    -Dsonar.analysis.mode=preview
    -Dsonar.github.repository=Today_Group/SMCP-Service
    -Dsonar.github.oauth=$$GITHUB_ACCESS_TOKEN_FOR_SONARQUBE
    -Dsonar.github.pullRequest=${DRONE_PULL_REQUEST}
    -Dsonar.github.disableInlineComments=false
  when:
    event:
    - pull_request
    branch:
    - develop

# post sonarscan result back to git PR (not in preview mode)
- name: sonar-scan-feedback
  image: newtmitch/sonar-scanner:4.0.0-alpine
  environment:
    SONAR_TOKEN:
      from_secret: sonar_token
    GITHUB_ACCESS_TOKEN_FOR_SONARQUBE:
      from_secret: github_access_token_for_sonarqube
  commands:
    - >
      sonar-scanner
      -Dsonar.host.url=https://sonarqube.company-beta.com/
      -Dsonar.login=$$SONAR_TOKEN
      -Dsonar.projectKey=smcp-service-BE
      -Dsonar.projectName=smcp-service-BE
      -Dsonar.projectVersion=${DRONE_BUILD_NUMBER}
      -Dsonar.sources=src/main/java
      -Dsonar.tests=src/test/java
      -Dsonar.language=java
      -Dsonar.java.coveragePlugin=jacoco
      -Dsonar.modules=smcp-api,smcp-web
      -Dsonar.java.binaries=target
      -Dsonar.projectBaseDir=.
      -Dsonar.analysis.gitRepo=Today_Group/SMCP-Service
      -Dsonar.analysis.pullRequest=${DRONE_PULL_REQUEST}
  when:
    event:
      - pull_request
    branch:
      - develop

复制代码

コンフィギュレーションのドローンの上、次の点に注意して、全体のCIの基本的な流れであります

  1. ブランチの名前は、ステップ機能/、問題を/実行するときにのみ、トリガーに上記の始まりを開発する、ユニットテストのために、唯一の開発ブランチは(ニーズに合わせて調整することができる)有効になります
  2. ソナーの構成sonar.projectKey、sonar.projectNameの必要があり、名前は同じでソナーサーバー(sonar.host.url指定されたアドレス)でプロジェクトを作成するときに
  3. Sonar_token値はソナーサーバー上に作成され、その後、(倉庫のクリックでドローン、設定をセットすることができ入り)秘密のドローンの値を設定されています
  4. githubのトークンとsonar_token同じように、我々はする必要がプレセットでドローン中(利点は、あなたがそうより安全なこと、ファイルにパスワードを公開していないということです)
  5. マルチモジュールプロジェクトとJavaプロジェクトは、あなたがsonar.modulesに複数のモジュール名を指定することができますので
  6. PRへのスキャンソナーフィードバックコンテンツプレビューモードを指定しません
  7. ビルドjacoco(解析ユニットテストのカバレッジ)を使用して、のpom.xml Javaプロジェクトでは、このプラグインを導入する必要があります
<plugin>
  <groupId>org.jacoco</groupId>
  <artifactId>jacoco-maven-plugin</artifactId>
  <version>${jacoco.version}</version>
  <executions>
    <execution>
      <id>prepare-agent</id>
      <goals>
          <goal>prepare-agent</goal>
      </goals>
    </execution>
    <execution>
      <id>default-report</id>
      <phase>test</phase>
      <goals>
          <goal>report</goal>
      </goals>
      <configuration>
          <dataFile>target/jacoco.exec</dataFile>
          <outputDirectory>target/jacoco</outputDirectory>
      </configuration>
    </execution>
  </executions>
</plugin>
复制代码

発生する可能性のあるその他の問題:

  1. 実行後ciは完了し、またはどのようにマイクロチャネルグループに電子メールメッセージを送信します

:ドローンはに関する情報を提供し、電子メールプラグインのマイクロ手紙

  1. アリババP3C統合またはカスタムのCheckstyleをsonarqubeすることができます

A:いいえP3Cプラグインが、PMD経由で統合することができます

統合されたP3C:www.jianshu.com/p/a3a58ac36 ...カスタムのCheckstyle:www.jianshu.com/p/a3a58ac36 ...

  1. 私が行う方法(など成功、時間、)自分の情報に基づいて統計を構築したいですか?

:ドローンは、プラグインwebhookeを提供し、あなただけの情報を送信する必要があるかもしれませんテンプレートの設定に応じて、次のことができ、独自の統計処理を記述する必要があります

  1. 私はどのように行う、プラグインをしたくないですか?

A:あなたはあなた自身のプラグインを書くことができ、公式ウェブサイトは、例えばbashは/行くがあり、あなたは言語に精通している可能性あり


過去の推奨読書

このような発泡インタビュアーとレプリケーションセットのMongoDB

MongoDBはこれらの設計のヒントは、50%の効率を向上させるために知っています

私はカフカプロデューサーのソースを読んで過ごした一週間

インタビュアー:のLinkedHashMapでLRUを実装する方法

私はJava8ストリームを理解するにはどうすればよいです

私JDK8 HashMapを尋ねもはやインタビュアーの恐れ

MongoDBのタイミングインデックス

おすすめ

転載: juejin.im/post/5df0801c5188251257286699