GitHubとRedmineを連携させてチケット管理を楽にする方法

オンラインコンサルタントの直井です(^^♪

4月になり、寒暖差がとても激しいですが、いかがお過ごしでしょうか!(^^)!
冬用のアウターを完全に収納してしまったので、仕事の行はまだしも、帰りに凍えながら通勤しています(T_T)

さて、今回は表題の通りチケット管理をもっと楽に!というテーマでお話できればと思います。


チケット閉じ忘れ問題

「 問題が発生した!チケット作ろう! 」と考えチケットを追加してくれる方はかなりいらっしゃるのですが、それを終了にすることを忘れがちです….なので、「本当は終わっている」のに終了になっていないチケットが多数存在していました。

それによって、同じ意味のチケットが2つ以上存在してしまったり..なんてことも…

遠足でよく聞くフレーズのように、「チケットを閉じるまでが修正」これを開発メンバー全員に毎日チャットで送れば少しは改善するかもしれません。
しかし、こんな非効率的なことをしても互いにうっとおしいだけで、またチケットが閉じられなくなる日が目に見えています。


チケットとGitを連携させる

どうすれば、チケットの閉じ忘れが解消されるか?

修正は、いずれ origin/main ブランチにマージされます。
それは、チケットが終了したことを意味します。
ということは….
「 origin/mainにマージされた内容(コミットメッセージ等)にチケット番号があればそのチケットは終了 」にすればいいのでは?

そう考えた我々はアマゾンの奥地へ向かった…


1. 環境

1 Git(remote)
・GitHub
2 チケット管理
・Redmine( 4.1.1.stable )

今回は上記のような構成でお送りします。バージョンなどの違いで少し手順が変わっているかもしれません。

また、プラグインを導入する際に、うまくインストールできない場合があると思います。その際は、下記リンクの記事を参照ください。
https://oc-technote.com/%e6%a5%ad%e5%8b%99%e5%8a%b9%e7%8e%87up/redmine%e3%81%ab%e3%83%97%e3%83%a9%e3%82%b0%e3%82%a4%e3%83%b3%e3%82%92%e5%85%a5%e3%82%8c%e3%82%8b%ef%bc%81/


2. 手順

2 – 1 redmine_github_hookについて

今回利用するプラグインは「 redmine_github_hook 」です。
こちらのプラグインがどのように動作するか、簡単に説明すると下記のような形です。

①:プラグインを発火させるためのURLを踏む
②:git fetchでリモートリポジトリとプラグイン内部にあるローカルリポジトリを同期
③:コミット内容を読み込んで、チケットのアクションを実行(終了や関連付け)

サクッと①を行うことで自動的に②、③が実行されます。詳しいライフサイクルはこちら

なんて便利なプラグインなのでしょうか!デフォルトで入っていてもいいような気がしますが…
しかし、今回実現したいことをやろうとするといまいちな箇所があります。

・②を実行すると、developや開発途中のリモートブランチなどの変更も読み取って終了になってしまう(git fetchですべてのブランチの変更をくみ取るため)


2 – 2 Redmineにプラグインを追加

redmineアプリディレクトリのpluginsディレクトリ配下にプラグインファイルを配置します。(bitnamiスタックの場合「~/stack/apps/redmine/htdocs/plugins」の可能性が高いです。)
また、今回使用するプラグインは「redmine_github_hook」ですが、ほかのプラグインも同様の手順でインストールすることができます。

今回、マスターにブランチにマージされた内容だけをくみ取りたいので、下記URLからプラグインを追加
https://github.com/asurann123/redmine_github_hook

git clone https://github.com/asurann123/redmine_github_hook.git

このリポジトリで変更している箇所は、「app/services/github_hook/updater.rb」の最下部にある関数を変更しています。環境によってはmainブランチだったりするかもしれないので、適宜変更をお願いします。(Gitがうまく吸収してくれる可能性あるかも?)

ここまで来たら、後はreadmeにある内容の通りです。

アプリケーションのトップディレクトリに戻っておく(bitnamiの場合)

cd ~/stack/apps/redmine/htdocs/

gem追加

gem "redmine_github_hook"

インストール

 bundle install --no-deployment

マイグレーション

 bundle exec rake redmine:plugins:migrate RAILS_ENV=production

再起動(bitnamiの場合)

sudo /opt/bitnami/ctlscript.sh restart

2 – 3 プラグイン用にリポジトリをclone

bareオプションを追加して適当な場所にリポジトリをクローン

 git clone --bare <Repos URL or SSH>

リモートを追加

git remote add origin <Repos URL or SSH>

2 – 4 プロジェクトにリポジトリを設定

プロジェクトの「設定」から「リポジトリ」を選択し、「新しいリポジトリ」をクリック

先ほどクローンしたpathを入力する。メインであればメインにチェックし、識別子があると後々わかりやすいが、記入しなくてもいい

2 – 5 発火URLの設定

ここまででとりあえずGitとRedmineの連携設定は完了です。しかし、動作させるには発火URLを踏む必要があります。

ほかのサイトを参考にすると、Github Actionsを利用したりしています。
今回は、デプロイの1セクションにこれを追加しようと思います。

簡単にPythonファイルを作成して、デプロイのお好きなタイミングにこのPythonファイルを実行するだけです。AWSをご利用の場合、CodePiplineなどを利用されていると思いますので、その間にLambdaで発火させるだけです。


import requests

response = requests.post('https://<your domain>/github_hook?project_id=<project_id>',params={"project_id":"<project_id>"})

3 . 最後に

かなり超大作になってしまいました💦しかし、同じような内容でお困りの方が少しでも参考になればと思います。

一年前に作業した内容なので、もしかすると情報が古い可能性があります。

次回は、「 コミットメッセージにチケット番号がない場合に警告を出すGithook 」編でお会いしましょう!

VS Codeで拡張機能がONにならないときの対処法

最近、VS Codeの調子が悪くダイアログ下部に「拡張機能をアクティブ化しています」と表示されるものの、数秒で消え有効化されない事象が発生していました。

中々解決できず、アンインストールとインストールを繰り返したり面倒なことをやっていました。


解決方法

①:「ctrl」 + 「shift」+ 「P」で「拡張機能が無効な状態での再読み込み」を行う

②:ウィンドが再読み込みされたら、 「ctrl」 + 「shift」+ 「P」で 「拡張機能の再起動」

③:右下に出ている「拡張機能を有効にして再読み込み」をクリック


現行バージョン(1.65.2)ではこれで問題なく動作します。

Git HooksでDocker内を操作したい

はじめに

ブランチ切り替えた時に「composer dump-autoload」が出来たら便利なんじゃないか?とふと思ったので、Git Hooksを使ってやってみようと思った次第です。

やってみよう

① プロジェクトのgitconfigを設定してhooksを使えるようにしよう!

/project/.git/configにhooksの情報を記述
・coreセクションにhookspathを設定

[core]
    ~(略)~
    hookspath=.git/hooks ←新たに追加
[remote "origin"]
    ~(略)~

② 何をhookするか決めよう!

/project/.git/hooks/には様々なgitアクションをhookできるようになっています。今回は、ブランチ切り替えた時なので「post-checkout」を編集もしくは、新規作成します。

他にhookできる内容は下記リンクを参照ください。
https://git-scm.com/book/ja/v2/Git-%E3%81%AE%E3%82%AB%E3%82%B9%E3%82%BF%E3%83%9E%E3%82%A4%E3%82%BA-Git-%E3%83%95%E3%83%83%E3%82%AF

③ 処理を書こう!

②の手順で用意した 「 post-checkout 」に直接記載します。

※windows環境で作成しています

#!/bin/sh
powershell.exe -NoProfile -ExecutionPolicy Bypass -Command "docker exec -i [container-name] bash -c \"composer dump-autoload\""

dockerに入って何かするってのがうまくいかなかったので、powershellを経由してdockerに入り、-cでうまくコマンドを渡してやるって感じです。

最後に

色々できそうなので、あれしたいっすね!
共有とか!コミットをフックしたりとか!

WP自前のルート証明書を更新する

発端

ある日、WPから外部システムへ連携するプラグインが動いていないことに気が付きました….
正直、そこら辺を変更した記録もないし、タイミングがよくわからず…..

該当のプラグインでAPIの設定をテストできる項目があったので、ありがたくテストしたところ下記メッセージが表示されていました。
cURL error 60: SSL certificate problem: certificate has expired
内心「なんでー??この前の2021/10/1で終わりじゃなかったのかよ」と叫びながら調査しました。

いろいろ調べた結果、WordPressには内部に独自のルート証明書を持っているそうです….とんだお節介野郎め….
なので、OSレベルのルート証明書を更新してもWP内のプラグインで利用されるcURLではそちらは利用されません。なので「
/wp-includes/certificates/ca-bundle.crt 」を更新する必要があります。


対処

① 新しい 「ca-bundle.crt」を取得
 → このca-bundle.crt が古いためエラーが出ているので新しくする。

wget https://raw.githubusercontent.com/WordPress/WordPress/master/wp-includes/certificates/ca-bundle.crt

② 「 /wp-includes/certificates/ca-bundle.crt 」を①でダウンロードした「
ca-bundle.crt 」に更新する
  →単純にコピーで上書きする

cp -b -i ca-bundle.crt /wp-includes/certificates/ca-bundle.crt 

-b:上書きの場合、上書き前のファイルのバックアップを作成
-i:本当に上書きしますか?と注意してくれる(必要性はないが、何となく)

③ 完了!


最後に

WPも奥が深いでござる…

PowerAutomateでTeamsにアダプティブカードを投稿する

PowerAutomate使ってますか?
なんか、めちゃくちゃ便利ですなやつです。officeやTeams周りの面倒な手作業を自動化してくれます。
最近、個人的に波が来ていていろんな作業を自動化することに役立てています。


0. アダプティブカードとは?

正直なところ、「アダプティブカード」と聞いてピンと来る人は少ないと思います。
ざっくりアダプティブカードとは、見た目がいい感じのカードです。少しざっくり過ぎたかもしれませんが、なんでもできるのでこういう言い方が良いような気がします。
応答の結果を表示したり、ユーザーに入力してもらうフォームを用意出来たり、なんでもできます。今回、作成したアダプティブカードのサンプルはこんな感じです↓


1. アダプティブカードを作ろう

Teamsに投稿する場合、ターゲットのバージョンを1.2にする必要があります。
(画面右上)

ターゲットを1.2にすることだけ忘れなければ、基本的に問題はありません。
あとは、左側のアイテムを選んでカードに追加していくだけです。

※入力を受け付ける場合「id」を設定する必要があります。


2. Teamsにアダプティブカードを投稿する

  • 1. アダプティブカードの内容をコピーしておく
  • 2. PowerAutomateのアダプティブカードを送信可能な処理を選択
  • 3. 1でコピーしたアダプティブカードを、メッセージに張り付ける

これでアダプティブカードをTeamsに投稿できます!

アダプティブカードに入力欄を追加している場合、「アダプティブカードを投稿して応答を待機する」を設定
それ以降の処理で、動的なコンテンツとしてアダプティブカードで入力した内容を動的なコンテンツとして利用することができます。


オリジナルのカードを投稿できると、なんだかうれしい気持ちになりますよね😊