GeekFactory

int128.hatenablog.com

Swagger CodegenでPHPクライアントを生成する

Swagger Codegenが生成するPHPクライアントを使う機会があったので、使い方を記事に残しておきます。 Swagger Codegenが生成するファイル Swagger CodegenでPHPテンプレートを指定すると、以下のファイル群が生成されます。 SwaggerClient-php/ autoload.php…

Spring Security OAuth2のリトライを@Retryableで書く

Spring Security OAuth2のアクセストークン取得で接続失敗に対してリトライを行いたい場合、Spring Retryを使うと簡単に実現できます。 やりたいこと Spring BootのアプリでOAuth 2.0クライアントを利用する。 Spring Security OAuth2でアクセストークンを取…

Spring BootアプリのテストをSpockで書く(続編)

以前にSpring BootアプリケーションのテストをSpockで書く方法を紹介しましたが、この方法ではテストの所要時間が長くなる問題がありました。本稿では他の方法を紹介します。 int128.hatenablog.com 具体的には、インナークラスの @TestConfiguration でMock…

Spring BootでログやActuatorにバージョン情報を含める

ログやActuatorにバージョン情報を含めておくと、本番環境でどのバージョンのアプリケーションが実行されているか簡単に確認できるので便利です。 ビルド時にapplication.ymlにバージョン情報を含める Gradleでは、以下のようなビルドスクリプトを書くとappl…

ターミナルのウィンドウタイトルにホスト名などを入れる

zsh

久しぶりにzshネタです。 複数のタブを開いていろんなサーバにSSHしていると区別が付かなくなってきたので、ウィンドウタイトルに実行コマンド、ホスト名、カレントディレクトリを入れてみました。zshの組み込みコマンドだけで実現してみました。 function _…

Spring Security OAuth2でリクエストログを出力する

Spring Security OAuth2でアクセストークンのリクエストとレスポンスのログを出力するには、Apache HttpClientを使うと簡単です。 概要 Spring Security OAuth2のアクセストークン取得はRestTemplateを利用しています。 RestTemplateはデフォルトではHttpURL…

doma-spring-bootのSQL例外変換

doma-spring-bootを利用すると、Doma2の例外クラス(JdbcException)をSpring Transactionの例外クラス(DataAccessException)に変換してくれます。例外変換の仕様が明文化されていないようなので調べてみました。どこかにまとめてあったら教えてください。…

2016年の振り返り

2016年もお世話になりました。 概況 振り返り 仕事 Spring CloudとかSwaggerとかAWSとか触ってた。 JIRA, Confluence, Mattermost, ownCloud, GitBucket, Jenkins, Artifactory, SonarQubeとかをDocker Composeベースで開発基盤に導入してた。 上期は暇で、…

Jenkinsで自分でビルドしたGitコマンドを使う

Jenkins Agentで自分でビルドしたGitコマンドを使う方法を説明します。新しいバージョンのGitを使いたい場合に有用です。 方針 JenkinsにはGitやAntなどの外部ツールを管理する機能があります。 外部ツールが必要になった場合に自動的にインストールスクリプ…

Spring BootアプリのテストをSpockで書く

Spring BootアプリケーションのテストをSpockで書く方法を説明します。最近のバージョンを対象にしています。 Spring Boot 1.4 Spock 1.1-rc-3 Groovy 2.4 本稿では以下のテストレベルを対象とします。 コンポーネントテスト(依存コンポーネントをモックに…

FeignでOAuth 2.0クライアントを使う

RESTクライアントのSpring Cloud Netflix FeignでOAuth 2.0を使う方法を説明します。 @FeignClientのconfigurationでOAuth2FeignRequestInterceptorを設定する。 OAuth2FeignRequestInterceptorにクライアントIDやクライアントクレデンシャルを渡す。 具体的…

Feignでレスポンスボディによる例外処理を行う

REST APIクライアントのSpring Cloud Feignを使う場合に異常系のステータスコードをハンドリングする方法を調べたのでメモです。 デフォルトの振る舞い APIが400番台や500番台のステータスコードを返した場合、FeignはFeignExceptionをスローします。これは…

Jenkins PipelineでGitリポジトリにpushする

JenkinsのジョブでGitリポジトリにブランチやタグをpushしたい場合があります。Jenkinsfileでどのように実装するか調べてみました。 実装例 お急ぎの方は下記のコードを参考にしてください。 def userRemoteConfig = scm.userRemoteConfigs.head() withCrede…

Swagger YAMLのバリデーションをCIで回す

Swagger YAMLを書いていると間違いに気づかないことがよくあります。リポジトリにpushした時にJenkinsやCircle CIなどで構文チェックできるとミスを防げるます。そこで、GradleのプラグインにSwagger YAMLのバリデーションを追加してみました。 使い方 build…

Spring Bootで例外発生時にJSONを返す

Spring BootのREST APIサーバで例外発生時のエラー情報をJSONで返す方法を調べたのでメモです。 やりたいこと 例外が発生した場合は常にエラー情報をJSONで返したい。 例外の種類によってステータスコードを分けたい。例えば、バリデーションエラーが発生し…

Swagger Codegenにおけるspring-cloudテンプレートのカスタマイズ

Swagger Codegenではコード生成のテンプレートをカスタマイズできますが、ライブラリに spring-cloud を選んだ場合はカスタマイズの仕方に注意が必要です。 springのテンプレート構造は以下になります。 template/ api.mustache ←すべてのライブラリで共通の…

Spring Cloud Feignのステータスコードと例外

Spring Cloud Feignの例外を調べてみたのでメモします。 (11/22修正)Root Causeのスタックトレースしか貼り付けていなかったので、すべてのCauseに修正しました。 結果 エラーのステータスコードを受け取った場合、 feign.FeignException が発生します。 …

Gradle Swagger Generator Plugin 1.5.1 has been released

Gradle Swagger Generator PluginでSwagger UIを生成できるようになりました。 以下のビルドスクリプトで generateSwaggerUI タスクを実行すると、 build/swagger-ui フォルダにSwagger UIが出力されます。 plugins { id 'org.hidetake.swagger.generator' v…

Using env.BRANCH_NAME on Jenkins Multibranch Pipeline

Jenkins Multibranch Pipelineで、ビルドの契機となったブランチに応じて固有の処理を行いたい場合があります。例えば、masterブランチがpushされた場合のみテスト環境にデプロイするといった使い方が考えられます。Travis CIの TRAVIS_BRANCH 、Circle CIの…

開発チームがプロダクトコードを書き始めるまでに準備すること

頭の中を整理するため、いわゆるZero Feature Releaseに必要なことをまとめてみました。開発チームがプロダクトコードを書き始めるまでに作っておくとよいものです。 ソースコードリポジトリ(例:GitHub) エディタ設定(例:editorconfig) ビルドツール(…

Gradle Swagger Generator Pluginを公開します

GradleでSwagger YAMLからAPIサーバやAPIクライアント、APIドキュメントを生成するプラグインを作りました。 github.com もともとはGradle Swagger Codegen Pluginという名前でしたが、コードだけでなくドキュメントの生成もできるようになったので名前を変…

GradleからS3に成果物を公開する

GradleからS3に成果物を公開する方法を調べたのでメモです。あらかじめIAMユーザを作成し、キーを取得しておく必要があります。 S3 Maven Repositoryに公開する Gradleのmaven-publishプラグインを使うと、S3のMavenリポジトリに成果物を公開できます。詳し…

スクリプトコンソール上でSlaveでコマンドを実行する

Jenkinsのスクリプトコンソールを利用すると、Slaveで任意のコマンドを実行できます。具体的には、 RemotingDiagnostics.executeGroovy() メソッドを利用してSlaveでGroovyスクリプトを実行します。 import hudson.util.RemotingDiagnostics // Slaveノード…

宣言的APIクライアントSpring Cloud Feignを使ってみる

Spring Cloud Feignを利用すると、Spring MVCと同じアノテーション(@RequestMapping)を使ってAPIクライアントを定義できます。同じアノテーションが使えるので学習コストを抑えられるメリットがあるでしょう。また、APIサーバとAPIクライアントの仕様が同…

ACMのドメイン所有確認メールをSESで受信

aws

ACM(Amazon Certificate Manager)でSSL証明書を発行するには、ドメイン管理者に送付されるメールで承認をクリックする必要があります。ドメインの管理組織が異なる場合やメールサーバを用意していない場合は、ドメイン管理者へのメールをSESで受け取ること…

Gradle Swagger Codegen Plugin 1.1.0をリリースした

GradleでSwagger Code Generatorを利用するためのプラグインをリリースしました。 github.com バージョン1.1.0では、自動生成の対象を components オプションで選べるようになりました。下記のビルドスクリプトではモデルクラスとAPIクラスを生成しています…

HubotによるJIRAチケット作成の自動化

チケット駆動開発を行う上で障壁になることの一つに「チケット作成が面倒でだんだんやらなくなる」という課題があります。 Jim Coplien先生は紙の付箋を強く推奨しています*1し、私も分かりやすいアナログの方が好きです。しかし、JIRAにはディスプレイさえ…

docker-gitbucketでExternal DBやPrefixなどを設定する

DockerでGitBucketを立ち上げる時は f99aq8ove/docker-gitbucket というイメージを利用しています。GitBucket最新版への追随が早いので重宝しています。 github.com このたびPRがマージされたので、環境変数でExternal DBやPrefixなどを設定できるようになり…

Multibranch PipelineによるJenkinsとGitBucketの連携

JenkinsのMultibranch Pipelineを利用するとCIで以下ができるようになります。 ビルドの設定を Jenkinsfile に書いてバージョン管理できる。 リポジトリへのpushやPull Requestのマージを契機にジョブを実行できる。 パイプラインでビルドフローを分かりやす…

Jenkins GitHub PluginをGitBucketで利用する

JenkinsとGitBucketの連携にGitHub Pluginが使えるか調べてみました。GitBucket APIはGitHubと互換性があるので、理論上はGitHub Pluginが使えるはずです。 結論 GitHub互換のURL形式でリダイレクトを設定することで、GitHub PluginでもGitBucketのWebhookを…