DUICUO

Gitea + Drone を使用した軽量コード管理および CI サービスの構築

使用環境

IP アドレスとポートは、次のサービスに属します: 10.10.9.208 3000 Gitea Web 管理サービス、 10.10.9.208 2222 SSH/HTTP コード ダウンロード サービス、 10.10.9.208 7500 Drone-Server サービス、 10.10.9.208 3100 Drone-Runner。

ギテア

導入

Giteaは、オープンソースでコミュニティ主導型の軽量コードホスティングソリューションです。バックエンドはGo言語で記述され、MITライセンスの下で提供されています。Gogsから発展したものです。Gogsは単一の管理者によって管理されていたため、Giteaが開発されました。Giteaはコミュニティ管理モデルを採用し、多くの新機能が追加されています。また、開発の方向性はコミュニティ内の多数のメンテナーによって決定されているため、高い活力と開発の可能性を秘めています。

Giteaの最大の目標は、インストールが非常に簡単で、動作が高速で、優れたユーザーエクスペリエンスを提供するセルフホスト型のGitサービスを構築することです。バックエンド言語としてGoを使用し、実行ファイルを生成するだけで済みます。さらに、Linux、macOS、Windowsなどのクロスプラットフォーム対応に加え、x86、amd64、ARM、PowerPCなどの様々なアーキテクチャにも対応しています。

特徴

  • イベントタイムラインをサポートします。
  • SSH および HTTP/HTTPS プロトコルをサポートします。
  • SMTP、LDAP、リバース プロキシ経由のユーザー認証をサポートします。
  • リバース プロキシ サブパスをサポートします。
  • ユーザー、組織、倉庫管理システムをサポートします。
  • リポジトリの共同作業者の追加と削除をサポートします。
  • リポジトリおよび組織レベルの Web フック (Slack 統合を含む) をサポートします。
  • リポジトリの Git フックとデプロ​​イメント キーをサポートします。
  • ウェアハウスの問題、プル リクエスト、Wiki をサポートします。
  • リポジトリとその wiki の移行とミラーリングをサポートします。
  • リポジトリ ファイルと wiki のオンライン編集をサポートします。
  • カスタム ソースの Gravatar と Federated Avatar をサポートします。
  • 電子メールサービスがサポートされています。
  • バックエンド管理パネルをサポートします。
  • MySQL、PostgreSQL、SQLite3、MSSQL、TiDB (MySQL) データベースをサポートします。
  • 多言語ローカリゼーション(21言語)をサポートします。
  • パッケージ レジストリ センター (Composer/Conan/Container/Generic/Helm/Maven/NPM/Nuget/PyPI/RubyGems) をサポートします。

インストール

Giteaの公式ドキュメントには中国語版があり、様々なインストール方法が紹介されています。ここではDockerのデプロイを例に挙げ、最も基本的なデプロイ方法、つまり内部のsqlite3をデータベースとして使用する方法を説明します。docker-composeのデプロイ設定ファイルは以下のとおりです。

 バージョン: "3"
ネットワーク:
ギテア
外部: false
サービス:
サーバー:
画像: gitea / gitea : 1.17.2
コンテナ名: gitea
環境
- USER_UID = 1000
- USER_GID = 1000
- SSH_PORT = 2222
再起動常に
ネットワーク:
- ギテア
巻数:
- . / データ: / データ
- / etc / timezone : / etc / timezone : ro
- / etc / localtime : / etc / localtime : ro
ポート:
- 「3000:3000」
- 「2222:2222」

環境変数の設定は数多くあり、公式ドキュメントに記載されています。ここでは主にSSH_PORTポートを変更する必要があります。デフォルトのポート22はホストのSSHサービスポートと競合するためです。そのため、ポートを2222に変更します。ポート3000はWeb管理ポートです。その他の設定は、初回アクセス時にWebインターフェースから行います。

次のコマンドを使用してイメージを起動します。

 docker - compose up -d

構成

比較的軽量なので、起動も非常に高速です。Web版に初めてアクセスすると、初期設定ページが表示されます。

ここでは以下の項目を設定する必要があります。

  • サイト名: 任意に設定できます。
  • サーバー ドメイン名: これはホスト マシンの IP アドレスまたはバインドされているドメイン名です。
  • ベースURL: これはウェブページのアクセスアドレスです。localhostをホストマシンのIPアドレスまたはドメイン名に置き換えてください。

サーバーおよびサードパーティのサービス設定、管理者アカウント設定など、オプション設定で一部の構成を変更する必要があります。

サーバーおよびサードパーティのサービス設定

このセクションでは、主にローカルモードの有効化について説明します。デフォルト設定ではCDNを使用して外部リソースに接続するため、サーバーを外部ネットワークに接続できない企業ではローカルモードが不可欠です。一般的に、これは社内利用を目的としているため、ユーザー登録は不要です。管理者がアカウントを作成できます。

管理者アカウントの設定

デフォルトでは、最初に登録されたユーザーが管理者になります。ここで管理者情報を作成します。ユーザー名には「admin」などの予約語は使用できませんのでご注意ください。

設定後、「今すぐインストール」をクリックしてユーザー ページに入ります。

外部リポジトリのコードをインポートする

Gitea は、次のコード管理リポジトリからのコード リポジトリのインポートをサポートしています。

インポートをサポートするには、いくつかの設定が必要です。gitea /conf/app.iniファイルに以下の設定を追加してください

 [ 移行]
ALLOW_LOCALNETWORKS = true
[ ウェブフック]
許可ホストリスト= 10.10 .9 .208 / 16

次にコンテナを再起動します。

 docker - 再起動を作成する

ドローン

導入

Drone は Docker ベースの CI/CD ツールであり、すべてのコンパイル、テスト、およびデプロイメント プロセスが Docker コンテナ内で実行されます。

開発者はプロジェクトに .drone.yml ファイルを組み込み、コードを git リポジトリにプッシュするだけで、Drone が自動的にコードをコンパイル、テスト、デプロイします。

Drone を CI/CD ツールとして使用する理由は何ですか?

  • 柔軟で強力な機能: ビルド、テスト、リリース、展開など、必要なことは何でも実行でき、すべてを 1 つのシステムで処理できます。
  • 高い互換性: すべての SCM、すべてのプラットフォーム、すべての言語をサポートします。
  • 環境のデプロイはシンプルです。Dockerコンテナをネイティブにサポートしており、2つのコンテナを起動するだけでデプロイが完了します。その他のビルド、テスト、デプロイツールは、使用時にDockerリポジトリから自動的にプルされます。
  • 高いスケーラビリティ: 幅広い無料プラグインやカスタマイズ可能なプラグインを備えた堅牢なプラグイン システム。
  • シンプルな構成: 公式の説明にあるように、「コードとしての構成」では、すべての機能、手順、ツール、コマンドが単一の YAML 構成ファイルによって処理されます。
  • メンテナンスが簡単: ユーザーを登録したり権限を割り当てたりすることなく、SCM のアカウント システムと権限管理を直接再利用します。

インストール

ドローンは 2 つの部分で構成されています。

  • タスクのスケジュール設定はサーバーが担当します。
  • ランナーはパイプラインの特定のタスクを実行します。

そのため、 drone/drone:2.13.0drone/drone-runner-docker:1.8.2 の2つのイメージがインストールされます。まずはイメージをダウンロードしてください。

 docker pull ドローン/ ドローン: 2.13 .0
docker pull drone / drone - runner - docker : 1.8.2

JenkinsなどのCIツールとは異なり、Droneは特定のGitリポジトリにバインドする必要があるため、起動時に対応するリポジトリ情報を設定する必要があります。ここではGiteaリポジトリを例に説明します。

準備

まず、Gitea で対応する検証情報を作成します。

生成されたトークンを覚えておいてください。DroneはOAuth2を使用してGietaに接続します。アプリケーションを作成した後、リダイレクトURIにDroneサービスのログインアドレスを設定します。Droneサービスはまだ作成していませんが、最初にここでアドレスとポート番号を入力してください。後でDroneサービスを作成する際は、ここで入力したアドレスと一致していることを確認してください。

クライアントIDとクライアントキーを記録します。ドローンはサーバーとランナーで構成されており、それらの間の通信は暗号化する必要があります。キーは次のように生成できます。

 openssl rand - 16 進数16

drone-server 起動設定ファイル

 バージョン: "3"

サービス:
ドローン- サーバー:
画像: ドローン/ ドローン: 2.13.0
container_name : ドローン- サーバー
再起動常に
ポート:
- 「7500:80」
巻数:
- . / データ: / データ
環境
- DRONE_GITEA_SERVER = http://10.10.9.208:3000
- DRONE_GITEA_CLIENT_ID = 9 eedfa2e - b0aa - 497 e - aaee - c7434755fd9c
- DRONE_GITEA_CLIENT_SECRET = gto_zdessdivpj4gly2lqq2bby3qvsa6xbbrbrngj3rv24pzotsfjw4q
- DRONE_RPC_SECRET = 7 cc96b3ca902a735958033cb233abb6e
- ドローンサーバーホスト= 10.10.9.208:7500
- DRONE_SERVER_PROTO = http
- DRONE_USER_CREATE = ユーザー名: xingxing管理者: true
  • DRONE_GITEA_CLIENT_ID (必須) Gitea OAuth クライアント ID。
  • DRONE_GITEA_CLIENT_SECRET (必須) Gieta OAuth クライアント キー。
  • DRONE_GITEA_SERVER (必須) Gietaサーバーのアドレス(例: http://10.10.9.208:3000 )。正確なHTTP(S)プロトコルを入力する必要があります。そうでない場合、Gietaから「サポートされていないプロトコルスキーム」というエラーレポートが表示されます。
  • DRONE_RPC_SECRET (必須):準備中にopenssl rand -hex 16を使用して生成された共有キー。このキーは、ドローンサーバーとランナー間のRPC接続を検証するために使用されます。したがって、サーバーとランナーの両方で同じキーを使用する必要があります。
  • DRONE_SERVER_HOST (必須): Droneへのアクセスに使用するドメイン名またはIPアドレス。IPアドレスを使用する場合は、ポート番号も含める必要があります。例: http://10.10.9.208:7500
  • DRONE_SERVER_PROTO (必須)は、サーバープロトコルをHTTPまたはHTTPSのいずれかで設定します。デフォルトはHTTPSです。
  • `DRONE_USER_CREATE`設定では、管理者のユーザー名を指定します。このユーザー名は Git リポジトリのユーザー名であり、必ずしも Git リポジトリの管理者である必要はありません。Git リポジトリのユーザーであれば誰でも構いません。

設定後、drone-server サービスを開始します。

 docker - compose up -d

その後、 http://10.10.9.208: 7500 にアクセスすると、Gieta の認証ページに自動的にリダイレクトされます。認証後、メールアドレス、ユーザー名、会社名を入力してページにアクセスしてください。Drone にはログインインターフェースがないため、ご注意ください。では、Drone はどのようにして Gieta のリポジトリにアクセスし、ビルドを行うのでしょうか?

DroneとGietaはユーザー情報を共有します。Droneにアクセスする際、同じブラウザ内でGietaにログインしていれば、Droneは現在ログインしているGietaユーザーの情報を使用してリポジトリデータを取得します。Gietaにログインしていない場合は、Gietaのログインページにリダイレクトされます。この部分は私を長い間困惑させました。なぜ一部のリポジトリは取得できて、他のリポジトリは取得できないのか理解できませんでした。また、Droneがすでに開いている状態で、Gietaにログインしているユーザーを切り替えても、Droneは自動的にアカウントを切り替えないことにも注意してください。この場合、アカウントを切り替えるには、Droneでログアウトし、ページを更新してから再度ログインする必要があります。

ログインすると、ビルド可能なリポジトリが表示されます。Gietaにプロジェクトを追加したのにここに表示されない場合は、「同期」ボタンをクリックして手動で同期できます。その後、リポジトリにアクセスして有効化し、いくつかの設定を行ってください。

プルおよびフォーク用のWebHookメッセージは受け付けません。TrustedフィールドはDrone管理者のみに表示され、他のユーザーには表示されません。

ドローンランナーの起動構成

 バージョン: "3"
サービス:
ドローンランナー
イメージ: ドローン/ ドローンランナー- docker : 1.8.2
再起動常に
container_name : ドローン- ランナー
巻数:
- / var / run / dockersock : / var / run / docker靴下rw
環境
- DRONE_RPC_PROTO = http
- DRONE_RPC_HOST = 10.10.9.208:7500
- DRONE_RPC_SECRET = 7 cc96b3ca902a735958033cb233abb6e
- ドローンランナー容量= 2
- DRONE_RUNNER_NAME = ランナー
  • DRONE_RPC_HOSTにドローン サーバーのホスト名 (およびオプションのポート番号) を入力します
  • DRONE_RPC_PROTOトランスポート プロトコル: httpまたはhttps。
  • DRONE_RPC_SECRETと Drone Server 間で共有されるキーは、 openssl rand -hex 16を使用して準備プロセス中に生成された共有キーです
  • DRONE_RUNNER_CAPACITYランナーは、同時に実行できるパイプラインの数です。デフォルト値は2です。
  • DRONE_RUNNER_NAMEはカスタムランナー名です。

ランナーが成功したことを確認します。

 docker ログドローン- ランナー

ログに次の内容が含まれている場合、起動は成功したことを示します。

 サーバー起動する
リモートサーバーへpingに成功しました

ビルドを使用する

Drone はパイプライン構成に構成ファイルを使用するため、まず、対応するリポジトリのルート ディレクトリに次の内容を含む.drone.ymlファイルを作成する必要があります。

 種類: パイプライン
タイプ: docker
名前: テスト

ファイルが送信されると、ビルドが自動的にトリガーされます。

Droneでは、パイプラインを手動で作成することも、トリガーメソッドを設定して自動的にトリガーすることもできます。Jenkinsを使用する場合、GitリポジトリにWebHookを設定し、WebHookのトリガーイベントを選択してビルドを自動的にトリガーする必要があります。しかし、Droneのインストールと設定時にトリガーメソッドを設定していませんでした。.drone.ymlファイルを追加すると、なぜビルドが自動的にトリガーされるのでしょうか?これは、DroneがGitリポジトリにバインドされているためです。Droneサービスを作成する際に、Giteaリポジトリの認証情報を既に設定しています。そのため、Droneでプロジェクトをアクティブ化すると、DroneはGitea内の対応するプロジェクトに対して自動的にWebHookを作成します。

WebHook 編集ページに入ると、いくつかのトリガー条件がデフォルトで選択されていることがわかります。

ここでトリガー条件を設定すると、ビルドが自動的にトリガーされます。Giteaでは、WebHookをトリガーする際にWebHookメッセージの受信者リストを設定する必要があることに注意してください。上で設定した` webhook.ALLOWED_HOST_LIST`を覚えていますか?ここでは主にこれが使用されます。設定されていない場合、トリガー後にエラーが発生し、WebHook設定ページの下部にエラーメッセージが表示されます。

Gitea + Drone 自動ビルドシステムが完成しました。ちょっとしたヒント:Drone プロジェクトの設定ページにバッジオプションが表示されます。

内容をコピーし、プロジェクトのREADME.mdファイルの先頭に追加してください。これにより、Giteaプロジェクトページで、右上隅の赤いボックスに示されているように、現在のパイプラインのステータスを確認できるようになります。