RundeckのJobをGitで管理できると聞いて

RundeckのジョブがGitで管理できるようになったということで使ってみました。
実際やってみたらわりとだるかったので手順をまとめておこうと思います。Rundeck自体の使い方はこちら

使うRundeckのバージョンは 2.8.2-1です。バージョンによってバグがあったりなかったりするかもしれないので注意してください。
また、人によってはいらない手順もあるはずなので各自読み飛ばしてください。

Rundeck側の設定1

この記事はDockerでRundeckを導入する記事の延長です。環境は同じものを使用しているので、同じものを使いたい人は参照してください。
Rundeckにログインしてプロジェクトがすでにあるという状態から始めます。私は「prod」と「dev」という仮想プロジェクトを作ってあります。

さて、ここからいきなりシェルの作業です。以下のようにして起動中のRundeckコンテナにログインします。

$ docker exec -it rundeck /bin/bash
root@a9cf3fd26321:/#

続いてSSHの鍵を作ります。

root@a9cf3fd26321:/# mkdir ~/.ssh/
root@a9cf3fd26321:/# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): /root/.ssh/github
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/github.
Your public key has been saved in /root/.ssh/github.pub.
The key fingerprint is:
d7:c8:a0:a6:cc:b9:a9:33:0a:b5:df:8c:4e:1c:c2:da root@a9cf3fd26321
The key's randomart image is:
+---[RSA 2048]----+
|                 |
|                 |
|        .        |
| .     . o o     |
|  + . o S + .    |
| + * =   .       |
|o E B            |
|. oo *           |
|...=* o          |
+-----------------+

今回はgithubという名前で作りました。これで秘密鍵と公開鍵のペアが作られますね。

めんどくさいですが、SSH設定もしておきましょう。

root@a9cf3fd26321:~# cat << EOL > ~/.ssh/config
> Host github.com
>     HostName github.com
>     User git
>     IdentityFile /root/.ssh/github
> EOL

ここで一旦Rundeckの作業を抜けてGitHubの設定に移ります。

GitHub側の設定

Githubにログインしている前提で話します。
大きく分けてやることは2つあります。

SSH鍵の設定

先程作った鍵をGitHubに登録します。

SSH keysに移動して先程作った公開鍵を登録します。

root@a9cf3fd26321:~/.ssh# cat ~/.ssh/github.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC/5Cj//kv3y02fj+f3ShGTk9d/gScvbq+/56HaPN/12jFUhOOayGU0qfCXcYpwP6AxtasmzDl2CNrKG5gum37IzBH7yyf5jxmxjYKtCkitwijjF3VgsB7fi+56HaCyVc1PlaItJNoKmZQYD2xXH33Jg0sZRxsYmc40DSdbBEvJtYRJxffhpUmDIPZXwjrzq8db/ohFvSIUEGTZ6glGsaRJSa4cjyi78O93jifYja26I4N062aoYViXQwo4eIOI6zGxYyofqWy2pwCNuAZV/ES24J+MSvDmfr332ulN6wNB1vQ4VpbU+YD05wqDJb3FQFTsi0zmRPEWY6NDHZgtQ8bx root@a9cf3fd26321

公開鍵は .pub拡張子がついている方です。間違えないように注意してください。

github-sshkeys

リポジトリを作る

GitHubにリポジトリを作ります。これがないとPUSHできませんからね。
特に特別な設定は不要です。今回は「rundeck-jobs」にしました。
github-create-repo

初期コミットをします。適当にREADMEを作ります。
repo-initial-commit

これでGitHub上での作業は終わりです。

Rundeck側の設定2

ここからは再度Rundeckの設定に戻ります。

KeyStorageの登録

GitHubの認証をするために、Rundeck側にも鍵設定をしなければいけません。
GitHubに登録した鍵とは違い、こちらでは秘密鍵を登録します。こんな感じで.pub拡張子がついてないほうの鍵を覗き、コピペします。

root@a9cf3fd26321:/# cat ~/.ssh/github
-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEAv+Qo//5L98tNn4/n90oRk5PXf4EnL26vv+eh2jzf9doxVITj
mshlNKnwl3GKcD+gMbWrJsw5dgjayhuYLpt+yMwR+8sn+Y8ZsY2CrQpIrcIo4xd1
YLAe34vueh2gslXNT5WiLSTaCpmUGA9sVx99yYNLGUcbGJnONA0nWwRLybWEScX3
4aVJgyD2V8I686vHW/6IRb0iFBBk2eoJRrGkSUmuHI8ou/Dvd44n2I2tuiODdOtm
qGFYl0MKOHiDiOsxsWMqH6lstqcAjbgGVfxEtuCfjErw5n6999rpTesDQdb0OFaW
1PmA9OcKgyW9xUBU7ItM5kTxFmOjQx2YLUPG8QIDAQABAoIBADGG3vorlUnwhClh
yBowWNcBOoajPAznAZ+DVmfwfFGFLmRFJEWn4U81aW59FKEiGuOZowIRhecsI+Q0
ORQWeCO1YBLf/YJQ5+3Gu2qUE+wdB9aNEHOTIXTLNhL4oKhGswYOddw2/bvspaeM
G4dlDl87bt+oVZsE347ZskWwlysJJnNEWwdK7g4I5Cw+xLpME0eOcBDtnlnQSzJP
GuDkhHMZ7qhA6NS76oJ8nv3OAs/sXgCAmm+agwE4lkrhtZdnEajeSLCIJ64tEdhI
CIepXCspGTjjYdfHHiJ/bOx7deCeGMF+7DUFHGDb0NV77ZPYNtwXzVT5RJhGr6FU
60N2f50CgYEA9yhZHJEgQYoeBzt68UOTi8CT+Q4S74MLXeKg0bxgcIplBP+l6+sP
391K3KcseeO1eLwy3i/8cNLG3c528AmumiCl375WNo3DlRBWaIlDyovVx+betBjM
dQRgYLgBXSa+XoDcSXKoVns8rtGQQygkP3ecV/ym4nW6hB6hVBk0vusCgYEAxsGk
VdVmskQ+8GzTPKf0jVbFPGVcU4m67bZmXPfLTVQosZ2fE8bNq4MXCID8sznFHJzN
vMmALwJ3jLkRmK+7layttW3jl2iy/TrKl5WC+rZxMPCd8XoIlUuZLKzZzC7csSWG
iRNLh6TH3CaXoItQj0Ep1q1ff2bP9UudaqaA8pMCgYEAn++LIrJC5kZjQhjaaM9q
5g97cboKxNTPATULDk3RNmJIFqD8FJsqzZmcvQatAD87CmL2o9L3j2bF63iUfKY3
R2ODEzNPBMRd4NMOp1zT8njkoRQj3vUBMWPgnhXURBwzKmJGqny4tCXRUesoaFzM
gAl9sW476+V1CdPsX8hj2nsCgYA2fseBJUbIIAAlyaDNY7uguSbRHXWIDh5rqPQ+
D071v9p8gJwqPvsLSKEbGsqulWtfIfsjBRiZSxLeSavyclR7gGIMebnKPNG+rsz3
bO4Bsd4tLfwQRoZt8NFpt2bsHfkytPhDQ0AVS+/kg8xVH32SGarQCq9Bbj4cooPh
xw9Z8wKBgQDT1B+zEDdVKFSwd7hZI+WN9lZ+PQPviK0UCWk0UUFxDx9/H1gDeYTp
7CQstuG6l+9uhPndbxsmTMuAMYxC4mWpI4hGWr9NCFgOPus2CxhijnfCu2d8zVNT
vtzu+07JUDTmzYQd8s8WCYAd96x4SbwmyHKZBWJV/TRHAmKxDHWMsw==
-----END RSA PRIVATE KEY-----

※本来であれば、秘密鍵は絶対に見せちゃいけません。当方GitHubの対応公開鍵からは既に削除済みなので上記は利用できません。

Rundeckの設定画面からKeyStorageに移動し、
key-storage1

以下のように鍵を登録します。
key-storage2

あとで気づきましたが「Storage path」は多分空でいいです..
KeyStorageは全プロジェクトで共通なので一度設定すればOKです。

ユーザプロフィールの設定

右上の設定画面からユーザプロフィールに移動してプロフィールを更新します。

user_profile

これがGitのコミッター情報になるため、入力しないとエラーになります。

SCM Export could not be performed
Required user info field was not set: committerName
× Please update Your User Profile and enter the missing values.

SCM設定

さて、いよいよGitの設定に移ります。
scm-top

SCMの設定ページから「Git Export」「Git Import」をそれぞれ開き「Git Repository」セクションを以下のように設定します。
設定項目は多分同じです。重要な項目を説明してきます。書いてないところはデフォルト値でいいっす。

Base Directory

ローカルのリポジトリを配置するディレクトリパスです。
おそらく複数のプロジェクトのローカルリポジトリを一箇所に集約させたいと考えている方もいるかと思いますが、残念ながらできません。重複したディレクトリパスは弾かれるようになっています。

The base directory is already in use by another project: prod

なのでここはデフォルトのままでいいです。勝手に各プロジェクトディレクトリ配下の「scm」というディレクトリに置かれます。

Git URL

これはリポジトリのURIです。当たり前ですが自分のリポジトリを指定してください。
以下のように調べられます。
ssh-uri

Branch

複数のプロジェクトを一つのGitHubリポジトリに登録させたいと考えている方はここの入力は必須です。
異なるローカルリポジトリが同じブランチ(例えばmaster)を見て同期をとることは不可能だからです。
今回は「prod」と「dev」のようにブランチを分けることにします。画像はprodのGit設定なのでブランチは「prod」となっています。

SSH Strict Host Key Checking

「yes」にしてると

Failed cloning the repository from git@github.com:righ/rundeck_jobs.git: git@github.com:righ/rundeck_jobs.git: reject HostKey: github.com

と言われるので外す。原因は調べてないです(`・ω・´)

SSH Key Storage Path

SSHの認証で使う鍵を指定します。KeyStorageで登録した鍵を覚えていますか?あれを指定します。
git-settings

全て終わったら「SetUp」を入力すると設定は完了です。Gitの除外設定画面が後に出てくるかもしれませんが、わからない人は無視して進めればいいです。

有効にしたいときは「Enable」ボタンを押します。

ちなみに以下のように言われた人は鍵の設定が間違っています。

Failed fetch from the repository: git@github.com:righ/rundeck_jobs.git: Auth fail

さて、これで終わりだと思いましたか?残念、まだです。続いてコンソールからリポジトリをいじります。

パスをデフォルトにした人は「/var/rundeck/projects/${プロジェクト名}/scm」にローカルリポジトリがあります。
じゃあ「prod」プロジェクトの設定をするために移動します。

$ cd /var/rundeck/projects/prod/scm

Rundeck設定3

やることは3つです。

初期コミットの取込

一番最初にREADMEをいじってファーストコミットしましたね。あれを取り込まないと親が辿れなくてPUSHできません。

以下のようにします。

root@a9cf3fd26321:/var/rundeck/projects/prod/scm# git pull origin master
From github.com:righ/rundeck_jobs
 * branch            master     -> FETCH_HEAD

SSHの設定が間違っていなければ問題なくできるはず。

これをしないと、PUSH時に以下のようなエラーが出ます。

Some updates failed: [RemoteRefUpdate[remoteName=refs/heads/master, REJECTED_NONFASTFORWARD, (null)...a3086ff168457adfa5cacfab7ae8eac85a18e451, srcRef=refs/heads/master, message=null]]

ブランチの作成

さっき、SCMのブランチ設定で「prod」を指定しましたね。
なので勝手にprodブランチが作られてくれると思っちゃうんですが、残念ながらカレントブランチに作られます。大抵は「master」のはずです。
これでは困るのでブランチを作ってチェックアウトします。

root@a9cf3fd26321:/var/rundeck/projects/prod/scm# git checkout -b prod
Switched to a new branch 'prod'

権限の変更

ここは人によっていらなかったりすると思いますが、今までの操作をroot権限で行ってきた私と同じような人は、作業が必要です。
chownコマンドで所有者を変えます。

root@a9cf3fd26321:/var/rundeck/projects/prod/scm# chown -R rundeck:rundeck .

これをしないとコミットしたときに以下のように言われるはず。

/var/rundeck/projects/prod/scm/.git/logs/refs/heads/prod (Permission denied)

お疲れ様です。これで設定は終わったはずなので次のページで使ってみましょう。

1 2