Rundeckで作成したジョブ定義を、GitHubでバージョン管理できるようにします
本記事の概要
RundeckからGitHubへのエクスポート機能の利用方法について書いています
このエクスポート機能により、Rundeckで作成したジョブ定義をGitHubにバックアップが取れるようになります
なお、別環境への移行などを目的としたインポート機能もありますが、ひとまずはこのエクスポート機能が使えるようになれば、設定方法は概ね同じですのでわかると思います
前提
- GitHubアカウントを有すること
- 構築済みのRundeck実行環境があること
本記事で作成する情報
- GitHub
- Rundeck用のリポジトリ
- Personal Access Token
- Rundeck
- Account Profile(GitHubのアカウント名を設定する)
- Key Storage(GitHub Personal Access Tokenを登録する)
- Projectの新規作成
- ジョブの新規作成
GitHub側の準備
リポジトリを作成する
実運用を意識して次のようにしました(お試しであれば何でも構いません)
作成したら、リポジトリのURLを控えておきます
Personal Access Tokenを生成する
Rundeckで使用するPersonal Access Tokenを生成します
-
Token設定ページ
- 権限はrepoのみ
- 生成直後に表示されるトークン情報を後で使用するため控えておく
Rundeck環境を構築する
Rundeck環境の構築は別の記事を参考にしてください
Rundeck側の準備
ログインアカウント情報を変更する
画面右上のProfileからアカウント情報を変更します
それぞれGitHubで使用している情報を入力してください
GitHub Personal Access Tokenを登録する
GitHub側の準備で生成したGitHub Personal Access TokenをRundeckに登録します
- 画面右上のギアマークから
Key Storage
を選択する
-
Add or Upload a Key
を選択する
- GitHub Personal Access Tokenを入力する
※Key Type以外はわかりやすければ何でもよい
プロジェクトを作成する
プロジェクトを作成します
プロジェクト作成時にいくつか設定が可能ですが、今回は名前だけ付けて作成します
SCMの設定をする
SCMとは、Source Control Managementの略でGitやSVNなどのことです
今回はGitを使いますので次のように設定します
SCMの設定内容
SCMに設定する内容のうち、変更箇所のみ説明します
- Commiter Name:
${user.firstName}
- Git Repository
- Synchronize Automatically:
true
- Create Branch if it doesn't exist: (チェックをつける)
- Base branch on:
main
- Git URL:
https://<GitHubアカウント名>@github.com/<GitHubリポジトリ名>.git
- GitHubのURLに、
<GitHubアカウント名>@
を付ける
- GitHubのURLに、
- Branch:
rundeck
- Synchronize Automatically:
- Job Source Files
- File Path Template:
rundeck/jobs/${job.project}/${job.group}${job.name}
- Format:
yaml
- File Path Template:
- Authentication
- SSH: Strict Host Key Checking:
no
- Password Storage Path: (Rundeckに登録したGitHubのPersonal Access Token)
- SSH: Strict Host Key Checking:
File Path Template
の設定をこの通りにすると、ジョブ名を一意にしなければなりません
分かりやすさを重視してUUIDを使用しない設定にしています
※Rundeckでジョブを作成するときにジョブ名の一意性を意識したくなければ、${job.id}
を使用してください
設定すると、git cloneが実行されてRundeck側にローカルリポジトリができます
root@rundeck-vm:/var/lib/rundeck/projects/aki-nasu-prj-03/ScmExport# ls -la
total 16
drwxrwxr-x 3 rundeck rundeck 4096 Aug 21 02:17 .
drwxrwxr-x 3 rundeck rundeck 4096 Aug 21 02:17 ..
drwxrwxr-x 7 rundeck rundeck 4096 Aug 21 02:17 .git
-rw-rw-r-- 1 rundeck rundeck 15 Aug 21 02:17 README.md
ジョブを作成、GitHubにpushする
設定は以上となります。ここでは実際にジョブを作成して確認します
SCMの設定をすると、!
マークがジョブ名のところに付くようになります
commitやpushしていないなどの状態を示します(カーソルを合わせるとTooltipが表示されます)
- ジョブを作成する(何でも構いません)
-
Action
>SCM Export Plugin
>Commit Changes to Git
を選択する
- gitのローカルリポジトリにCommit、リモートリポジトリにもPushする
メモ: Commit時にエラー
Commit時にエラー No changes to local git repo need to be exported
が出るこ
とがあります。その後、ジョブを微修正して再度1つずつコミットしたら問題なくCommit&Pushができました
再度検証しなければ確定できませんが、以下のようなことをご参考にしてください。
Rundeck内で一意性のチェックをしているためエラーになっているような動きをしているような気がします。
- 別のジョブグループでも同名のジョブが存在するとエラーになる
- SCM設定:
Export UUID Behavior
をremove
にしたほうがよい?
設定結果の確認
GitHubのリモートリポジトリにPushできていることを確認する
確認のため、GitHub側を見に行きます
※試行錯誤のためコミットメッセージなどはテキトウになってます
SCMの設定で記述した、File Path Template
の値がパス、ファイル名に使用されていることがわかります
おわりに
GitHubにRundeck上からジョブ定義をPushできるのは便利です。前回からの差分がでていることもGUIで確認することができます
また、ジョブの定義はXMLかYAML形式を選んで作成できる点もよいかとおもいます
間違っている点やわからない点がありましたらコメントをお願いいたします
追記
SCMの設定は個人のアカウントとGitHub Tokenを使用していますが、コミッターは上述の設定にしておけば反映されるのでチーム開発もひとまず問題なくできそうです
参考ドキュメント
https://docs.rundeck.com/docs/manual/projects/scm/
https://docs.rundeck.com/docs/manual/projects/scm/git.html