Githubで草を生やす活動を自動化してみた

# はじめに
いきなりですが、みなさん、GitHubで草を生やす活動をやっていますか？

>ちなみにGitHubの草とはGitHubのコントリビューションのことです。

私は時々やっていますが、やっぱり草を生やすならいっぱい生やしたいですよね。ということで今回は、この「草を生やす活動」を自動化してみました。
※本当はなんの意味もないコミットで毎日草を生しているだけなので、`ネタ記事として楽しんでください！`

# やっていること
実際に作成して運用しているrepoは以下になります。

https://github.com/to-fmak/update-timestamp

やっていることとしては
- 毎日コミットをする用のrepoを作成
- その中に「timestamp.txt」というファイルを作成
- Jenkins（ラズパイの自宅サーバで運用しています）ジョブを作成し、毎日指定した時刻にその時点のタイムスタンプを「timestamp.txt」に書き込む
- 更新した「timestamp.txt」ファイルをリモートrepoにpushする

最初はhourlyにして、１時間ごとに動かしていましたが、さすがにやりすぎだなと思って、dailyに変更しましたw

※ちなみに本記事を書こうと思ったきっかけが以下になります。（職場の人とのチャットです）
![IMG_0564.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2954734/321327bb-5ba9-1206-9603-d7296525bbd6.jpeg)



# 構築手順
では、実際に始めてみましょう。

## repoの作成
任意の名前で（今回はupdate-timestampという名前にしています）publicのrepoを作成します。

## timestamp.txtの作成
「timestamp.txt」という空のテキストファイルを作成して、pushします。（この時点ではタイムスタンプを書かなくてもOK）

## Jenkinsの構築
詳細なインストール手順やセットアップ手順を割愛します。気になる方は[公式ドキュメント](https://www.jenkins.io/doc/)等をご参照ください。

ちなみに今回の動作環境は下記になります。
- OS: Raspberry Pi OS（64-bit）
- Jenkinsバージョン：2.445

## Jenkinsの設定
Git pluginがインストールされていることを前提とします。

### Git Pluginの設定
「Manage Jenkins」->「System」を開きます。
![Screenshot 2024-06-06 at 8.28.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2954734/8129bb37-afb7-81e4-538b-17a843b92593.png)

「Git plugin」でGithubのユーザー名とEメールアドレスを入力します。
![Screenshot 2024-06-06 at 8.29.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2954734/21b47da1-b699-6e11-ccc7-434e41baae44.png)

- user.name=GithubのユーザーID
- user.email=Githubに登録したEメールアドレス
※`この２つの設定値が実際のGithubアカウント情報とマッチしていないと、リモートrepoにpushしても草（コミット）が表示されないので`、ご注意ください。


## Githubクレデンシャルの登録
「Manage Jenkins」->「Credentials」を開きます。
![Screenshot 2024-06-06 at 8.30.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2954734/194d6696-293c-8023-6947-683796fcf77a.png)

新しいGlobal credentialを追加します。
![Screenshot 2024-06-06 at 8.31.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2954734/f2862719-844f-80a1-fce7-9323482dda39.png)

今回はGithubのPersonal access token（発行時に適切な権限を付与してください）を追加したいので、「Username with password」を選択します。
「Username」にユーザー名を入力し、「Password」にGithubのPersonal access tokenを入力します。
「ID」は任意の名前にしていただいて大丈夫です。
![Screenshot 2024-06-06 at 8.32.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2954734/95446bd3-c0e1-c91c-98cc-4c5ae231e6bc.png)

※SSHキーを使いたい場合は設定方法が異なるので、公式ドキュメント等をご参照ください。

## Jenkinsfileの作成
Jenkinsfileを作成してrepoにpushします。

ちなみに私が現在使っているスクリプトが以下になります。適宜修正してご利用ください。

https://github.com/to-fmak/update-timestamp/blob/main/Jenkinsfile.groovy

## Jenkinsジョブの作成
新しい「Pipelinie」ジョブを作成します。
![Screenshot 2024-06-06 at 8.51.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2954734/f7947721-55d4-5f15-f199-92818403b5fc.png)

### ビルドパラメータの設定
上記私が現在使っているJenkinsfileをそのまま使う場合は、下記ビルドパラメータの設定が必要です。

まず「GIT_CREDENTIAL」というStringのパラメータを追加し、デフォルト値は上記「Githubクレデンシャルの登録」手順で登録したクレデンシャルのIDにします。
![Screenshot 2024-06-06 at 8.55.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2954734/063dccc2-b05e-1f50-01b4-1210212c838b.png)

「BRANCH」というStringのパラメータも追加します。「main」ブランチで運用していない場合は適宜変更してください。
![Screenshot 2024-06-06 at 8.55.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2954734/e6d01f98-c935-e610-4a37-c7287f507976.png)

### ビルドトリガー
下記のようにcron形式で設定します。今回の場合は毎朝10時に実行するように設定しています。
![Screenshot 2024-06-06 at 8.55.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2954734/d58fad00-4be4-6037-83d7-f4578de8ee72.png)

### Pipelineの設定
「Pipeline」の「Definition」で、「Pipeline script from SCM」を選択し、下記設定値を入力します。
- SCM: Git
- Repository URL: 事前に作成したrepoのURL
- Credentials: 事前に作成したクレデンシャル
- Branch Specifier: 対象ブランチ

![Screenshot 2024-06-06 at 8.56.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2954734/e26008d8-75fb-8f47-271c-da2d10fa0cac.png)

最後に「Script Path」（上記手順で作成しpushしたJenkinsfileのパス）を入力します。
![Screenshot 2024-06-06 at 8.56.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2954734/fcf8dbe4-b283-2739-b707-503a8161c522.png)


## 動作確認
ジョブを実行してみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2954734/610bc528-2294-7b08-133a-2a65ce18e709.png)

Githubの画面でコミット履歴を確認してみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2954734/079803cc-5bd6-a006-d54d-8a57092345b7.png)
毎日ちゃんとコミットされていますね。


# おわりに
始めてから１か月くらい経ちましたが、プロフィールは今のところこんな感じです。（個人開発等をサボっていたため）ほぼ自動でコミットされているやつしかないです。
（GWは実家に二週間くらい帰っていたので自宅サーバをしばらく止めていました）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2954734/031b77b2-092b-082f-6242-2e382b89aebf.png)


ただこれはあくまでネタ記事なので、転職活動とかで草を生やしてアピールしたい場合はやめておいたほうがいいかもしれません...