【Rundeck】Rudeck3系列のJobをGithub管理する(2021/12)


# はじめに
全く全然別のことをやっていたらRundeckのJobをGithubで管理できるようになったので記載しておく。
そこそこ他に記事があるのと地味にハマったので2021/12でRudeck3系列をGithub管理する方法として記事にする。
Centos8上にRundeck3系列がインストールされている前提。

#手順

### リポジトリ準備
まず以下のようにGithubで新しいリポジトリを作成しておく。

- Repository nameは任意のものを指定

- Descriptionはなにか書く

- Privateなリポジトリに設定
    - RundeckのJobに漏れちゃまずい情報を入れてはいけない気がするが・・・。

- Initialize this repository with:は任意。ちなみにREADMEファイルはcommit時に削除された。

![リポジトリ準備.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1092362/38b91b0d-4a92-484c-aba6-ec3734496bde.png)


### Rundeckのサーバで鍵作成
rundeckユーザになり「ssh-keygen -m pem」鍵を作成する
※Github側かRundeck側か不明だが今のopensshの鍵形式だと延々エラーは吐かれてハマるので注意。

なお、今回は「scm」という名前で作成した。

```ruby:Rundeckのサーバで鍵作成
su - rundeck
ssh-keygen -m pem
Generating public/private rsa key pair.
Enter file in which to save the key (/var/lib/rundeck/.ssh/id_rsa): scm
~省略~
```

### Githubへ公開鍵をアップロードする
先ほどのコマンドで作成した公開鍵を「cat scm.pub」で開いた内容を[Github](https://github.com/settings/ssh/new)へペーストして「Add SSH key」をクリックする。(Titleはなんでもいい)
![github鍵.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1092362/4362e489-39cb-3980-fcb8-860ea1a78c3d.png)


### Rundeckのkeystorageへ秘密鍵を登録する
Rundeckの画面右上「歯車」→「Key Storage」を選択する。
![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1092362/2bc2bcf7-5ca1-0918-4bd1-a8662d3a2f5b.png)


「Add or Upload Key」を選択して秘密鍵の内容を張り付けて「Save」する。

- Storage Pathは未入力で問題なし

- Nameは任意のものを指定する
![2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1092362/39c19ada-6e4d-47b2-5e23-c24cd6be8c99.png)

### profile設定
SCMを設定する前にcommitter情報が必要になるのでユーザプロファイルの設定を行う。
Rundeckの画面右上の[人間]→「Profile」を選択する。
![3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1092362/d7002118-378d-f920-3e25-51ba27fa247a.png)


「edit」をクリックして黒塗りになっているEMAIL・FIRST NAME・LAST NAMEを埋めておく。
(何も考えずつかっていると大体入っていない気がするので)
![4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1092362/17577312-8de8-67bc-9a30-f8954c123148.png)


### SCM設定
対象プロジェクトの「PROJECT SETTINGS」→「Setup SCM」を選択する。

今回は「Git Export」を設定する。(Git Importは別枠でやる予定)
設定が必要な項目は以下

- Git URLは作成したリポジトリを指定する。

- Branchはmasterのままでいいがgithub側のdefaultbranchがmainだったりするので事前に変更しておくといい。

- SSH: Strict Host Key Checkingは「no」にする。(あまり頑張る意味がないので)

- SSH Key Storage Pathに先ほどkeystorageに設定したものを指定する。

![5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1092362/c347ea3f-1cd8-0564-2a8c-674136304d16.png)

「SCM Plugin Setup Complete」がでれば設定完了。
※でなければKI☆A☆Iでなんとかする。
![6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1092362/ec1ffa09-4265-e9c1-ec1b-c0d8edaf12c1.png)


※でないときの対処
でないときは他の認証情報が邪魔をしている場合がある。
その場合は以下を試してからもう一度setupを実行する。

```ruby:他の認証情報が邪魔をしているとき
vi .ssh/config
Host github github.com
  HostName github.com
  IdentityFile ./scm
  User git
chmod 600 .ssh/config
git clone [リポジトリ]
```

### Githubへのコミット
設定が完了したので改めてJob画面を見ると「ジョブのアクション」周りに表示がふえている。
「Commit Changes to Git」を選択する。
![7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1092362/6bff922d-1fe6-ec0b-9b85-a15b9b55c87e.png)


対象のJobを選択してコメントいれてcommitする。
![8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1092362/e01e3f57-8300-c27b-beca-131922ecacc0.png)


Github上で反映されていることが確認できる。
![resultgit.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1092362/21e97089-5a3b-384a-1e10-9f599317a6d7.png)

# あとがき
この機能自体は割と昔から認識していたけど触ったことがなかった。
Rundeck単体ではできないJobのバージョン管理がGithubを使ってできるのはやはり便利。
ただ気軽にall commitすると戻しづらくなってしまうので、実運用を考えると結構大変そうな気がした。
Job毎に管理することになるのだろうか・・・。
また、今回の手順において個別にやっていること自体は簡単なのだが全体として煩雑になってしまった。
私が下手なのかGUIのせいなのか・・・・CUIで全部できないだろうか。
なお、今回作成している鍵とリポジトリは記事用に作成したものなので使用できません。
実際に使用しているリポジトリは[ここ](https://github.com/vildi-5567/rundeck-scm)になります。
あと個人的に長年悩まされてきた「Githubを特に使う理由がない問題」に一石を投じることができて大変実りがあった。
次回はSCM設定の「Git Import」を使用したRundeckのバックアップとその拡張したなにかを作りたいと思っている。

2021/12/10追記
log4jの任意コード実行で世の中ざわついているけどRundeckはどの程度影響するのだろうか。
たとえばエンドユーザに直接触ってもらっているケースなどあるのだろうか・・・。