web-dev-qa-db-ja.com

giteaとjenkinswebhook

私はGiteaをテストしていて、Jenkinsビルドのかなり基本的なユースケースをトリガーしたいと思っています。使用できる既存のGOGWebhookプラグインがあることは理解していますが、最近、Jenkins用のGiteaプラグインもあることがわかりました。

GOGSの場合、次の方法でJenkinsを呼び出します。 http:// localhost:8080/gogs-webhook /?job = job_name

上記の例では、必要に応じてJenkinsの場所とジョブ名を明らかに更新しています。

問題は、Giteaプラグインのドキュメントがないことですが、ソースコードに基づくと、URLは次のようになります。

http:// jenkins-url/gitea-webhook/post

私が起こるべきだと私が信じるシーケンスは次のとおりです。

  1. Giteaはプッシュアクティビティを確認し、その情報をJenkinsWebhookにPOSTします
  2. Jenkins GiteaWebhookはPOSTを認識し、その情報を使用してGiteaから新しいソースコードを取得します。

問題は、giteaプラグインが実行するジョブをどのように知るかです。これをどのように指定しますか?現在、giteaが上記のURLでJenkinsにPOSTを送信していることがわかりますが、何も発生していません。Jenkinsログにも、失敗した理由を理解するための情報がありません。

編集:

生成された公開SSHキーをGiteaユーザーアカウントにコピーした後も、Jenkinsがパイプラインエディターを使用するためにリポジトリにアクセスできないという問題が発生しています。ローカルホスト(Docker環境の外部)から完全にプッシュ/プルでき、コンテナーが実際に相互に完全に認識できることを確認したため、ここで何が欠けているのかわかりません。

ありがとう

4
fobius

比較的最近のバージョンを使用して、Jenkins/Giteaコンボを正常に構成できました(両方に公式のAlpineベースのDockerコンテナーを使用しています)。私は このGiteaの問題 をガイドとして使用しました。 JenkinsではGogsプラグインを使用せず、Giteaプラグインのみを使用しました。また、パイプラインは使用せず、従来の手動で構成されたジョブのみを使用します。

Jenkinsの場合:ジョブ設定ページで[ソースコード管理]オプションを[Git]に設定し、リポジトリへのURLを指定します( http://gitea-url.your.org/username/repo.git )、および[Poll tr​​iggers]セクションで、スケジュールが定義されていない[PollSCM]オプションをチェックします。この設定は基本的に、Webhookを介して要求された場合にのみGiteaリポジトリをポーリングするようにJenkinsに指示します。

Giteaの場合:[リポジトリ]-> [設定]-> [Webhook]で、新しいWebhookを追加し、URLを http://jenkins_url.your.org/gitea-webhook/post に設定して、シークレットをクリアします(そのままにします)ブランク)。

この時点で[配信のテスト]ボタンをクリックすると、配信が正常に試行されます(緑色のチェックマーク)。

テスト配信が失敗した場合は、POST to Jenkins webhook URL( http://jenkins_url.your.org/gitea-webhook/post ) 。例: Postman またはcurlを使用:

curl -vvv -H "Content-Type: application/json" -H "X-Gitea-Event: Push" -X POST http://jenkins.server.example.sk:8080/gitea-webhook/post -d "{}"

正しい応答は、単なる「処理済み」文字列である必要があります。他に何かある場合は、ここに投稿してください。

Jenkinsがビルドするジョブをどのように知っているかについての質問については、 POSTリクエスト本文に含まれる へのリンクリポジトリ/ブランチ。Jenkinsはこれを内部で検索して、このリポジトリを参照するジョブ(上記のジョブ設定ページで定義したもの)を見つけます。 このJenkins wikiページ 一般的なフックについてもう少し詳しく説明しています。また、 この回答 内部で何が起こっているのかを少し説明するリンクがあります。

物事を少しデバッグするために、giteaリポジトリ(または組織)設定から「最近の配信」(投稿リクエスト全体と応答でクリック可能!)を使用できますas この回答に示されています 。 giteaには/etc/gitea/app.iniファイルがあり、sshドメイン、giteaサーバードメイン、およびhttp urlが指定されており、jenkinsでgiteasrversを指定していることに注意してください。これらのURLは、機能するために一致する必要があります。

8
KMZ

Generic Webhook Trigger Plugin を使用できます。

トークン機能を使用して、ジョブごとに異なるトークンを用意します。

1
Tomas Bjerre

JenkinsでGiteaPlugin 1.0.4を使用していますが、Webhookに問題はありません。 Gogプラグインがインストールされていません。

Gitea UI(リポジトリ->設定-> webhooks)から、URLを示すWebhookを手動で定義できます: https:// my-jenkins/gitea-webhook/post

これは、次の図に示すように、「テスト配信」を実行して手動でテストできます。

enter image description here

Jenkins側私はGiteaの資格情報を構成しました。 JenkinsがJenkinsfile(パイプラインを使用)を含むプロジェクトを見つけると、リポジトリ(Gitea側)のWebhook(存在しない場合)を自動的に構成します。

Giteaは、JSON形式の多くの情報を含むPOSTでJenkinsに通知します。

JenkinsはGITリポジトリにアクセスできる必要があるため、Gitの資格情報を作成する必要があります。

1
Nicola Ben

最初にGitea PluginをJenkinsにインストールし、GiteaでWebhookを構成してJenkins Pipelineプロジェクトをトリガーしようとしたとき(すべてローカルで実行)、@ PhilWのように(そしてJenkinsをhttp://localhost:8080)、Giteaからhttp://localhost:8080/gitea-webhook/?job=job_nameをトリガーしてもうまくいきませんでした。

そうは言っても、JenkinsにGogs Pluginをインストールし、Gitea http://localhost:8080/gogs-webhook/?job=job_nameでWebhookを再構成し(違いに注意)、Jenkinsは問題なくパイプラインプロジェクトを構築しました。

また、簡単な汚いトリックとして、JenkinsサーバーのベースURL(Webブラウザー内)を適切なWebhook付属物で指定すると(例:.

  • http://localhost:8080/gogs-webhook/Gogs Plugin Jenkinsにインストールされ、有効になっている場合)、または
  • http://localhost:8080/bitbucket-hook/Bitbucket Pluginがインストールされ、有効になっている場合)、

返されるのは空白のページだけです。これは、Jenkinsの関連するWebhookが意図したとおりに機能している可能性が高いことを示しているようです。

http://localhost:8080/gitea-webhook/を指定すると(Giteaプラグインがインストールされて有効になっている場合)、HTTPエラー404が返されるため、このプラグインには1つか2つのバグがあるのではないかと思います。

1
gilesgas