【Maven】Azure DevOpsのPipelinesを使ってみた

こんにちは。サイオステクノロジーの川田です。

今回は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で作成した仮想マシン情報を入力する想定です。

① パブリックIPを入力
② Private Keyを設定した場合はファイルを選択
③ 設定したUsernameを入力
④ 設定したPasswordを入力
⑤ この接続情報の名前を入力 例:learning-java

 

先ほど入力した情報が保存されました。

以上で事前準備は完了です。
次は「Pipelines」を触っていきます。

Pipeline作成

ではPipelineを作成していきます。
左側にある「Pipeline」→ 中央にある「Create Pipeline」をクリックします。

クリックすると以下の画面が表示されます。
今回は「GitHub Enterprise Server」を選択します。

 

「Connect to GitHub Enterprise Server」をクリックすると
情報を入力する画面になるのでURLとアクセストークンを入力してください。

アクセストークンについては☞「個人アクセストークンを使用する」をご覧ください。

YAMLファイル作成

用意してあるリポジトリーをクリックすると、このような画面になります。
YAMLファイルを作成していきたいと思います!

Starter pipeline : 新しく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になる場合
私の場合は以下のエラーが出ました。
##[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」をクリックします。

Copy files over SSH : 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にプッシュしたら、テストまで自動で行ってくれるなんて!非常にありがたいですね!

ご覧いただきありがとうございます! この投稿はお役に立ちましたか?

役に立った 役に立たなかった

1人がこの投稿は役に立ったと言っています。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です