タグ

ブックマーク / int128.hatenablog.com (55)

  • HackMDでGitLab認証を利用する - GeekFactory

    HackMDは同時編集が便利なコラボレーションツールです。HackMDは認証なしでも十分に使えますが、外部認証を利用するとさらに便利に使えます。公式リポジトリのドキュメントによると、HackMDは以下の認証方式に対応しています。 GitHub Twitter GitLab (self hosted) SAML 稿ではGitLab認証を利用する方法を説明します。 HackMDのデプロイ HackMDをKubernetesクラスタにデプロイします。公式の stable/hackmd Helm chart を利用すると簡単にデプロイできます。 ここでは構成管理にHelmfileを利用します。 # helmfile.yaml releases: - name: hackmd namespace: devops chart: stable/hackmd values: - ingress: ena

    HackMDでGitLab認証を利用する - GeekFactory
  • Windows Subsystem for Linuxで開発環境を作る - GeekFactory

    会社ではWindowsを使う必要があるのですが、まともな開発環境を整備するためにいろいろと苦労したので知見をまとめておきます。 前提: Windows 10 プロキシなし 希望: zshを使いたい プライベートで使っているmacOSのdotfilesをそのまま使いたい gitコマンドが遅いと辛い npm installでネイティブコードのコンパイルが通らない問題で疲弊したくない LinuxmacOSのバイナリしか配布されていないコマンドを使いたい という条件を満たすため、以下を利用しています。 WSL (Windows Subsystem for Linux) VcXsrv WSLで使っているもの xterm(フォントがきれいなので使っている) zsh vim git node php openjdk IntelliJ IDEA(idea-fsnotifier-wsl のパッチを当てて使

    Windows Subsystem for Linuxで開発環境を作る - GeekFactory
  • スクリプトコンソール上でSlaveでコマンドを実行する - GeekFactory

    Jenkinsのスクリプトコンソールを利用すると、Slaveで任意のコマンドを実行できます。具体的には、 RemotingDiagnostics.executeGroovy() メソッドを利用してSlaveでGroovyスクリプトを実行します。 import hudson.util.RemotingDiagnostics // Slaveノード名 def node = 'node-name' // 実行したいコマンド def command = 'uname -a' println RemotingDiagnostics.executeGroovy(""" def p = '$command'.execute() p.waitFor() println p.in.text """, Jenkins.instance.slaves.find { it.name == node }.chann

    スクリプトコンソール上でSlaveでコマンドを実行する - GeekFactory
  • Gradle Swagger Codegen Pluginを書いた - GeekFactory

    Swaggerのソースコード生成をGradleで利用するためのプラグインを書きました。 github.com 以下のようなビルドスクリプトを実行すると、SwaggerでAPIサーバを自動生成できます。 plugins { id 'org.hidetake.swagger.codegen' version '1.0.0' } repositories { jcenter() } dependencies { // declare swaggerCodegen to run CLI swaggerCodegen 'io.swagger:swagger-codegen-cli:2.2.1' } // declare a task to generate code task generateServer(type: SwaggerCodegen) { language = 'spring' inp

    Gradle Swagger Codegen Pluginを書いた - GeekFactory
  • 宣言的APIクライアントSpring Cloud Feignを使ってみる - GeekFactory

    Spring Cloud Feignを利用すると、Spring MVCと同じアノテーション(@RequestMapping)を使ってAPIクライアントを定義できます。同じアノテーションが使えるので学習コストを抑えられるメリットがあるでしょう。また、APIサーバとAPIクライアントの仕様が同じ場合は共通の宣言が使えます。APIレスポンスを加工して返すといった単純な場合に役立ちそうです。 GitHub APIクライアントの例を以下に示します。 import org.springframework.cloud.netflix.feign.FeignClient import org.springframework.web.bind.annotation.PathVariable import org.springframework.web.bind.annotation.RequestMappi

    宣言的APIクライアントSpring Cloud Feignを使ってみる - GeekFactory
  • チーム開発を始める時に決めること - GeekFactory

    頭の中を整理するために、新たにチーム開発を始める時に決めることをリストアップしてみました。すべて書き出すと大量になるので、プロセスや開発基盤を中心に書いています。 プロジェクト計画 ゴール マイルストン スコープ リリース計画 プロセス チーム構成 リスクと対策 プロセス スプリントスケジュール(例:月曜開始の1週間スプリント) 会議体の設定(例:スプリント計画、スプリントレビュー、レトロスペクティブ) 複数チームのワークフロー(例:プロダクトオーナー、UXデザイナー、開発チーム、QAチーム) 仮説検証サイクル(例:仮説設定、リリース、分析) 進捗管理方法(例:リリースバーンダウン) 品質管理方法 障害対応のワークフロー プロセス改善の仕組み(例:レトロスペクティブ結果のバックログ化) プロダクトデザイン(略) ソフトウェアアーキテクチャ(略) インフラアーキテクチャ(略) テスト計画(略

    チーム開発を始める時に決めること - GeekFactory
  • Gradle TestKitでプラグインをテストする - GeekFactory

    GradleプラグインのテストにGradle TestKitを利用すると便利です。 何に使うの? ユニットテストではうまく動いているのに、実際のプロジェクトにプラグインを適用するとうまく動かないことがあります。これはGroovyのバージョンが違うとか、ビルドスクリプトのスコープで暗黙的に定義されている変数があるといったことが原因です。MetaClassやdelegateで特殊なことをしていると起こることがあります。 実際のプロジェクトにプラグインを適用するには、以下の手順が必要になります。 プラグインのJARをビルドする。 プラグインをローカルのMavenリポジトリに配置する。 テスト対象プロジェクトでローカルのMavenリポジトリにあるプラグインを読み込む。 テスト対象プロジェクトでタスクを実行する。 Gradle TestKitを利用すると、以下の手順で済みます。 テスト対象プロジェク

    Gradle TestKitでプラグインをテストする - GeekFactory
  • Multibranch PipelineによるJenkinsとGitBucketの連携 - GeekFactory

    JenkinsのMultibranch Pipelineを利用するとCIで以下ができるようになります。 ビルドの設定を Jenkinsfile に書いてバージョン管理できる。 リポジトリへのpushやPull Requestのマージを契機にジョブを実行できる。 パイプラインでビルドフローを分かりやすく記述できる。 (2017/10/3追記) GitBucketの公式Wikiに設定方法を書きました。 github.com 以下の情報は古いため、GitBucketの公式Wikiを参照してください。 JenkinsとGitBucketを連携させるにはGitBucket Pluginを使う方法がありますが、GitBucketの仕様によりPull Requestのマージを契機にジョブを実行できない制約があります。Multibranch Pipelineを使うとPull Requestのマージを契機に

    Multibranch PipelineによるJenkinsとGitBucketの連携 - GeekFactory
  • Gradle SSH Plugin 2.4.0をリリースした - GeekFactory

    Gradle SSH Plugin 2.4.0、Groovy SSH 2.4.0をリリースしました。 github.com 2.4.0の変更点 New features: Host key checking for gateway access Put files filtered by given closure Get files filtered by given closure Add ssh.runtime object in CLI Bug fixes: Skip lecture message from sudo result Specify null as UserInfo to prevent changing known_hosts Host key checking for gateway access ゲートウェイサーバを経由して多段接続する場合でも known_h

    Gradle SSH Plugin 2.4.0をリリースした - GeekFactory
  • TestKitによるGradleプロジェクトのテスト - GeekFactory

    最近のGradleで導入されているTestKitを使ってみたのでメモします。 TestKitでできること TestKitを利用すると、Gradleプロジェクトに対するテストを実行できます。例えば、何かの設定ファイルを自動生成するタスクをGradleで定義している場合に、そのタスクに対するテストコードを記述できます。TestKitはSpockと併用できるので、BDDスタイルでテストコードを書くこともできます。 この仕組みを応用すると、Gradleプラグインを適用したプロジェクトに対するテストを実行できます。Gradleプラグインの受け入れテストとも言えますね。詳細は The Gradle TestKit - Gradle User Guide Version 2.14 を参照してください。 使い方 ここでは、テスト対象のプロジェクトがGradle 2.13と1.12の両方でちゃんと動作するか

    TestKitによるGradleプロジェクトのテスト - GeekFactory
  • Gradle SSH Plugin 2.3.0をリリースした - GeekFactory

    Gradle SSH Plugin 2.3.0、Groovy SSH 2.3.0をリリースしました。 github.com 2.3.0の変更点 リモートコマンドを実行する時にコマンドラインを簡単にエスケープする構文を追加しました。これまでは自分でエスケープする(シングルクォートで囲む、もしくはバックスラッシュを付ける)必要がありましたが、2.3.0からは execute メソッドにリストが渡された場合は自動的にエスケープされて実行されます。 例えば、以下のようにLLのスクリプトをワンライナーで実行したい場合は便利でしょう。 execute(['perl', '-e', /print 'current: ', time, "\n"/]) また、2.3.0から複数の known_hosts ファイルを指定できるようになりました。地味な改善ですが、実行時に別の known_hosts をマージし

    Gradle SSH Plugin 2.3.0をリリースした - GeekFactory
  • Gradle SSH Plugin 2.2.0をリリースした - GeekFactory

    Gradle SSH Plugin/Groovy SSH 2.2.0をリリースしました。 2.2.0の変更点 authentications でユーザ認証方式を指定できるようになりました。通常の使い方(パスワード認証、公開鍵認証)ではユーザ認証方式を指定する必要はありませんが、Kerberos認証などの特殊な認証方式を利用する場合は自分で指定します。 Stanford University LibrariesのJohnathan Martin氏から提案をいただいた機能追加なのですが、残念ながらKerberos認証は動作しなかったようです。JSchでKerberos認証をざっと調べてみましたが、ほとんど事例がないみたいです。 github.com あと、 ssh.version でバージョン情報を取得できるようにしました。バージョン情報にはJSchやGroovyなどのバージョンも含まれます。

    Gradle SSH Plugin 2.2.0をリリースした - GeekFactory
  • Gradle SSH Plugin 2.1.1をリリースした - GeekFactory

    Gradle SSH Plugin/Groovy SSH 2.11をリリースしました。 2.1.1の変更点 SCP GET/PUTの性能を改善しました。 github.com 2.1.0でSCPサポートを追加しましたが、非効率な実装が残っていたため、2.1.1で性能を改善しました。 Test Item scp vs sftp (2.1.0) scp vs sftp (2.1.1) get a large file 419% 132% get many files 75% 74% put a large file 144% 114% put many files 1025% 143% 2.1.0ではSCPSFTPに比べて4〜10倍も遅い結果になっていましたが、2.1.1では若干遅いレベルまで改善しています。 改善点は以下です。 Stream Interactionのバッファサイズを1kBか

    Gradle SSH Plugin 2.1.1をリリースした - GeekFactory
  • Gradle SSH Plugin 2.1.0をリリースした - GeekFactory

    Gradle SSH Plugin 2.1.0、Groovy SSH 2.1.0をリリースしました。 github.com github.com 2.1.0の変更点 SCPによるファイル転送をサポートしました。SFTPはJSchに組み込まれている機能を利用しているので簡単に実装できましたが、SCPはコマンドの標準入出力とのやり取りを実装する必要があります。そこで、過去のコードを捨てて、一から新しくStream Interactionの仕組みを実装しました。 具体的には、JSchのOutputStreamで受信バイトを受け取る方式から、InputStream#read()で受信バイトを取りに行く方式に変えました。これにより、受信スレッドの開始や受信バイトの受け取りのタイミングを自分でコントロールできるようになったので、ずいぶんとコードが書きやすくなりました。 まだ非効率な実装が残っているので

    Gradle SSH Plugin 2.1.0をリリースした - GeekFactory
  • Gradle SSH Plugin 1.5.1をリリースした - GeekFactory

    Gradle SSH Plugin 1.5.1、Groovy SSH 1.5.1をリリースしました。 github.com github.com 1.5.1の変更点 SFTPでファイルやディレクトリを削除する remove メソッドを提供しているのですが、ファイルやディレクトリが存在しない場合に例外が発生しないように変更しました。SFTPでエラーが発生した場合は例外が投げられます。この振る舞いはGradleの project.delete メソッドと同じ(はず)です。 この変更はMartin Vysny氏から提案いただいたもので、Dominik Stadler氏からもアドバイスをいただきました。GitHubで仕様を議論できるとは素敵。 ちなみに remove メソッドは内部でenumを使っているためGradle 1.xでは動作しません。Groovy 2でコンパイルされたGroovyネイティ

    Gradle SSH Plugin 1.5.1をリリースした - GeekFactory
  • Gradle SSH Plugin 1.5.0をリリースした - GeekFactory

    Gradle SSH Plugin 1.5.0、Groovy SSH 1.5.0をリリースしました。 github.com github.com 1.5.0の変更点 Gradle SSH Pluginではホストにロールを関連付けることができます。これまで複数ロールのORを取るメソッド role() を提供していましたが、1.5.0からANDを取るメソッド allRoles() も提供しています。 // remote hosts associated to webServer OR appServer session(remotes.role('webServer', 'appServer')) { } // remote hosts associated to webServer AND appServer session(remotes.allRoles('webServer', 'ap

    Gradle SSH Plugin 1.5.0をリリースした - GeekFactory
  • Gradleで特定の条件を満たした場合にのみテストケースを実行 - GeekFactory

    Gradleで特定の場合にのみテストケースを実行する方法を説明します。例えば、通常のテストケースはH2 Databaseを利用するけど、一部はテスト環境上のMySQLで実行したいといった場合を考えます。 基的な考え方 JUnitのカテゴリ機能でテストケースをフィルタします。もしくは、パッケージ名でテストケースをフィルタします。 Gradleでは以下の2タスクを作成します。 カテゴリの付いていないテストケースを実行するタスク カテゴリの付いているテストケースを実行するタスク 開発環境では1だけ実行します。テスト環境では1と2の両者を実行します。 実装例 以下の例はGradleとSpockで書いていますが、JavaやJUnitでも同様です。 Spec ここでは、MySQLが必要なテストケースには RequireDatabase カテゴリを付けることにします。 interface Requir

    Gradleで特定の条件を満たした場合にのみテストケースを実行 - GeekFactory
  • Groovy 2.3および2.4におけるTraitの差異 - GeekFactory

    Groovy SSHの開発で気づいたのですが、Groovy 2.3と2.4でTraitの挙動が微妙に異なるようです。 2.3から2.4に上げたところ、Traitのメソッドに書いたクロージャをdelegate指定で実行してもdelegateのプロパティやメソッドが解決できない問題が発生しました。例えば、以下のコードの実行結果は2.3と2.4で異なります。 // クロージャをdelegate指定で実行する class U { static <T> T callWithDelegate(Closure<T> closure, Object delegate) { def cloned = closure.clone() as Closure<T> cloned.resolveStrategy = Closure.DELEGATE_FIRST cloned.delegate = delegate

    Groovy 2.3および2.4におけるTraitの差異 - GeekFactory
  • Gradle SSH Plugin 1.4.0をリリースした - GeekFactory

    Gradle SSH Plugin 1.4.0、Groovy SSH 1.4.0をリリースしました。 github.com github.com 1.4.0の変更点 ECDSA Host Keyに対応しました。正確には、以下の場合にHost Key Checkingが失敗する事象を修正しました。 known_hosts にECDSA鍵が含まれる。 SSHサーバがRSA鍵とECDSA鍵を持っている。 JSchは0.1.52からECDSA Host KeyとECDSA User Keyに対応していますが、上述の場合には鍵交換でRSA鍵が選択されるためHost Key Checkingが失敗するようです。そのため、 known_hosts に含まれる公開鍵を元にアルゴリズムを指定するようにしました。とりあえずは ecdsa-sha2-nistp256 のみ確認済みです。384や521も動作すると

    Gradle SSH Plugin 1.4.0をリリースした - GeekFactory
  • Gradle SSH Plugin 1.1.5をリリースした - GeekFactory

    Gradle SSH Plugin 1.1.5、Groovy SSH 1.1.9をリリースしました。 github.com サーバでSFTPが無効に設定されている場合にスクリプトがハングアップしてしまうバグを修正しました。約3ヶ月ぶりにリリースしようとしたらテストが通らなくて焦りました。Travis CIのコンテナの仕様が変わったみたいです。 他にもfeature requestをいただいているので、地道に開発を続けたいと思います。

    Gradle SSH Plugin 1.1.5をリリースした - GeekFactory