こんにちは。サイオステクノロジーの川田です。
今回はAzure DevOpsのPipelinesを使って、Javaのサンプルプログラムをビルドやデプロイ、テストを自動で行ってみたいと思います。
なにかのご参考になれば嬉しいです^^
Azure Pipelinesについて
Azure Pipelines使用することにより、ビルド、デプロイ、テストを自動で行ってくれます。
これまで手動で実施をしていたことを自動で行ってくれるのはとても助かりますね。
今回使用するツールや環境はこちらです。
- Java – Maven –
- GitHub Enterprise Server
- Azure Virtual Machines
ディレクトリ構成
今回の使用言語はJavaのMavenを使います。
ディレクトリ構成はこちらになります。
├── azure-pipelines.yml ├── pom.xml └── src ├── main │ └── java │ └── com │ └── example │ └── demo │ ├── HelloWorld.java └── test └── java └── com └── example └── demo └── HelloWorldTest.java
Mavenについての詳しい内容については☞「Mavenキホンのキ」をご覧ください!
テスト用として簡単にプログラムを作成しました。
- HelloWorld.java
package com.example.demo; public class HelloWorld { public static String inputHello() { return "Hello World!"; } }
- HelloWorldTest.java
import static org.junit.Assert.*; import com.example.demo.HelloWorld; import org.junit.Test; public class HelloWorldTest { @Test public void testInputName() { HelloWorld hello = new HelloWorld(); assertEquals("Hello World!", hello.inputHello()); } }
事前準備
テストまで成功したリソースを用意した仮想マシンにコピーをしたいと思います。
今回用に「learning-java」というプロジェクトを作成しました。
New service connection
左下の「Project setting」をクリックします。
クリックすると左側に「Service connections」をクリックします。
このような画面になるかと思います。
「Create service connection」をクリックします。
接続したいサービスを選択してください。
今回は検索ボックスに「SSH」を入力し、「Next」をクリックします。
接続したい情報を入力し「Save」をクリックします。
※今回はAzureで作成した仮想マシン情報を入力する想定です。
② Private Keyを設定した場合はファイルを選択
③ 設定したUsernameを入力
④ 設定したPasswordを入力
⑤ この接続情報の名前を入力 例:learning-java
先ほど入力した情報が保存されました。
以上で事前準備は完了です。
次は「Pipelines」を触っていきます。
Pipeline作成
ではPipelineを作成していきます。
左側にある「Pipeline」→ 中央にある「Create Pipeline」をクリックします。
クリックすると以下の画面が表示されます。
今回は「GitHub Enterprise Server」を選択します。
「Connect to GitHub Enterprise Server」をクリックすると
情報を入力する画面になるのでURLとアクセストークンを入力してください。
アクセストークンについては☞「個人アクセストークンを使用する」をご覧ください。
YAMLファイル作成
用意してあるリポジトリーをクリックすると、このような画面になります。
YAMLファイルを作成していきたいと思います!
Existing Azure Pipelines YAML file : 既にYAMLファイルが配置されている。※ブランチ選択可能
今回は新しく作成するため、「Starter pipeline」をクリックします。
初期のファイル内容は以下の通りとなっています。
「Save and run」をクリックすると、 azure-pipelines.ymlファイルがgitにプッシュされます。
# Starter pipeline # Start with a minimal pipeline that you can customize to build and deploy your code. # Add steps that build, run tests, deploy, and more: # https://aka.ms/yaml trigger: - master pool: vmImage: ubuntu-latest steps: - script: echo Hello, world! displayName: 'Run a one-line script' - script: | echo Add other tasks to build, test, and deploy your project. echo See https://aka.ms/yaml displayName: 'Run a multi-line script'
Pipelineを実行してみよう
試しにクリックしてみましょう!
下のラジオボタンはmasterブランチにコミットするか、新しくブランチを作成するかということになります。
ではmasterブランチにコミットしてみよう!ということでこのまま「Save and run」クリックします。
実行されると以下のような画面が表示されます。
成功するとJobのステータスがSuccessになります。
Jobをクリックすると詳細が表示されます!
一部ですが「Hello, world!」が出力されていることがわかります。
Starting: Run a one-line script ============================================================================== Task : Command line Description : Run a command line script using Bash on Linux and macOS and cmd.exe on Windows Version : 2.182.0 Author : Microsoft Corporation Help : https://docs.microsoft.com/azure/devops/pipelines/tasks/utility/command-line ============================================================================== Generating script. Script contents: echo Hello, world! ========================== Starting Command Output =========================== /usr/bin/bash --noprofile --norc /home/vsts/work/_temp/a79cba81-6046-43a4-954f-93456f25f2b4.sh Hello, world! Finishing: Run a one-line script
azure-pipelines.ymlもプッシュされています。
##[error]No hosted parallelism has been purchased or granted. To request a free parallelism grant, please fill out the following form https://aka.ms/azpipelines-parallelism-request
無料のアカウントは申請をしないと利用ができないようです。
というわけで記載があるURLに情報を入力して申請を出しました。
https://aka.ms/azpipelines-parallelism-request
2 、 3 営業日かかるようなので、注意が必要です!私は2営業日で完了メールがきました。
ブランチ作成
先ほどのラジオボタンで「Create a new branch for this commit」をクリックしてみます。
masterはそのままで「azure-pipelines」というブランチが作成され、YAMLファイルが追加されました!
どうなるのか気になったのでやってみました^^
ではYAMLファイルを修正していきます。
Mavenを使ってみよう
それではYAMLファイルを修正していきたいと思います。
editをクリックすると修正ができます。
カーソルを20行目にすることを忘れないでください。変な行に挿入されてしまいます><
右側にある検索ボックスに「Maven」と入力します。
2つ出てくると思いますが、認証の設定が必要な場合は「Maven Authenticate」をクリックします。
詳しくは☞「Maven 認証」をご覧ください。
今回は認証の設定が必要ないため、上の「Maven」をクリックします。
色々と設定が可能ですが、今回はデフォルトのまま「Add」をクリックします。
# Starter pipeline # Start with a minimal pipeline that you can customize to build and deploy your code. # Add steps that build, run tests, deploy, and more: # https://aka.ms/yaml trigger: - master pool: vmImage: ubuntu-latest steps: - script: echo Hello, world! displayName: 'Run a one-line script' - script: | echo Add other tasks to build, test, and deploy your project. echo See https://aka.ms/yaml displayName: 'Run a multi-line script' - task: Maven@3 inputs: mavenPomFile: 'pom.xml' publishJUnitResults: true testResultsFiles: '**/surefire-reports/TEST-*.xml' javaHomeOption: 'JDKVersion' mavenVersionOption: 'Default' mavenAuthenticateFeed: false effectivePomSkip: false sonarQubeRunAnalysis: false
下に追加されました!
それでは右上の「Save」をクリックしましょう!
※コミットするとpipelineが自動的に実行されます!
Jobを見ると先ほどにはなかったMavenが実行さていることがわかります。
ファイルをコピー
それでは仮想マシンにJavaのリソースをコピーしていきたいと思います。
Editをクリックして、YAMLファイルを修正します。
今回はコピーするため、「Copy files over SSH」をクリックします。
Install SSH key : SSH キーをインストール
SSH : マシンに接続し、コマンドやスクリプトを実行
SSH service connectionには事前準備で保存したデータを選択します。
Target folderはコピー先になります。
「Add」をクリックすると、追記されていることがわかります。
これで準備OKです!
Pipelineを実行
「Save」をクリックすると、実行します。
※完了まで少し時間がかかります。
コピーされているか確認してみます。
[test@xxxxxxx work]$ ls -la total 8 drwxrwxr-x. 5 test test 85 Aug 20 00:02 . drwxr-xr-x. 7 test test 199 Aug 19 23:39 .. -rw-rw-r--. 1 test test 912 Aug 20 00:00 azure-pipelines.yml drwxrwxr-x. 7 test test 146 Aug 20 00:00 .git -rw-rw-r--. 1 test test 2149 Aug 20 00:00 pom.xml drwxrwxr-x. 4 test test 30 Aug 20 00:00 src drwxrwxr-x. 7 test test 199 Aug 20 00:01 target
無事コピーされていました(*‘ω‘ *)
以上がコピーする方法でした。
おまけ
テストを実行する際に「Dockerを起動しないといけない」や「/etc/hostsに追記したい」などあると思います。
その場合どうしたらいいのかということで。
「Command line」を使いました。
例えばスクリプトの中に、ディレクトリを移動してDocker起動の処理を記載すれば実行されます。
- task: CmdLine@2 inputs: script: | cd .devcontainer docker-compose up -d
公式ページ☞「コマンドラインタスク」
まとめ
いかがでしたでしょうか。
今回初めてAzure DevOpsのPipelinesを使ってみました。
gitにプッシュしたら、テストまで自動で行ってくれるなんて!非常にありがたいですね!