SlideShare a Scribd company logo
1 of 55
SI現場のテスト自動化への挑戦
〜フルコンテナ構成のCI/CD環境〜
2019年5月18日
JJUG CCC 2019 Spring
#ccc_m4
川沼 大輝
日本アイ・ビー・エム株式会社
横山 夏実
日本アイ・ビー・エム
システムズ・エンジニアリング株式会社
2
自己紹介
川沼 大輝
日本アイ・ビー・エム株式会社
クラウドデリバリー部門に所属し、インフラからアプリまで幅広く担当
Java/C#/IBM Cloud/AWS
横山 夏実
日本アイ・ビー・エム
システムズ・エンジニアリング株式会社
開発プロセスの改善、開発環境の構築運用に関わり10数年
Docker/Kubernetes
3
免責事項
本発表は私自身の見解であり、
所属組織の立場、戦略、意見を代表するものではありません
4
アジェンダ
• CI/CDを適用したプロジェクトについて
• Javaのテスト実装について
• フルコンテナ構成のCI/CD環境について
• まとめ
5
CI/CDを適用した
プロジェクトについて
6
CI/CDを適用したプロジェクトについて
プロジェクト概要
• 既存システムを統合し、新たなサービス基盤を構築するプロジェクト
• APIにはMSA(Microservice Architecture)を採用
• ドメイン単位でCI/CDができる開発環境が必要
• 開発手法はWF型
• 想定される仕様変更に耐えられる品質ゲートを設けたい
お客様
• CI/CDの必要性を認識されていて、取り組みに積極的
• 他のプロジェクトに横展開できるリファレンスケースを作りたい
7
Web
Server
DB
BFF
CI/CDを適用したプロジェクトについて
システムアーキテクチャ
App API
External
API
DB
Service 1
Service 2
Service N
• 既存システムを統合/API化
• APIアーキテクチャにはMSAを採用
• API化に合わせてAppも刷新
• Appアーキテクチャはモノリス
8
Web
Server
DB
BFF
システムアーキテクチャ
App API
External
API
DB
Service 1
Service 2
Service N
CI/CD対象
CI/CDを適用したプロジェクトについて
9
Development Tools
Orchestration Tool
Pipeline
Test Staging Prod
Compile UT Package Publish
Git Repo
コンテナの配置
運用監視リソース割当バックアップログ管理
etc
Image Registry
Package Repo
ITa Deploy
以下のようなCI/CD環境を構想
CI/CDを適用したプロジェクトについて
10
テスト自動化を考える上での二つの観点
• テスト実装そのもの
• 業務や業務データに強く依存し、どんなテストをすれば良いのかを
一般化することは難しい
• テスト実装コストと品質の兼ね合いが一つのポイント
➡︎ 今回のプロジェクトの観点を短めに説明する(当然唯一解ではない)
• テストを動かす環境
• テスト実装に関わらず、ある程度一般化することが可能
• ポータビリティーとスケーラビリティーがポイント
➡︎ 幅広く適用できる構成を詳しく説明する
CI/CDを適用したプロジェクトについて
11
Javaの
テスト実装について
12
Javaのテスト実装について
3つのこだわりポイント
1. テスト実施観点の住み分け
2. 実装方法ごとにテストのレベル感を変える
3. テストデータは全て構造化されたフォーマットを使用する
品
質
コスト
• 実装コストと品質が比例しなくなる
損益分岐点のようなものが存在する
• 担保しなくてはいけない品質は満たしつつ、
妥当な実装コストを見出したい
13
Javaのテスト実装について
1. テスト実施観点の住み分け
対象 観点 内容 CIでの実施
Test
静的
解析
• 全コード
静的コード
解析
• Checkstyle
• SpotBugs
必須
UT
• Controller
• Service
• Repository
ホワイトボックス
• 各レイヤーごとの単体テスト
• ホワイトボックスの観点
• C1 100%を目指す
必須
ITa • Functional ブラックボックス
• 一気通貫の機能テスト
• ブラックボックスの観点
• パラメータ網羅を目指す
部分的
14
Javaのテスト実装について
Compile
Run Unit Test
Build
Run ITa Test
Publish Artifacts
• Checkstyle
• SpotBugs
• JUnit
• Jacoco
• ITaの正常系のみ実施
• スクリプトのメンテナンスが追いつかなくなり
自動化が回らなくなることも考慮
• シンプルな正常系のみをCI上では自動実行
1. テスト実施観点の住み分け
15
カスタム実装
API
Controller
Service
Repository
Controller
Service Logic
DAO
共
通
機
能
Entity
DTO
Service
Client
Request
DTO
Response
DTO
Javaのテスト実装について
2. 実装方法ごとにテストのレベル感を変える 自動生成
16
自動生成
クラス
• 正常系1ケースのみ実装する
• カバレッジ網羅が目的
• (UTが書いてある安心感)
カスタム実装
クラス
• 正常系と異常系を網羅的に実装する
• C1 100%を目標にする
• C2 は基本的に考慮しない
Controller
Service
Service Client
DAO
Logic
Javaのテスト実装について
2. 実装方法ごとにテストのレベル感を変える
17
Javaのテスト実装について
3. テストデータには全て構造化されたフォーマットを使用
API
Controller
• Request
• Response
• Query param
Service
• Request
• DTO
• Response
Repository
• DTO
• DB Data
→ JSON
→ JSON
→ TXT
→ JSON
→ JSON
→ JSON
→ JSON
→ CSV
構造化されたテストデータ
Reviewerが
データを把握しやすい
テストコードと
テストデータを切り離せる
変更箇所が明確になる
⭕️
⭕️
⭕️
18
Javaのテスト実装について
テストコード(Controller)
@Test
public void ID001_selectPets_正常系パラメータ指定あり() throws Exception {
List<PetResponse> actualResponse = TestDataLoader.loadJsonAsObject(
RESOURCE_PATH + "/case001/response.json", new TypeReference<List<PetResponse>>() {});
when(petService.selectAll(any(PetRequestQuery.class), anyList(), anyList(),
any(RowBounds.class))).thenReturn(actualResponse);
String query = TestDataLoader.loadJsonAsString(RESOURCE_PATH + "/case001/query.txt");
String actualJson = TestDataLoader.loadJsonAsString(RESOURCE_PATH + "/case001/response.json");
this.mockMvc.perform(get(
"/api/v1/customers/pets?" + query))
.andExpect(status().isOk())
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
.andExpect(content().json(actualJson));
verify(petService, times(1)).selectAll(queryCaptor.capture(), fieldsCaptor.capture(),
sortsCaptor.capture(), rowBoundsCaptor.capture());
assertEquals(Arrays.asList(1, 2), queryCaptor.getValue().getSeq());
assertEquals(Arrays.asList("ぽち", "たま"), queryCaptor.getValue().getName());
assertEquals(Arrays.asList(1, 2), queryCaptor.getValue().getPetTypeId());
}
19
Javaのテスト実装について
テストコード(Repository)
@Test
public void ID005_insertSelective_正常系() throws Exception {
databaseSetup();
PetDto dto = TestDataLoader.loadJsonAsObject(RESOURCE_PATH + "/case005/dto.json", PetDto.class);
int insertedCount = petDao.insertSelective(dto);
assertEquals(1, insertedCount);
IDataSet expectedDataset = new CsvDataSet(new File(FILE_PATH + "/case005"));
ITable expectedTable = expectedDataset.getTable("pet");
IDataSet databaseDataSet = databaseConnection.createDataSet();
ITable actualTable = databaseDataSet.getTable("pet");
Assertion.assertEquals(expectedTable, actualTable);
databseClear();
}
20
フルコンテナ構成の
CI/CD環境について
21
フルコンテナ構成のCI/CD環境について
プロジェクト概要
• 既存システムを統合し、新たなサービス基盤を構築するプロジェクト
• APIにはMSA(Microservice Architecture)を採用
• ドメイン単位でCI/CDができる開発環境が必要
• 開発手法はWF型
• 想定される仕様変更に耐えられる品質ゲートを設けたい
お客様
• CI/CDの必要性を認識されていて、取り組みに積極的
• 他のプロジェクトに横展開できるリファレンスケースを作りたい
【再掲】
22
フルコンテナ構成のCI/CD環境について
CI/CD環境を構築する上で実現したいこと
• 実現したいこと
1. 開発中のバグを早期に発見し、品質を担保する品質ゲートの構築
2. 横展開できるリファレンスケース
• 他のプロジェクトにも適用可能なポータビリティー
• 大規模のプロジェクトにも適用可能なスケーラビリティー
23
フルコンテナ構成のCI/CD環境について
1. 開発中のバグを早期発見し、品質を担保する品質ゲートの構築
目標:
正常なコードおよび実行可能なモジュールが常に用意できていること
1.1 実行可能であることが担保できるパイプラインを設定する
➡︎ DBを含むテスト、ITa相当のテストもCIの対象とする
1.2 バグが混在するコードはmasterにマージさせない
➡︎ featureブランチもCIの対象にする
24
フルコンテナ構成のCI/CD環境について
Compile
Run Maven Test
Build
Run SoapUI Test
Publish Artifacts
DBを含むUT
の実行
下記を公開
• Git tag
• Docker image
• Maven artifact
Maven artifactと
Docker Imageを生成
SoapUIによる
ITaテスト実行
Gitへのpushを
トリガーに起動
1.1 DB/ITaを含めたパイプライン設計
25
Linux
Open JDK
Maven
Jenkins Slave
フルコンテナ構成のCI/CD環境について
Compile
Run Maven Test
Build
Run SoapUI Test
Publish Artifacts
.class
Compileが通ることを確認
mvn compile
git clone
.java
GitLab
1.1 DB/ITaを含めたパイプライン設計
26
フルコンテナ構成のCI/CD環境について
Compile
Run Maven Test
Build
Run SoapUI Test
Publish Artifacts Linux
Open JDK
Maven
mvn test が通ることの確認
mvn test
.java
Jenkins Slave
Linux
PostgreSQL
DB
PostgreSQL
docker run
1.1 DB/ITaを含めたパイプライン設計
27
フルコンテナ構成のCI/CD環境について
Compile
Run Maven Test
Build
Run SoapUI Test
Publish Artifacts Linux
Open JDK
Maven
.war, Dockerイメージ を生成
mvn clean package –DskipTests=true
docker build
Linux
JDK
Wildfly
Wildfly
.war.java
Jenkins Slave
1.1 DB/ITaを含めたパイプライン設計
28
mockservicerunner.sh
フルコンテナ構成のCI/CD環境について
Compile
Run Maven Test
Build
Run SoapUI Test
Publish Artifacts
Linux
Open JDK
Maven
Jenkins
ITaテストが通ることを確認
Linux
JDK
Wildfly
Wildfly
testrunner.sh
docker-compose up –build -d
junit ‘TEST*.xml'
Jenkins Slave
Linux
PostgreSQL
DB
PostgreSQL
Linux
SoapUI
Soap UI
1.1 DB/ITaを含めたパイプライン設計
29
Nexus
フルコンテナ構成のCI/CD環境について
Compile
Run Maven Test
Build
Run SoapUI Test
Publish Artifacts Linux
Open JDK
Maven
GitLab
ソースコードのタグをGitLabに格納
テスト済みのモジュールとDockerイメージをNexusに格納
mvn deploy –DskipTests=true
docker push …
git push –f –tags …
Jenkins Slave
1.1 DB/ITaを含めたパイプライン設計
30
フルコンテナ構成のCI/CD環境について
Compile
Run Maven Test
Build
Run SoapUI Test
Publish Artifacts
1.1 DB/ITaを含めたパイプライン設計
Linux
PostgreSQL
DB
PostgreSQL
Linux
SoapUI
Soap UI
Linux
JDK
Wildfly
Wildfly
Linux
PostgreSQL
DB
PostgreSQL
DBテスト、ITa相当のテストをCIに含むことで
品質ゲートのクオリティが向上した
31
フルコンテナ構成のCI/CD環境について
1.2 パイプライン実行の対象
master
feature/#1
commit
feature/#2
commits for feature/#1
commits for feature/#2
merge commits merge commits
常にテスト済みのコードがMerge Requestされる
32
フルコンテナ構成のCI/CD環境について
CIに失敗したMerge Requestはマージできない
➡︎ masterにはCIが通ったものだけマージが可能
33
フルコンテナ構成のCI/CD環境について
CIに失敗したMerge Requestはマージできない
➡︎ masterにはCIが通ったものだけマージが可能
34
フルコンテナ構成のCI/CD環境について
1. 開発中のバグを早期発見し、品質を担保する品質ゲートの構築
目標:
正常なコードおよび実行可能なモジュールが常に用意できていること
1.1 実行可能であることを担保できるパイプラインを設定する
➡︎ DBを含むテスト、ITa相当のテストもCIの対象とする
1.2 バグが混在するコードはmasterにマージさせない
➡︎ featureブランチもCIの対象にする
35
フルコンテナ構成のCI/CD環境について
2. 横展開できるリファレンスケース
目標:
プロジェクト規模、CI/CD実行環境(オンプレ/クラウド)に関わらず
適用可能なリファレンスケースを作る
2.1 出来るだけ実行環境・テストツールにロックインされないこと
➡︎ OSSとコンテナを用いてポータビリティーを確保
2.2 プロジェクト規模に応じてスケール可能なテスト実行方法
➡︎ テストにコンテナを用いてスケーラビリティーを確保
36
フルコンテナ構成のCI/CD環境について
テストツール用VM Jenkins Slave用VM
RHEL
Redmine
Jenkins
GitLab
Nexus
Docker Registry
Maven Repository
RHEL
Docker Engine
Wildfly PostgresSQL
SoapUI
Driver Stub
Jenkins Slave
2.1 出来るだけ実行環境・テストツールにロックインされないこと
全てOSSで構成されている
➡︎ 実行環境に制約はない
37
Redmine
Jenkins
GitLab
Nexus
Docker Registry
Maven Repository
Docker Engine
Wildfl
y
PostgresSQL
SoapUI
Driver Stub
Jenkins Slave
Redmine
Jenkins
GitLab
Nexus
Docker Registry
Maven Repository
Docker Engine
Wildfl
y
PostgresSQL
SoapUI
Driver Stub
Jenkins Slave
フルコンテナ構成のCI/CD環境について
2.1 出来るだけ実行環境・テストツールにロックインされないこと
Redmine
Jenkins
GitLab
Nexus
Docker Registry
Maven Repository
Docker Engine
Wildfl
y
PostgresSQL
SoapUI
Driver Stub
Jenkins Slave
On premises
オンプレ/クラウドに関わらず
構築可能
38
フルコンテナ構成のCI/CD環境について
チケット管理
ジョブ管理
ソース管理
リポジトリ
Docker Registry
Maven Repository
Docker Engine
Wildfly PostgresSQL
SoapUI
Driver Stub
Jenkins Slave
2.1 出来るだけ実行環境・テストツールにロックインされないこと
テストツールにはあえて自由度を持たせて
コンテナのみ流用するという考え方もできる
※ただし、ジョブなどはツールに合わせて一から実装する必要がある
39
フルコンテナ構成のCI/CD環境について
2.1 出来るだけ実行環境・テストツールにロックインされないこと
チケット管理
ジョブ管理
ソース管理
リポジトリ
Docker Registry
Maven Repository
Wildfly PostgresSQL
SoapUI
Driver Stub
Delivery Pipeline
Managed GitLab
Cloud Object Storage
Container Registry
Docker
Engine
テストのコンセプトと
コンテナは流用可能
40
フルコンテナ構成のCI/CD環境について
2.2 プロジェクト規模に応じてスケール可能なテスト実行方法
Compile UT Package PublishITa Deploy
Compile UT Package PublishITa Deploy
Compile UT Package PublishITa Deploy
一つのDB・スタブを共用する
➡︎ パイプラインのプロセスを並列実行できない
テスト用
DB テスト用スタブ
【従来の方法】
41
フルコンテナ構成のCI/CD環境について
2.2 プロジェクト規模に応じてスケール可能なテスト実行方法
Compile UT Package PublishITa Deploy
Compile UT Package PublishITa Deploy
Compile UT Package PublishITa Deploy
一連のパイプラインのプロセス1回ごとに独立してコンテナが起動する
➡︎ 並列実行に機能的な制限はない
【今回の方法】
42
フルコンテナ構成のCI/CD環境について
2.2 プロジェクト規模に応じてスケール可能なテスト実行方法
Compile UT Package PublishITa Deploy
Compile UT Package PublishITa Deploy
Compile UT Package PublishITa Deploy
Compile UT Package PublishITa Deploy
・
・
・
物理リソースの限界までスケールさせることが可能
※ただし、オーケストレーション・ツールは必須性が高い(後述)
【今回の方法】
43
フルコンテナ構成のCI/CD環境について
2. 横展開できるリファレンスケース
目標:
プロジェクト規模、CI/CD実行環境(オンプレ/クラウド)に関わらず
適用可能なリファレンスケースを作る
2.1 出来るだけ実行環境・テストツールにロックインされないこと
➡︎ OSSとコンテナを用いてポータビリティーを確保
2.2 プロジェクト規模に応じてスケール可能なテスト実行方法
➡︎ テストにコンテナを用いてスケーラビリティーを確保
44
フルコンテナ構成のCI/CD環境について
実践的なプラクティスをいくつかご紹介
45
フルコンテナ構成のCI/CD環境について
• Docker outside of Docker (DooD)
• Slaveのコンテナ上で実行されたDockerコマンドは
ホスト側のDocker環境で実行される
Docker Engine
Jenkins Slave
/var/run/docker.sock
/var/run/docker.sock
mount
Wildfly PostgreSQL
$ docker run
Docker実行方法
ホスト側で
起動する
46
フルコンテナ構成のCI/CD環境について
パイプラインの設定はソースコードと一緒にリポジトリで管理
• ソースコード
• テストデータ
• JSON
• CSV
• SQL
• Jenkisfile
• Dockerfile
• アプリ
• DB
• スタブ
Git
• ソースコード、テストデータ、Dockerfile、Jenkinsfile等は
ドメインごとにGitリポジトリで管理している
• Infrastructure as Codeの観点
• ローカル環境とCI/CD環境で同一のテストが実行可能
(ローカル環境でDockerを使ったテストが行える)
・・・
• ソースコード
• テストデータ
• JSON
• CSV
• SQL
• Jenkisfile
• Dockerfile
• アプリ
• DB
• スタブ
Domain 1 Domain N
47
フルコンテナ構成のCI/CD環境について
パイプラインの成果物は全て一意のリリースID持たせて管理する
Gitタグ
Nexus
Maven Artifact ID
Dockerイメージのタグ
v_x.x.x Git
• MavenのArtifact ID、Dockerイメージのタグ、Gitリポジトリのタグを揃える
• 問題が発生したとき、以前のリリースにロールバックできる
パイプラインの
Publish処理で採番
48
アジェンダ
• SI現場のよくある問題
• Microservice プロジェクトについて
• Javaのテスト実装について
• フルコンテナ構成のCI/CD環境について
• まとめ
49
まとめ
50
まとめ
フルコンテナ構成のCI/CD環境を構築した
• DBテスト、ITa相当のテストを含んだパイプラインを構築できた
• ポータビリティとスケーラビリティを兼ね備えたリファレンスケースを作成できた
課題
• オーケストレーション・ツールの必要性が高い
51
課題
• 現状
• 現在の実装ではGitリポジトリ単位で固定のポートを利用
• Jenkinsの処理実行時に読み込むプロパティを切り替える
• ポートも指定してアクセスする
• 今後
• オーケストレーション・ツールの提供する機能に応じて実装を行う
• サービスはポート指定なしでアクセスできるようにする
• ポートとホストを紐付け、デプロイされているアプリケーションは紐付けを変更
するだけで即座にサービスとして公開できる
オーケストレーション・ツールの必要性
① Port Binding
パイプラインプロセスごとに起動するコンテナに割り当てるポートの管理
SERVICE NAME PORT
/XXXX APP:8080
/YYYY APP:8081
52
課題
オーケストレーション・ツールの必要性
② コンテナおよびサービス稼動確認
(例)SoapUIコンテナ上でスタブが起動しているか?のチェック
• 現状
• Jenkinsfile内では起動時間の実績値を元にsleepで待つ実装(イケテナイ)
• 想定する時間内で起動しない場合にはジョブは失敗してしまう
• 今後
• オーケストレーション・ツールの提供する機能に応じて実装を行う
• Liveness Probe:コンテナが実行中でなければ再起動を実施
• Readiness Probe:サービス提供可能かチェックしエンドポイントに公開
This container is OK!
This service is reachable!
No response.. Restart!
53
Development Tools
Orchestration Tool
Pipeline
Test Staging Prod
Compile UT Package Publish
Git Repo
コンテナの配置
運用監視リソース割当バックアップログ管理
etc
Image Registry
Package Repo
ITa Deploy
オーケストレーション・ツールを用いた理想的な構成を作りたい
課題
54
ご静聴ありがとうございました
川沼 大輝
Twitter: @Santea3173
Email: kawanuma@jp.ibm.com
横山 夏実
Email: nykym@jp.ibm.com
55
EOF

More Related Content

What's hot

What's hot (20)

今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
 
Dockerfileを改善するためのBest Practice 2019年版
Dockerfileを改善するためのBest Practice 2019年版Dockerfileを改善するためのBest Practice 2019年版
Dockerfileを改善するためのBest Practice 2019年版
 
さくっと理解するSpring bootの仕組み
さくっと理解するSpring bootの仕組みさくっと理解するSpring bootの仕組み
さくっと理解するSpring bootの仕組み
 
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
 
初心者向けMongoDBのキホン!
初心者向けMongoDBのキホン!初心者向けMongoDBのキホン!
初心者向けMongoDBのキホン!
 
40歳過ぎてもエンジニアでいるためにやっていること
40歳過ぎてもエンジニアでいるためにやっていること40歳過ぎてもエンジニアでいるためにやっていること
40歳過ぎてもエンジニアでいるためにやっていること
 
新たなgitのブランチモデル「Git Feature Flow」!Git Flow,Git Hub Flow,Git Lab Flowを超えれるか?
新たなgitのブランチモデル「Git Feature Flow」!Git Flow,Git Hub Flow,Git Lab Flowを超えれるか?新たなgitのブランチモデル「Git Feature Flow」!Git Flow,Git Hub Flow,Git Lab Flowを超えれるか?
新たなgitのブランチモデル「Git Feature Flow」!Git Flow,Git Hub Flow,Git Lab Flowを超えれるか?
 
Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編
 
20210127 今日から始めるイベントドリブンアーキテクチャ AWS Expert Online #13
20210127 今日から始めるイベントドリブンアーキテクチャ AWS Expert Online #1320210127 今日から始めるイベントドリブンアーキテクチャ AWS Expert Online #13
20210127 今日から始めるイベントドリブンアーキテクチャ AWS Expert Online #13
 
MongoDBが遅いときの切り分け方法
MongoDBが遅いときの切り分け方法MongoDBが遅いときの切り分け方法
MongoDBが遅いときの切り分け方法
 
信頼性とアジリティを同時に上げろ!モノタロウのカナリアリリース導入.pdf
信頼性とアジリティを同時に上げろ!モノタロウのカナリアリリース導入.pdf信頼性とアジリティを同時に上げろ!モノタロウのカナリアリリース導入.pdf
信頼性とアジリティを同時に上げろ!モノタロウのカナリアリリース導入.pdf
 
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!
 
開発速度が速い #とは(LayerX社内資料)
開発速度が速い #とは(LayerX社内資料)開発速度が速い #とは(LayerX社内資料)
開発速度が速い #とは(LayerX社内資料)
 
Azure API Management 俺的マニュアル
Azure API Management 俺的マニュアルAzure API Management 俺的マニュアル
Azure API Management 俺的マニュアル
 
Docker Compose 徹底解説
Docker Compose 徹底解説Docker Compose 徹底解説
Docker Compose 徹底解説
 
ドメイン駆動設計 本格入門
ドメイン駆動設計 本格入門ドメイン駆動設計 本格入門
ドメイン駆動設計 本格入門
 
食べログのフロントエンドエンジニアってめっちゃ大変やねん・・・
食べログのフロントエンドエンジニアってめっちゃ大変やねん・・・食べログのフロントエンドエンジニアってめっちゃ大変やねん・・・
食べログのフロントエンドエンジニアってめっちゃ大変やねん・・・
 
マルチテナント化で知っておきたいデータベースのこと
マルチテナント化で知っておきたいデータベースのことマルチテナント化で知っておきたいデータベースのこと
マルチテナント化で知っておきたいデータベースのこと
 
怖くないSpring Bootのオートコンフィグレーション
怖くないSpring Bootのオートコンフィグレーション怖くないSpring Bootのオートコンフィグレーション
怖くないSpring Bootのオートコンフィグレーション
 
Data platformdesign
Data platformdesignData platformdesign
Data platformdesign
 

Similar to SI現場のテスト自動化への挑戦〜フルコンテナ構成のCI/CD環境〜

Similar to SI現場のテスト自動化への挑戦〜フルコンテナ構成のCI/CD環境〜 (20)

GitHub + Travis CI + COVERALLS (+ Maven) でCI環境を2時間でつくる
GitHub + Travis CI + COVERALLS (+ Maven) でCI環境を2時間でつくるGitHub + Travis CI + COVERALLS (+ Maven) でCI環境を2時間でつくる
GitHub + Travis CI + COVERALLS (+ Maven) でCI環境を2時間でつくる
 
2021/03/19 パブリッククラウドを活かす運用プロセス自動化
2021/03/19 パブリッククラウドを活かす運用プロセス自動化2021/03/19 パブリッククラウドを活かす運用プロセス自動化
2021/03/19 パブリッククラウドを活かす運用プロセス自動化
 
20140605_じどうかの窓口_CloudBees_Jenkins
20140605_じどうかの窓口_CloudBees_Jenkins20140605_じどうかの窓口_CloudBees_Jenkins
20140605_じどうかの窓口_CloudBees_Jenkins
 
.NET アプリを改善して実践する継続的インテグレーション
.NET アプリを改善して実践する継続的インテグレーション.NET アプリを改善して実践する継続的インテグレーション
.NET アプリを改善して実践する継続的インテグレーション
 
AITCシニア技術者勉強会 「今さら聞けないWebサイト開発」 vol2
AITCシニア技術者勉強会 「今さら聞けないWebサイト開発」 vol2AITCシニア技術者勉強会 「今さら聞けないWebサイト開発」 vol2
AITCシニア技術者勉強会 「今さら聞けないWebサイト開発」 vol2
 
Cloud Days Tokyo 2015 "オンプレミス環境のクラウド化と運用を楽にする OpenStack ソリューション ~ハイブリッド・クラウドを...
Cloud Days Tokyo 2015 "オンプレミス環境のクラウド化と運用を楽にする OpenStack ソリューション ~ハイブリッド・クラウドを...Cloud Days Tokyo 2015 "オンプレミス環境のクラウド化と運用を楽にする OpenStack ソリューション ~ハイブリッド・クラウドを...
Cloud Days Tokyo 2015 "オンプレミス環境のクラウド化と運用を楽にする OpenStack ソリューション ~ハイブリッド・クラウドを...
 
Japan Container Day 2018
Japan Container Day 2018Japan Container Day 2018
Japan Container Day 2018
 
CI/CD Pipeline を考える 〜KubeCon 2017 + CyberAgent の最大公倍数〜
CI/CD Pipeline を考える 〜KubeCon 2017 + CyberAgent の最大公倍数〜CI/CD Pipeline を考える 〜KubeCon 2017 + CyberAgent の最大公倍数〜
CI/CD Pipeline を考える 〜KubeCon 2017 + CyberAgent の最大公倍数〜
 
DOO-003_Jenkins 作者が語る、Docker コンテナによる継続的デリバリのオススメと新機能のご紹介
DOO-003_Jenkins 作者が語る、Docker コンテナによる継続的デリバリのオススメと新機能のご紹介DOO-003_Jenkins 作者が語る、Docker コンテナによる継続的デリバリのオススメと新機能のご紹介
DOO-003_Jenkins 作者が語る、Docker コンテナによる継続的デリバリのオススメと新機能のご紹介
 
DevOps on Azure Kubernetes
DevOps on Azure KubernetesDevOps on Azure Kubernetes
DevOps on Azure Kubernetes
 
GitLab Auto DevOps with Container CI/CD
GitLab Auto DevOps with Container CI/CDGitLab Auto DevOps with Container CI/CD
GitLab Auto DevOps with Container CI/CD
 
どっちの VS ショー / 伝統の Visual Studio 2019、人気の Visual Studio Code
どっちの VS ショー / 伝統の Visual Studio 2019、人気の Visual Studio Codeどっちの VS ショー / 伝統の Visual Studio 2019、人気の Visual Studio Code
どっちの VS ショー / 伝統の Visual Studio 2019、人気の Visual Studio Code
 
ハイブリットクラウド環境におけるモダンアプリケーション開発
ハイブリットクラウド環境におけるモダンアプリケーション開発ハイブリットクラウド環境におけるモダンアプリケーション開発
ハイブリットクラウド環境におけるモダンアプリケーション開発
 
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
 
はじめてのAzure Web App for Containers! -コンテナの基礎から DevOps 環境の構築まで-
はじめてのAzure Web App for Containers! -コンテナの基礎から DevOps 環境の構築まで-はじめてのAzure Web App for Containers! -コンテナの基礎から DevOps 環境の構築まで-
はじめてのAzure Web App for Containers! -コンテナの基礎から DevOps 環境の構築まで-
 
Amazon ECSとDevOps
Amazon ECSとDevOpsAmazon ECSとDevOps
Amazon ECSとDevOps
 
でぶさみ夏2013 キーノート オレンジレンジャーの資料
でぶさみ夏2013 キーノート オレンジレンジャーの資料でぶさみ夏2013 キーノート オレンジレンジャーの資料
でぶさみ夏2013 キーノート オレンジレンジャーの資料
 
Microsoft DevOps Hackathon (Sep 2015) Team 4 Presentation
Microsoft DevOps Hackathon (Sep 2015) Team 4 PresentationMicrosoft DevOps Hackathon (Sep 2015) Team 4 Presentation
Microsoft DevOps Hackathon (Sep 2015) Team 4 Presentation
 
Kubernetesの良さを活かして開発・運用!Cloud Native入門 / An introductory Cloud Native #osc19tk
Kubernetesの良さを活かして開発・運用!Cloud Native入門 / An introductory Cloud Native #osc19tkKubernetesの良さを活かして開発・運用!Cloud Native入門 / An introductory Cloud Native #osc19tk
Kubernetesの良さを活かして開発・運用!Cloud Native入門 / An introductory Cloud Native #osc19tk
 
Azure DevOps 関西 2019 - Overview
Azure DevOps 関西 2019 - OverviewAzure DevOps 関西 2019 - Overview
Azure DevOps 関西 2019 - Overview
 

More from Daiki Kawanuma (6)

巨大なDXの潮流の中で、開発現場からできることはあるか
巨大なDXの潮流の中で、開発現場からできることはあるか巨大なDXの潮流の中で、開発現場からできることはあるか
巨大なDXの潮流の中で、開発現場からできることはあるか
 
エンプラに Kubernetes を 導入してみて分かった 4つの Lessons Learned
エンプラに Kubernetes を 導入してみて分かった 4つの Lessons Learnedエンプラに Kubernetes を 導入してみて分かった 4つの Lessons Learned
エンプラに Kubernetes を 導入してみて分かった 4つの Lessons Learned
 
Legacy App Operator というパワーワードで Cloud Native 時代を乗り越えられないか考えてみた
Legacy App Operator というパワーワードで Cloud Native 時代を乗り越えられないか考えてみたLegacy App Operator というパワーワードで Cloud Native 時代を乗り越えられないか考えてみた
Legacy App Operator というパワーワードで Cloud Native 時代を乗り越えられないか考えてみた
 
アプリケーション・デベロッパー 〜Xamarinによるクロスプラットフォーム開発〜
アプリケーション・デベロッパー 〜Xamarinによるクロスプラットフォーム開発〜アプリケーション・デベロッパー 〜Xamarinによるクロスプラットフォーム開発〜
アプリケーション・デベロッパー 〜Xamarinによるクロスプラットフォーム開発〜
 
ゆるふわ Xamarin Tips
ゆるふわ Xamarin Tipsゆるふわ Xamarin Tips
ゆるふわ Xamarin Tips
 
Xamarin 初心者の勘所~Twitter 検索アプリを作った感想~
Xamarin 初心者の勘所~Twitter 検索アプリを作った感想~Xamarin 初心者の勘所~Twitter 検索アプリを作った感想~
Xamarin 初心者の勘所~Twitter 検索アプリを作った感想~
 

Recently uploaded

Recently uploaded (11)

論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 

SI現場のテスト自動化への挑戦〜フルコンテナ構成のCI/CD環境〜