このスラックボットは、開発チームのワークフローを改善します。特に、統合が箱から出しているため、Jenkins、Github、Gitlab、Jiraに焦点を当てています。ただし、カスタムコマンド、マクロ、クロン、その他のプロジェクト固有のコマンドも、シンプルで柔軟な方法で実装できます。
_metadata :
major_version : 1
minor_version : 1
display_information :
name : slack_bot
background_color : " #382e38 "
features :
app_home :
messages_tab_enabled : true
messages_tab_read_only_enabled : false
bot_user :
display_name : bot
always_online : true
oauth_config :
scopes :
bot :
- app_mentions:read
- channels:read
- channels:history
- groups:history
- chat:write
- im:history
- im:write
- mpim:history
- reactions:read
- reactions:write
- users:read
- files:read
- pins:write
settings :
event_subscriptions :
bot_events :
- app_mention
- message.im
interactivity :
is_enabled : true
org_deploy_enabled : false
socket_mode_enabled : true
token_rotation_enabled : false最初にconfig.yamlを準備して、config-example.yamlをご覧ください
go run github.com/innogames/slack-bot/v2/cmd/botdocker-compose upgo run cmd/bot/main.goか、GOアプリケーションを実行するためにmake runSlackユーザーとして、実行するコマンドを含むボットユーザー/アプリにプライベートメッセージを送信するだけです。さらに、任意のチャネルにボットを追加し、@bot_name、 @slack-bot start job DailyDeploymentを使用してコマンドをプレフィックスすることでボットコマンドを実行できます。
注:コマンドを処理できるように、ボットをチャンネルに招待する必要があります。
helpコマンドは、このボットのすべての利用可能なコマンドのリストを印刷するだけです。 help *command*を使用すると、簡単な説明と単一のコマンドの例がいくつかあります。

ボットは、ジェンキンスの仕事をシンプルだが強力な方法で開始および監視することができます。
デフォルトでは、「Jenkins.Host」が構成ファイルで定義されるまで、コマンドは使用できず、「ヘルプ」には表示されません。
start jobコマンドはJenkinsのジョブを開始し、現在の進捗状況を示します。注意:構成内のホワイトリストのジョブのみが起動可能です!
さらに、各ジョブには、ジョブを開始するためにカスタムコマンドを作成できるようにする構成可能なtriggerを持つことができます。 (これは、パラメーター名を考慮に入れるRegexpです)。たとえば、「毎日の展開を開始」は、1つのJenkinsの仕事のトリガーになる可能性があります。このテキストをボットに送信すると、仕事が始まります。
ジョブを開始した後、ボットには推定ビルド時間といくつかのアクションボタンが表示されます。そこで、ログを開くか、ビルドを直接中止できます。
ボットは、ファジーブランチ検索を使用してパラメーターとルックアップブランチ名を解析することもできます。
例:
trigger job DeployBetastart job BackendTests TEST-123 (テスト-123を含む完全なブランチ名を検索します。 

BOTには、Jenkinsビルドの1回の通知を作成する可能性もあります。これは、開発者が結果を待っている長期にわたる仕事に役立つかもしれません。
例:
inform me about build NightlyTestsinform me about build MyJobName #423 (ビルド番号を指定してください)inform job MyJobName指定されたジョブのすべてのプロセスビルドに対してスラックメッセージを受信します。
例:
watch JenkinsSelfCheck JenkinsSelfCheckのジョブの構築について通知するのを見るunwatch JenkinsSelfCheckジェンキンス側でジョブの実行を無効/有効化するための小さなコマンド。
例:
disable job NightlyTests (Jenkinsでジョブを無効にする)enable job NightlyTestsビルドに失敗したら、次のことでビルドを再試行できます。
例:
retry build NightlyTests (ジョブの最後のビルドを取得)retry build NightlyTests #100 (与えられたビルドを再試行)jenkins nodes利用可能なすべてのJenkinsノードをリストします。オンライン/オフラインのステータスと執行者の数が表示されます。 
Github/Gitlab/Bitbucket/Stash Pullリクエストへのリンクを貼り付けただけで、ボットはチケットの状態を追跡します!
また、カスタム「承認された」反応を設定することもできます。たとえば、誰またはどのコンポーネント/部門がプルリクエストを承認したかを直接確認するには、反応の名前またはUnicode文字ディレクトリを使用できます
pullrequest :
reactions :
merged : custom_merge_arrow
review : ?
custom_approve_reaction :
nerdydev : " approved_backend "
iamamobiledev : " approved_mobile "
iamamobiledev2 : " approved_mobile " 
追加機能: Bitbucketの場合、ボットは現在のビルドステータス(Jenkins/Bambooなどから)を抽出し、反応として失敗して実行されたビルド(火災反応)を表示できます(円矢印反応)。ビルドが安定すると、ビルド反応が消えます。 
queueコマンド( then付き)は、現在実行中のコマンドが完了するまで、指定されたコマンドをキューにすることができます。
次のシナリオの例:ビルドジョブ(数分かかる場合があります)とビルドアーティファクトに依存する展開ジョブがあります。今、あなたはできます:
trigger job Build feature1234 、与えられたブランチでビルドジョブを開始するqueue trigger job DeployBranch feature1234queue reply Deployment is done!その他の例:
delay 1hthen send message #backend coffee time?すべての実行中のバックグラウンドコマンド(Jenkins JobsやPR Watcherなど)を表示するには、このコマンドを使用します。
list queueボットは、1枚のチケットまたはチケットのリスト全体から、Jiraから情報を照会することができます。
デフォルトでは、「Jira.host」が構成ファイルで定義されるまで、コマンドは使用できず、「ヘルプ」には表示されません。
例
jira TEST-1234jira 1242 (設定されたデフォルトのJiraプロジェクトを使用してチケットを開きます)jql type=bug and status=open (デフォルトでデフォルトプロジェクトを使用)jira "Second city" (デフォルトプロジェクトでのチケットのテキスト検索) 

特定のJIRAチケットに州の変更がある場合、通知を取得することもできます。
例
watch ticket PROJ-12234ボタンを押すときにボットアクションを実行しているボタンを作成することができます。スラックインタラクション

例:
add button "Start Deployment" "trigger job LiveDeployment"注記
ボット動作をカスタマイズするようにユーザー固有の変数を構成します。たとえば、各開発者には独自のサーバー環境があります。
例:このグローバル構成を持つ:
commands :
- name : Deploy
trigger : " deploy (?P<branch>.*) "
commands :
- deploy {{.branch}} to {{ customVariable "defaultServer" }}各開発者は、次のようにコマンドを呼び出すことができます。 set variable defaultSerer foobarX.local 、カスタム「defaultserver」を登録します。
現在、 deploy materを呼び出すと、 master BranchをfoobarX.local Serverに展開します。
ここでの別の例Goテンプレートを使用する高度なバージョン。最終的に、コマンドは次のような1つのサブコマンドを生成します: reply <!here> demo for <https://jira.example.com/TEST-1234|TEST-1234: Example-Ticket> https://jira.example.com/test-1234を作成します。
- name : demo
trigger : " demo (?P<ticketId> \ w+- \ d+) "
commands :
- |
{{ $ticket := jiraTicket .ticketId }}
{{ if $ticket }}
reply <!here> demo for <{{ jiraTicketUrl $ticket.Key }}|{{ $ticket.Key }}: {{ $ticket.Fields.Summary }}>
{{ else }}
reply Ticket {{ .ticketId }} not found :white_frowning_face:
{{ end }}
description : Informs the current channel about a demo of a Jira ticket. It directly posts a link to the ticket
examples :
- demo XYZ-1232ユーザーはset variable serverEnvironment aws-02を使用して、デフォルト環境を一度定義できます。
その後、 deploy feature-123定義されたaws-02環境にブランチを展開します。各ユーザーは自分の変数を定義できます。
公式Openai統合(GPT3.5)との会話のようなChatGptを持つことも可能です。

質問の前に「Openai」または「ChatGpt」と入力して、よく知られているChatGPTページのように動作する新しいスレッドを作成するだけです。最後の10のメッセージのコンテンツは、コンテキストとして使用されます。それを機能させるには、有効な「openai.api_key」を構成で提供する必要があります。
拡張構成:
openai :
api_key : " sk-123....789 "
initial_system_message : " You are a Slack bot for Project XYZ, please answer shortly. "
update_interval : ' 3s ' # fewer Slack messages update during generation
model : gpt-3.5-turbo
temperature : 0.8
log_texts : true # opt in: log all input/output text to the log既存のスレッド内で「OpenAI XXX」コマンドを使用する場合、以前のメッセージは、さらなる呼び出しのコンテキストとして使用されます。
テンプレートで関数を使用することもできます(カスタムコマンドやクロンなど)。
{{ openai "Say some short welcome words to @Jon_Doe"}} Hello Jon, welcome! How can I assist you today?
ボットは、Dall-Eの助けを借りて画像を生成することもできます。 「Dalle」でプロンプトが表示されると、ボットがテキストに基づいて画像を生成するだけです。

小さな休憩が必要で、小さなクイズゲームをプレイしたい場合は、このコマンドを呼び出すことでそうすることができます。 50を超える質問は許可されていません。質問は、さまざまなカテゴリと困難なレベルからのものであり、複数選択または真の質問のいずれかです。
コマンド
quiz 10answer 1 
OpenWeatherMapをセットアップして、あなたの場所の現在の天気に関する情報を取得することができます。

configの例:
open_weather :
apikey : " 612325WD623562376678 "
location : " Hamburg, DE "
units : " metric " すべてのユーザーは、独自のコマンドエイリアスを定義できます。これは、毎日同じコマンドを入力しないようにするための便利な機能です。
使用の例
list commandsadd command 'myCommand' 'trigger job RestoreWorld 7 >次にmyCommandに電話してくださいadd command 'build master' 'trigger job Deploy master ; then trigger job DeployClient master'delete command 'build master'myCommandを実行してこのJenkinsの仕事をトリガーできます
定義された「コマンド」(以前は「マクロ」と呼ばれる)は非常に魔法であり、YAML構成ファイルで定義できます。
彼らはトリガー(正規表現)を持ち、実行されるサブコマンドのリストを持っています。 Regexpのパラメーターグループを考慮に入れています。そのため、非常に柔軟になります。
特定のブランチ名を同時に2つのジェンキンスジョブを開始する1つの簡単な例:
commands :
- name : build clients
trigger : " build clients (?P<branch>.*) "
commands :
- " reply I'll build {{ .branch }} for you "
- " trigger job BuildFrontendClient {{ .branch }} "
- " trigger job BuildMobileClient {{ .branch }} "
- " then reply done! :checkmark: " 
注:コマンドでは、Go->ループ/条件のテンプレート機能の完全なセットを使用できます。
GOの通常のテンプレート機能に加えて、テンプレートスコープでは、ボット固有のコマンドの束が利用できます。
list template functionsコマンドを使用して、利用可能なすべての機能(引数と返品タイプを使用)のリストを生成できます。 
注:このテンプレート関数は、さまざまなコマンド/機能で使用できます。
retryまたはrepeat 、最後に実行されたコマンドが再実行されます。 - >失敗したジェンキンスの仕事が修正されたときに便利です。
commandコマンドと組み合わせて、またはJenkinsジョブのフックとして役立つ可能性のある小さなコマンド。
例コマンド: delay 10m trigger job DeployWorldwide
返信として、キューのジョブを停止するコマンドを取得します( stop timer 123456など)。誰もがコマンドを送信できるため、コマンドを使用して展開を発表することができ、疑わしいことに、実行はまだすべての人によって停止できます。
replyとsend messageはcommandまたはjenkinsフックと組み合わせて役立つ小さなコマンドもあります。
例:
send message to #backend The job failed :panic:delay 10m send message to @peter_pan I should notify you to...別のオプションを決定できない場合の簡単なコマンド
例
random Pizza Pasta - >「ピザ」または「パスタ」のいずれかを生産しますrandom Peter Paul Tom Jan - >今日の食べ物の整理について誰が取らなければなりませんか?config.yamlというconfigファイルを作成します( config.example.yamlを見ることができます) このコマンドは、 config.yamlファイルをデフォルトで使用してボットを起動します。 -config引数を使用して、別の場所から構成ファイルを使用します。
go run cmd/bot/main.go
注意:最初にconfig.yamlファイルを作成します
docker-compose up
構成は、外部サービスとカスタムコマンドなどの資格情報を保存しているsimple .yamlファイルを介して管理されます。
最も簡単な方法は、必要なすべてのオプションを含む1つのconfig.yamlファイルのみを使用することですconfig.yamlはデフォルトで読み込まれます。構成を複数のファイルに分割することもできます。
複数の構成ファイルを持つ構造の例:
secret.yaml外部サービスの資格情報(Slack、Jenkins)を含む - Puppet/Ansibleなどで管理できます。jenkins.yaml Jenkinsジョブとそのパラメーターなどの構成project-X.yamlカスタムコマンドproject-Y.yaml複数の構成ファイルをロードするには、すべての構成をマージしたgo run cmd/bot/main.go -config /path/to/config/*.yamlを使用します。
このボットを実行するには、スラックアプリケーションに「ボットトークン」が必要です。必要なトークンを使用して適切なアプリを作成する方法のインストールセクションを参照してください。
Jenkinsのジョブを開始または監視できるようにするには、最初にホストと資格情報をセットアップする必要があります。ユーザーは、ジョブへのアクセスを読み取り、ホワイトリストに登録されたジョブのジョブをトリガーする権利が必要です。
jenkins :
host : https://jenkins.example.de
username : jenkinsuser
password : secretジョブを開始できるようにするには、ジョブとそのパラメーターを構成で定義する必要があります。
パラメーターのないジョブは非常にシンプルに見えます:
jenkins :
jobs :
CleanupJob :その後、 trigger job CleanupJobを使用したり、 start job CleanupJobジョブを開始したりできます。また、ジョブが成功または失敗したときに通知します(エラーログを含む)。
次に、2つのパラメーターを持つジョブ:
jenkins :
jobs :
RunTests :
parameters :
- name : BRANCH
default : master
type : branch
- name : GROUP
default : allこのジョブは2つのパラメーターを処理できます。
構成内のVSCをセットアップすると、ブランチ名全体の名前を渡す必要はありませんが、ファジー検索を使用できます。
例:
start job RunTestsマスターブランチで「すべて」グループを開始しますstart job JIRA-1224 unitチケット番号のマッチングブランチを見つけようとします。 (一意の検索結果がない場合はエラーメッセージ!)今では、より多くの魔法を備えたより複雑な例:
jenkins :
jobs :
DeployBranch :
trigger : " deploy (?P<BRANCH>[ \ w \ -_ \ . \ /]*) to (?P<ENVIRONMENT>prod|test|dev) "
parameters :
- name : BRANCH
default : master
type : branch
- name : ENVIRONMENT
onsuccess :
- reply Tadaa : Take a look on http://{{ .ENVIRONMENT }}.example.comステップバイステップ: trigger 、ジョブを開始するための正規表現であり、名前付きグループを含む場合があります。 regexpグループは、ジョブパラメーターに自動的に一致します。
その後、 deploy bugfix-1234 to test Jenkinsのジョブを開始できます。
注: start job DeployBranch masterことで、いつでもこのジョブを開始できます。 triggerは単なる代替手段です。
onsuccess 、このボットを介してジョブを開始すると実行されるフックです。さらに、 onsuccessとonerrorも利用可能です...例えば、カスタムエラーメッセージを送信します。
Robfig/Cronライブラリを使用して、Cronsを介して定期的なコマンドを定義することができます。
configの例
crons :
- schedule : " 0 8 * * * "
commands :
- trigger job BuildClients
- then deploy master to staging
channel : " #backend " Jenkins Triggerでブランチ名を解決できるようにするために、VCSシステムを構成できます(現時点では、Stash/Bitbucketだけです)。
vcs :
type : bitbucket
host : https://bitbucket.example.com
username : readonlyuser
password : secret
project : MyProjectKey
repository : repo_name構成が提供されていない場合、自動化されたブランチルックアップはなく、「ブランチ」パラメーターはジェンキンスジョブに1:1に渡されます。
環境ではいくつかの機能は必要ないかもしれません。 JiraやBitbucketのように、資格情報が提供されていない場合、ほとんどのものはアクティブではありません。
他のいくつかのものは、構成を介して無効にすることができます:
games :
enabled : false
custom_commands :
enabled : false
custom_variables :
enabled : falsebot/ボットのコードクラスを含む:Slackへの接続、ユーザー管理、コマンドマッチング...cmd/bot/エントリポイント別名main.go for the botおよびcliテストツールcommand/リアルコマンド「コマンド」コマンドで実装できない新しいコマンドが必要な場合は、Goコードを書く必要があります。
Slackアプリケーションをエミュレートする便利なCLIアプリケーションがあります... Slack接続なしでローカルコンソールとチャットするだけです! 
make run-cli
「Air Auto Reload Tool」を使用するためにmake air 。
以下を介して実行できるテストがたくさんあります。
make test
テストカバレッジが生成され、Build/Coverage.htmlが生成されます
make test-coverage