2017-05-29

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

RundeckのジョブがGitで管理できるようになったということで使ってみました。

実際やってみたらわりとだるかったので手順をまとめておこうと思います。 Rundeck自体の使い方は こちら

使うRundeckのバージョンは 2.8.2-1 です。 バージョンによってバグがあったりなかったりするかもしれないので注意してください。

また、人によってはいらない手順もあるはずなので各自読み飛ばしてください。

Rundeck側の設定1

この記事はDockerでRundeckを導入する記事の延長です。 そんなスケジューラで大丈夫か? Rundeck超入門(基礎編)https://note.crohaco.net/2015/rundeck-basic/

環境は同じものを使用しているので、同じものを使いたい人は参照してください。

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にリポジトリを作ります。これがないとPUSHできませんからね。

特に特別な設定は不要です。今回は「rundeck-jobs」にしました。

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

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

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

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

あとで気づきましたが Storage path は多分空でいいです..

KeyStorage は全プロジェクトで共通なので一度設定すればOKです。

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

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

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

error
  • 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の設定ページから Git Export, Git Import をそれぞれ開き Git Repository セクションを以下のように設定します。

設定項目は多分同じです。重要な項目を説明してきます。書いてないところはデフォルト値でいいっす。

Base Directory

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

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

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

Git URL

これはリポジトリのURIです。当たり前ですが自分のリポジトリを指定してください。

GitHub を使っている場合は 以下のように調べられます。

Branch

複数のプロジェクトを一つのGitHubリポジトリに登録させたいと考えている方はここの入力は必須です。

異なるローカルリポジトリが同じブランチ(例えばmaster)を見て同期をとることは不可能だからです。

今回は「prod」と「dev」のようにブランチを分けることにします。画像はprodのGit設定なのでブランチは「prod」となっています。

SSH Strict Host Key Checking

「yes」にしてると

error

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

SSH Key Storage Path

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

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

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

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

error
  • 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時に以下のようなエラーが出ます。

error
  • 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 .

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

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

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

SCM機能を使ってみる

コミット & PUSH

適当にジョブを作ってアクション的なプルダウンを開くと、 Commit Changes to Git があるのでクリックします。

コミット対象のファイルにチェックを入れ、コミットメッセージを入力して、Commitを押します。

Push Remotely? にチェックが入っているとコミットした瞬間にPUSHされます。

ここでPUSHしなくても Job Actions のプルダウンからPUSHできるので安心してください。 Tagの設定なども行えますがわからない人は無視していいです。

PUSHに成功するとこんな感じ。

同じようにdevにもジョブを作ってPUSH。GitHubにちゃんとブランチも作られてました。

コミットをもとにロールバックする

今回の本丸です。これができなければ上記をやってきた意味がありませんね。 たとえば、説明文を「aaaa」に変えてしまったとします。

(差分 [Diff Changes] から閲覧できます)

この状態から戻すには「Import RemoteChanges」です。

から戻すべきファイルを選択して、「Import」。 これで元に戻りました。

たとえ、ジョブを削除してしまった場合でも、差分は出るので同じように元に戻せます。

以上です。お疲れ様でした。