1
1

More than 1 year has passed since last update.

RundeckのGitHub連携(エクスポート機能)

Last updated at Posted at 2022-08-21

Rundeckで作成したジョブ定義を、GitHubでバージョン管理できるようにします

本記事の概要

RundeckからGitHubへのエクスポート機能の利用方法について書いています
このエクスポート機能により、Rundeckで作成したジョブ定義をGitHubにバックアップが取れるようになります
なお、別環境への移行などを目的としたインポート機能もありますが、ひとまずはこのエクスポート機能が使えるようになれば、設定方法は概ね同じですのでわかると思います

前提

本記事で作成する情報

  • GitHub
    • Rundeck用のリポジトリ
    • Personal Access Token
  • Rundeck
    • Account Profile(GitHubのアカウント名を設定する)
    • Key Storage(GitHub Personal Access Tokenを登録する)
    • Projectの新規作成
      • ジョブの新規作成

GitHub側の準備

リポジトリを作成する

実運用を意識して次のようにしました(お試しであれば何でも構いません)
作成したら、リポジトリのURLを控えておきます

  • リポジトリ: my-automation を作成する
  • ブランチ: rundeck を作成する

Personal Access Tokenを生成する

Rundeckで使用するPersonal Access Tokenを生成します

  • Token設定ページ
    • 権限はrepoのみ
    • 生成直後に表示されるトークン情報を後で使用するため控えておく

Rundeck環境を構築する

Rundeck環境の構築は別の記事を参考にしてください

Rundeck側の準備

ログインアカウント情報を変更する

画面右上のProfileからアカウント情報を変更します

  • Profileを選択する

それぞれGitHubで使用している情報を入力してください

  • Email : GitHubで使用しているメールアドレス
  • First Name : GitHubで使用しているアカウント名

GitHub Personal Access Tokenを登録する

GitHub側の準備で生成したGitHub Personal Access TokenをRundeckに登録します

  • 画面右上のギアマークからKey Storageを選択する
  • Add or Upload a Keyを選択する
  • GitHub Personal Access Tokenを入力する
    ※Key Type以外はわかりやすければ何でもよい
    • Key Type : Password
    • Storage Path : git-token
    • Name : <GitHub UserName>

プロジェクトを作成する

プロジェクトを作成します
プロジェクト作成時にいくつか設定が可能ですが、今回は名前だけ付けて作成します

SCMの設定をする

SCMとは、Source Control Managementの略でGitやSVNなどのことです
今回はGitを使いますので次のように設定します

  • 画面左下の PROJECT SETTINGSSETUP SCMを選択する
  • SCM ExportSetupを選択する

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アカウント名>@を付ける
    • Branch: rundeck
  • Job Source Files
    • File Path Template: rundeck/jobs/${job.project}/${job.group}${job.name}
    • Format: yaml
  • Authentication
    • SSH: Strict Host Key Checking: no
    • Password Storage Path: (Rundeckに登録したGitHubのPersonal Access Token)

SCMの設定イメージ
image.png
image.png

:warning: 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 Message: コミットメッセージを入力する
    • Push Remotely?: Trueを選択する(リモートリポジトリにPushする)

メモ: Commit時にエラー

Commit時にエラー No changes to local git repo need to be exported が出るこ
とがあります。その後、ジョブを微修正して再度1つずつコミットしたら問題なくCommit&Pushができました
再度検証しなければ確定できませんが、以下のようなことをご参考にしてください。
Rundeck内で一意性のチェックをしているためエラーになっているような動きをしているような気がします。

  • 別のジョブグループでも同名のジョブが存在するとエラーになる
  • SCM設定: Export UUID Behaviorremoveにしたほうがよい?

設定結果の確認

GitHubのリモートリポジトリにPushできていることを確認する

確認のため、GitHub側を見に行きます
※試行錯誤のためコミットメッセージなどはテキトウになってます

SCMの設定で記述した、File Path Templateの値がパス、ファイル名に使用されていることがわかります

おわりに

GitHubにRundeck上からジョブ定義をPushできるのは便利です。前回からの差分がでていることもGUIで確認することができます
また、ジョブの定義はXMLかYAML形式を選んで作成できる点もよいかとおもいます
間違っている点やわからない点がありましたらコメントをお願いいたします

追記

SCMの設定は個人のアカウントとGitHub Tokenを使用していますが、コミッターは上述の設定にしておけば反映されるのでチーム開発もひとまず問題なくできそうです
image.png

参考ドキュメント

https://docs.rundeck.com/docs/manual/projects/scm/
https://docs.rundeck.com/docs/manual/projects/scm/git.html

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1