Jenkins Blog ななめ読み: Participate and Contribute

## はじめに

みなさまこんにちは。
こちらは[Jenkins Advent Calendar](https://qiita.com/advent-calendar/2019/jenkins) 10日目の記事になります。

15年を迎えているJenkins。少し離れていますが、また新たにできることはないかなあと思いつつ、２つめで書いてまいります。

## 今回のななめ読み

今回は、[Participate and Contribute](https://jenkins.io/participate/)から。
jenkins.io という公式サイトからのコンテンツで、**Jenkinsにコントリビュートしてみたい方向け**の窓口になっています。

今回は、MEET と Code についてさっくり触れてみます。
（なお、いくつかのコンテンツについは、Jenkins Wikiとして発信されていたサイトが移行中のため、リンク切れになっているところもあります）

### MEET / ミートアップ

こちらは、Jenkinsのミートアップ、イベントについての情報が掲載されています。

https://jenkins.io/participate/meet/

#### イベントカレンダー

オンライン、オフライン含め、アメリカだけでなく全世界で開催されているイベント情報が掲載されています。

- https://jenkins.io/events/
- https://jenkins.io/event-calendar/ イベントカレンダーも見てね！

#### オンラインミートアップ

- https://www.meetup.com/ja-JP/Jenkins-online-meetup/
  - 世界中のJenkinsのユーザと開発者を繋ぐバーチャルなミートアップグループです
- 直近のオンラインミートアップの例
  - **Changes in Jenkins plugin documentation and changelogs
Jenkinsのプラグインのドキュメンテーションと変更履歴に関して** 
  - Youtubeで公開していただいてます！
  - https://www.meetup.com/ja-JP/Jenkins-online-meetup/events/266465039/ (2019/11/22開催)

<iframe width="560" height="315" src="https://www.youtube.com/embed/PaQsvli92XY" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>

### ローカルイベント

- https://jenkins.io/projects/jam/ (Jenkins Area Meetups: 略して **JAMs**)
- 世界各地のMeetUp情報や、スポンサー協力についての情報もあります
  - 例： フードスポンサー、会場スポンサー、録画スポンサーなど
- https://www.meetup.com/ja-JP/pro/cicd-cdf/ (Continuous Delivery Foundation: [* CDF])
  - CI/CDにフォーカスしたコミュニティ
  - https://twitter.com/CDeliveryFdn (Twitterアカウント)
  - https://www.cloudbees.com/devops-world / (DevOps World
  - https://fosdem.org/2020/ (FOSDEM）
    - Jenkinsだけでなく、様々なフリーのソフトウェアの開発者が集まってコラボしたりアイディアをシェアするイベントです

わたし自身はオンライン、オフラインどちらもミートアップ系はあまり参加できていないですし、発表も全くできるような立場ではないのですが、英語の練習も兼ねて、資料や動画は見ていきたいと思っています。

## Contribute code / コートベースでのコントリビュート

つぎに、コートベースでのコントリビュートについて。

[Contribute code](https://jenkins.io/participate/code/) の冒頭から。

- Jenkinsのプロジェクトには、たくさんのコードがあります
- コードのコントリビュータとして、あらゆる方々にプロジェクトに参画してもらってます
  - プログラミング言語であれば、**Java**だけではなく, JavaScript, Groovy, Golang, Ruby, Shell scriptsなど様々な分野があります
- また、Jenkinsには数百のプラグインがあり、そうしたプラグインは実に多様なテクノロジーと結びついています。
- もし（OSS活動に）コントリビュートしてみたいとお考えなら、Jenkinsのプロジェクトであれば、きっと興味のある分野が見つかることでしょう

## Where to contribute? / どこで自分がコントリビュートできそう？

Jenkinsのプロジェクトは多数のGitHub上のOrganizationで展開されています。
興味や関心のあるリポジトリであれば、どこからでも参加できます。

- **jenkinsci**
    -  Main organization. Jenkins core, plugins and libraries reside there
    -  https://github.com/jenkinsci
    - メインのorganization
    - Jenkins本体やプラグイン、そして関連するライブラリを扱っています

- **jenkins-infra**
-   Jenkins infrastructure, including the website and other services
    - https://github.com/jenkins-infra
    - Jenkinsの公式サイトやサービス、Jenkinsの（ビルド、リリースといった）インフラを支えています

- **stapler** 
  - Stapler Web Framework which is currently maintained by the Jenkins community
  - https://github.com/stapler/
  - Webのフレームワークのよう（初めて知りました！）
  - http://stapler.kohsuke.org/ とあるので、川口さんのドメイン？？

- **jenkins-zh** 
  - organization of the Chinese Localization SIG
  - https://github.com/jenkins-zh
  - 中国語のローカライゼーションのためのリポジトリ! ロゴがすごく雰囲気があります！

上記4つのOrganizationはそれぞれのデリバリ、レビューのポリシーを持っています。詳しくはリポジトリのドキュメントを。

#### Plugins / プラグインを通して

Jenkinsには1500以上のプラグインがあります。多くのJenkinsのコントリビュータは、プラグインを通して関わっており、プロジェクトに参加しようとする場合は、プラグインからというのも良い方法です。
プラグインに関しては、以下のリンクをご紹介します。

- **Jenkins developer documentation**
  - https://jenkins.io/doc/developer/
  - シンプルなプラグイン開発のチュートリアルがあります
      - https://jenkins.io/doc/developer/guides/
  - https://jenkins.io/doc/developer/book/
    - 開発者向けのリファレンス / こちらにもプラグイン開発の情報があります

- **plugin development**
  - チュートリアル（ただし、Wiki: Confluenceからサイトを移行しているため、Read Onlyになっています）

- **Advice before creating a new plugin**
   - https://wiki.jenkins.io/display/JENKINS/Before+starting+a+new+plugin
    - 新しいプラグインを開発する前に、ガイドライン的なもの
    - こちらもWikiを移行のためRead Onlyになっています

#### Jenkins core / Jenkins本体を通して

- こちらは文字通りJenkinsの中枢で、ほぼJavaで実装されています
- プラグイン向けのAPIの実装もこちらで行われています

#### Infrastructure / Jenkinsを支えるインフラを通して

- Jenkins自体のビルドやデリバリ、サイトの運用なども含めたJenkinsの活動のためのインフラのリソースも、OSSとして公開されています
- Jenkinsのオープンなリソース、インフラ管理のためのコードが公開されていることにより、**誰もが(Jenkinsという枠にとらわれずに）学び、コントリビュートできる**ことを目指しています
  - https://jenkins.io/projects/infrastructure/
  - こちらのサブプロジェクトもぜひ参照を、とのこと！

#### Other components / その他のコンポーネントを通して

- Jenkinsを作り、稼働させる上で必要不可欠なパッケージ、コンポーネントを扱うグループがあります
  - https://jenkins.io/sigs/
  - https://jenkins.io/projects/

### Newcomers / これから始めたい方へ！

- これからはじめようとする方へ
  - いつでもはじめて参加する方を歓迎しています！
  - まずはじめに、以下のリンクやissueから取り組んでもらえるといいのでは

#### 初めての方でも取り組みやすいIssueの一覧

- [Newbie-friendly issues in Jenkins JIRA](https://issues.jenkins-ci.org/browse/WEBSITE-663?jql=labels%20%3D%20newbie-friendly%20and%20status%20in%20(Open%2C%20%22To%20Do%22%2C%20Reopened))
- [Good first issues on GitHub](https://github.com/search?q=org%3Ajenkinsci+org%3Ajenkins-infra+is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22)

#### 初めての方向けのガイド

- [Beginners Guide to Contributing](https://wiki.jenkins.io/display/JENKINS/Beginners+Guide+to+Contributing#BeginnersGuidetoContributing-Areyouinterestedinwritingcode%3F)
- [Presentation: Contributing to Jenkins](https://docs.google.com/presentation/d/1JHgVzWZAx95IsUAZp8OoyCQGGkrCjzUd7eblwd1Y-hA/edit#slide=id.p)
  - コードの実装、テスト、ドキュメンテーション、デザイン、普及活動といった様々な分野でのコントリビュートについてわかりやすく解説されています
    - Outreach Program なども

- https://jenkins.io/sigs/advocacy-and-outreach/outreach-programs/
    - Jenkinsの展開、普及活動についての情報があります
    - 学生向けのイベント、インターンシップ、[テクニカルライティング向けの講座](https://developers.google.com/season-of-docs
)などが紹介されているようです			 

### Experienced contributors / ベテランな方向け

- すでにJenkinsへのコントリビュートを行っている方には、特定のトピックを扱うSIGや、セキュリティissueを扱うチームへの参加も呼び掛けられています
  - https://jenkins.io/security/#team

## ななめ読みの雑感

### コントリビュートは自分の好きな時間 / スタイルに合わせて

ふたたび粗く、理解が追いつかないところは流しつつ、２つのトピックについて触れてみました。
MEET (ミートアップ、イベント）に関しては、時間や場所でなかなか参加できないのですが、Contributeに関しては、自分のペースで参加できるのが良いところ。

**リアルタイムでの活動には、時間がうまく取れない**という方にこそ、コードやドキュメンテーション、翻訳でのコントリビューションはとても向いている、とわたしは考えています。

### Jenkinsを支えるインフラもコード化 / 公開されていること

ここ１０年とは言いませんが、７〜８年の間で、インフラの環境が大きく変わってきて、Jenkinsとクラウドサービス、マシンとの連携やコンテナ化、さらにはその先へ...といったところまで広がっています。

Jenkinsのコアは、``java -jar jenkins.war`` だけで起動し最低限利用はできるのですが、正直、わたしはこの分野まで来るととても追いつけていないのが正直なところです。

ただ、今回のContributeななめ読みで触れた通り、Jenkinsを支える**インフラに関しての活動、コード**も公開されています。

> Because we strongly believe in Open Source principles, we also apply them to our infrastructure. As such we consider ourself as an open infrastructure project where everybody is invited to learn, share, contribute

この一文の通り、「オープンソースの原則（理念）を、わたしたちのインフラに関しても当てはめています。オープンなインフラストラクチャプロジェクトであるからこそ、誰もが参加可能で、そこから学びを得たり、知見をシェアしたり、コントリビュートができるのです」（ざっくりな訳ですみません）

インフラ上、シークレットな情報や証明書といったものは公開は難しいけれど、限りなく透明性を高くしている、とのことで、インフラ学習の面からも、こちらの活動に着目するといった切り口も良さそうですね！
（とにかくボランティアベースで、ベストエフォートでの活動なので、こちらもコントリビュート大募集ようです）

### この次は？

以前読んだり、少し参加してみたサイトも移動したり作り替えの最中のようなので、ドキュメンテーションや紹介といったところから、また関われたらと思っています。

次回は上記で上がっている情報のうち、プラグインのチュートリアルや、初心者向けのIssueについて触れてみます。