Windows環境のBitnamiでRedmine/Git連携(統合認証)

このドキュメントでは、Windows環境のBitnamiでGit認証をRedmine認証に統合する設定をついて記述します。 また、Redmine・Gitの認証先をLDAP(Active Diretory)に統合する設定についても記述します。
他の同様の記事はかなり以前のもので、またほとんどLinux環境について書かれたものでした。Windows環境については情報が乏しいようでしたので、本情報が役にたつ人がいましたら幸いです。
ただ、Redmine/Git連携の場合、Pull Request機能が無いので、現在はあまり用いられていないのではないかという気もしています。

環境

  • Windows Server 2019
  • Bitnami v4.1.0-0
    • Redmine v4.1.0.stable
    • Ruby v2.5.7-p206 (2019-10-01) [x64-mingw32]
    • Rails v5.2.4.1
    • Git v2.19.1
  • Perl関連
    • Strawberry Perl v5.28.0.1
    • mod_perl v2.0.10-strawberryperl-5.28.0.1-64bit
  • LDAP
    • Windows Server 2019 Active Directory

Bitnami導入

ダウンロード

以下URLからインストーラをダウンロードします。

※2023/09/23追記
どうやらBitnami RedmineはWindowsもLinuxもインストーラーバイナリファイルの配布が終了してしまったようです。
[On my Computer]は"Virtual Machines"しか選択できなくなっています。
古いバージョンで良いのでダウンロードしたいという人には、以下のURLが参考になります。

a1-style.net

私が確認できたバイナリファイルのダウンロードリンクを以下に記載しておこうと思います。(※私が個人で公開しているとかでは無く、Bitnami公式のURLからのダウンロードですので安心です。いつまで公開されているかわかりませんが。。。)
■Linux
- v4.1.0-9
- v4.2.1-0
- v4.2.1-3
■Windows
- v4.1.0-8
- v4.1.1-7
- v4.2.3-4
- v5.0.0-2
- v5.0.3-0

インストール

ダウンロードしたインストーラを実行し、ウィザードに従いインストールします。 このドキュメントでは、インストールディレクトリを以下に変更しています。

  • C:\Prg\Bitnami\redmine-4.1.0-0

Redmine/Git統合認証

Redmine/Git連携設定(Redmine管理画面)

Gitリポジトリ作成

今後の作業で使用するGitコマンドは、Bitnamiに同梱されているものを使用します。 Gitコマンドは以下にインストールされています。

  • C:\Prg\Bitnami\redmine-4.1.0-0\git\bin\git.exe

Gitリポジトリのフォルダを作成

Gitリポジトリを格納するルートフォルダを作成します。 本ドキュメントでは以下フォルダを作成します。

  • C:\Prg\Bitnami\git_repos

GitのBareリポジトリ作成

PowerShellで以下のコマンドを実行し、GitのBareリポジトリを作成します。 ここでは「testgit01」というリポジトリを作成しています。

cd C:\Prg\Bitnami\git_repos
C:\Prg\Bitnami\redmine-4.1.0-0\git\bin\git init --bare --shared testgit01
cd testgit01
C:\Prg\Bitnami\redmine-4.1.0-0\git\bin\git update-server-info

Gitリポジトリへの追加設定

続けてPowerShellで以下を実行します。

C:\Prg\Bitnami\redmine-4.1.0-0\git\bin\git config http.receivepack true
C:\Prg\Bitnami\redmine-4.1.0-0\git\bin\git config --system core.quotepath false

1つ目のコマンドは「Git Pushを許可する設定」、2つ目のコマンドは「日本語ファイル名を表示する設定」となります。

RedmineにGitリポジトリを登録

Git管理用Redmineプロジェクト作成

Redmineで、Gitリポジトリを管理する用のプロジェクトを作成します。 その際、プロジェクトの識別子は前手順で作成したGitリポジトリのリポジトリ名(本手順では「testgit01」)にします。

  • 設定内容
項目 設定値 備考
名称 testgit01 任意の名前
識別子 testgit01 管理するGitリポジトリ名
公開
モジュール リポジトリ

Git管理用Redmineプロジェクト設定

Git管理用Redmineプロジェクトの設定で、新しいリポジトリ追加の設定をします。

  • 設定内容
項目 設定値 備考
バージョン管理システム Git
メインリポジトリ 1つ目のリポジトリなのでメインに設定
識別子 testgit01 任意の名前
リポジトリパス C:\Prg\Bitnami\git_repos\testgit01
ファイルとディレクトリの最新コミットを表示する

Gitアクセス用ロールを作成

Gitへのアクセス権管理をRedmineで実施するため、Gitロールを作成します。

  • Git更新権限ロール
    • リポジトリ権限
      • 更新履歴の閲覧
      • リポジトリの閲覧
      • コミット権限
      • リビジョンとチケットの関連の管理

  • Git参照権限ロール
    • リポジトリ権限
      • 更新履歴の閲覧
      • リポジトリの閲覧

Gitアクセス用ロール権限を付与したユーザーをプロジェクトメンバーとして登録

テスト用に以下2つのユーザーをプロジェクトメンバーとして登録します。 その際先ほど作成したGitアクセス用ロールを付与します。

  • test01:Git更新権限ロール
  • test02:Git参照権限ロール

Redmine/Git連携設定(設定ファイル)

事前準備(Perl環境)

Strawberry Perl

Git認証をRedmine認証に統合するモジュールはPerlで動作するため、インストールします。 Windows版Bitnamiのインストールフォルダ配下を「Perl.exe」で検索すると一応存在するのですが、Perlの追加モジュールを導入する方法がわからなかったので、Perlは別途インストールしました。

ダウンロード

以下URLからインストーラをダウンロードします。この際、この後の手順でインストールする「mod_perl」が対応しているバージョンを選びます。本手順では「v5.28.0.1」を使用しました。

インストール

ダウンロードしたインストーラを実行し、ウィザードに従いインストールします。 このドキュメントでは、インストールディレクトリを以下に変更しています。

  • C:\Prg\Strawberry

mod_perl

ダウンロード

以下URLからダウンロードします。今回は検証時点での最新版をダウンロードしました。 その最新版が「strawberryperl-5.28.0.1」となっていたので、前手順のstrawberryperlはv5.28.0.1をインストールしました。

インストール

ダウンロードしたzipファイルを解凍してできるフォルダを以下にコピーします。

  • Apache24の中身 → C:\Prg\Bitnami\redmine-4.1.0-0\apache2
  • Strawberryの中身 → C:\Prg\Strawberry

Git認証をRedmine認証に統合するためのファイル配置

Git認証をRedmine認証に統合する処理を行うPerl処理ファイルを所定の場所へコピーします。

  • コピー元 : C:\Prg\Bitnami\redmine-4.1.0-0\apps\redmine\htdocs\extra\svn\Redmine.pm
  • コピー先 : C:\Prg\Strawberry\perl\site\lib\Apache\Authn\Remine.pm

Redmine関連設定ファイル修正

RedmineのMySQL接続情報を確認

以下の設定ファイルを参照し、RedmineのMySQL接続情報を確認します。

  • C:\Prg\Bitnami\redmine-4.1.0-0\apps\redmine\htdocs\config\database.yml

  • 確認するDB接続情報

    • database
    • host
    • username
    • password (※導入する度に値が変わる)

Git連携用のApache設定ファイルを新規作成

Git連携用のApache設定ファイルを新規に作成します。

  • C:\Prg\Bitnami\redmine-4.1.0-0\apache2\conf\extra\httpd-git.conf

前手順で確認したMySQL接続情報は、以下の設定項目で使用します。

  • RedmineDSN
  • RedmineDbUser
  • RedmineDbPass
LoadFile C:\Prg\Strawberry\perl\bin\perl528.dll
LoadModule perl_module        modules/mod_perl.so
PerlLoadModule Apache::Authn::Redmine

# Gitリポジトリを作成するベースフォルダ
SetEnv GIT_PROJECT_ROOT C:/Prg/Bitnami/git_repos
SetEnv GIT_HTTP_EXPORT_ALL
ScriptAlias /git C:/Prg/Bitnami/redmine-4.1.0-0/git/mingw64/libexec/git-core/git-http-backend.exe

<Location /git>
  PerlAccessHandler Apache::Authn::Redmine::access_handler
  PerlAuthenHandler Apache::Authn::Redmine::authen_handler
  AuthType Basic
  AuthName Git

  # for Redmine Authentication(前手順で確認したDB情報)
  RedmineDSN "DBI:mysql:database=bitnami_redmine;host=localhost" 
  RedmineDbUser "bitnami" 
  RedmineDbPass "xxxxxxxx" 
  RedmineGitSmartHttp yes

  Require valid-user
</Location>

Git連携用のApache設定ファイルをApache本体の設定ファイルに読み込み

Apache本体の設定ファイルの末尾に、前手順で作成したGit連携用のApache設定ファイルを読み込む設定を追記します。

  • C:\Prg\Bitnami\redmine-4.1.0-0\apache2\conf\httpd.conf
Include conf/extra/httpd-git.conf

Redmine設定ファイルにGitパスを設定

以下のRedmine設定ファイルに、git.exeのパスを設定します。

  • C:\Prg\Bitnami\redmine-4.1.0-0\apps\redmine\htdocs\config\configuration.yml
default:
  scm_git_command: C:\Prg\Bitnami\redmine-4.1.0-0\git\bin\git.exe

再起動

ここまで設定をしたら、設定内容を反映させるために全体を再起動します。

Redmine/Git連携の動作確認

これまでの設定内容の動作確認をします。 本手順で作成したGitリポジトリ「testgit01」のURLは以下となります。

  • http://[host名]/git/testgit01

以下の操作をします。

  • Gitリポジトリ[testgit01]をClone
  • Cloneしてできたフォルダに、ファイルを新規作成
  • 新規作成したファイルを、ステージング環境へ追加・コミット
  • リモートリポジトリへPush
git clone http://localhost/git/testgit01
cd .\testgit01
git add *
git commit -m "test commit"
git push

pushをした際に、認証画面が表示されます。編集権限を保持しているRedmineユーザー[test01]でログインすると、Pushが正常に完了します。 この際、パスワードはRedmineのパスワードを使用します。

参照権限しか保持していないtest02ユーザーでログインすると、Pushでエラーが発生します。

Gitへのログイン情報は、Windowsの資格情報マネージャーに登録されます。

LDAP認証統合

LDAP認証設定

Redmineの認証をLDAPにした際、Git認証も同じLDAP認証にする方法を記載します。

事前準備

  • LDAP環境を用意
    • 本手順ではActive Directory 2019を使用
  • LDAPにRedmineユーザーを格納するベースDNを作成
    • 本手順では[OU=redmine,DC=testdomain,DC=local]
  • LDAPに、Redmineが検索を実行するためのシステムアカウントを作成
    • 本手順ではベースDN配下に[redmine]ユーザーを作成

RedmineにLDAP認証設定を追加

Redmine管理画面の[LDAP認証]から、認証先として使用するLDAPを登録します。

Perl追加モジュールの導入

Strawberry Perl環境にLDAP認証モジュール「Authen::Simple::LDAP」をインストールします。PowerShellにて以下のコマンドを実行します。

cpan install Authen::Simple::LDAP

Apache設定ファイルの修正

以下のファイルにLDAP認証に関する設定を追記します。

  • C:\Prg\Bitnami\redmine-4.1.0-0\apache2\conf\extra\httpd-git.conf
PerlLoadModule Authen::Simple::LDAP

Apache再起動

設定を反映させるためにApacheを再起動します。

Redmine/Git連携(LDAP認証)の動作確認

ADユーザー登録

RedmineにLDAP設定をした際に設定したベースDN配下にテスト用ユーザー[test03]を作成します。 この際、以下の情報は、Redmineユーザーの必須入力項目となっているため、必ず登録をする必要があります。

  • ユーザーログオン名
  • 電子メール

Redmineユーザー登録

ADに登録した[test03]ユーザーをRedmineに登録します。 ユーザー登録画面の[ログインID]で[test]と入力するとADが検索されて候補のユーザーが表示されますので、[test03]を選択します。AD登録時に設定した属性が画面に自動入力されます。

その後、[test03]ユーザーのプロジェクト設定で、Git管理用Redmineプロジェクト[testgit01]を追加します。

Gitリポジトリへの認証確認

以下コマンドを実行し、Git認証画面を表示させ、[test03]ユーザーでログインできることを確認します。

git push

認証画面が表示されるので[test03]ユーザーでログインします。

認証が成功すれば動作確認完了です。 LDAP認証したユーザーも、認証情報はWindowsの資格情報マネージャーに登録されます。

GitコミットとRedmineチケット連携

Gitコミットコメントで、[refs #チケットNo]と書くと、RedmineのチケットにGitコミットが関連付けられます。 Git Pushしたときに即時に関連付けるには、以下の手順を実施します。

Gitと連携するRedmineプロジェクトの設定

Remineプロジェクトの設定画面の「リポジトリ」タブを表示し、Gitリポジトリを登録します。

  • 設定内容
項目 設定値 備考
バージョン管理システム Git
メインリポジトリ 1つ目のリポジトリなのでメインに設定
識別子 testgit01 任意の名前
リポジトリパス C:\Prg\Bitnami\git_repos\testgit01
ファイルとディレクトリの最新コミットを表示する

リポジトリAPIキーの設定

Redmine管理画面の[リポジトリ]タブで、APIキーを設定し保存します。
※[キーの生成]をクリックするとランダムな文字列が生成されます。

[post-receive]ファイルの作成

Git PushしたときにGitコミットとRedmineチケットを関連付ける処理を記載します。
このファイルは、Gitリポジトリフォルダ内の[hook]フォルダ内に作成します。本書で作成した「testgit01」リポジトリの場合は以下となります。

  • C:\Prg\Bitnami\git_repos\testgit01\hooks\post-receive

Linux環境の場合、このファイルはBashで書く例がたくさんあったが、Windows環境だと謎のエラーが発生し動作しませんでした。
その為、以下のようにPerlスクリプトとして記述すると想定通りの動きをしました。

#!/usr/bin/perl
system "curl -s http://localhost/redmine/sys/fetch_changesets?key=Dz5d2ipRokWxmVlvPlJo"

動作確認

Gitコミットで[refs #チケット番号]をコメントに含めます。

Redmineチケットに以下のように表示されます。

備考

[post-receive]ファイルをBashで書いた時に起きたエラー

[post-receive]ファイルをBashで書いた時のエラーメッセージを念のため書いておきます。

remote:       0 [main] bash 7172 C:\Prg\Bitnami\redmine-4.1.0-0\git\bin\..\usr\bin\bash.exe: *** fatal error - add_item ("\??\C:\Prg\Bitnami\redmine-4.1.0-0\git", "/", ...) failed, errno 1
remote: Stack trace:
remote: Frame        Function    Args
remote: 000FFFF9BC0  0018005E0DE (0018025366A, 00180230C39, 00600010000, 000FFFF8B40)
remote: 000FFFF9BC0  001800468F9 (000FFFFAC0C, 000FFFF9BC0, 00000000000, 00000000000)
remote: 000FFFF9BC0  00180046932 (000FFFF9BC0, 00000000001, 00600010000, 505C3A435C3F3F5C)
remote: 000FFFF9BC0  001800CD2CB (00000000000, 00000000000, 00000000000, 00000000000)
remote: 1D5D9721DAB2A6A  0018011BF95 (001800B463C, 00000000000, 00000000000, 00000000000)
remote: 000FFFFCCD0  00180046EF3 (00000000000, 00000000000, 00000000000, 00000000000)
remote: 00000000000  00180045A03 (00000000000, 00000000000, 00000000000, 00000000000)
remote: 000FFFFFFF0  00180045AB4 (00000000000, 00000000000, 00000000000, 00000000000)
remote: End of stack trace