0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Azure Devops (Pipelines) でテスト、ビルド、イメージプッシュをする

Last updated at Posted at 2022-11-13

はじめに

記載情報は CI/CD に関連します。
実務上関わった環境・機能を身近な情報としてお届けしたく、投稿をはじめました。
各学習上、お金のかからない方法を選択していきます。

以下の手順を実施することで、パイプラインからのテスト、ビルド、イメージプッシュをできるようにします。

対象者と関連環境・機能

この記事は下記のような人を対象にしています。

  • CI/CD 初学者
  • プログラミング初学者
  • 駆け出しエンジニア

記載している環境・機能は以下です。

  • Azure Devops
  • Azure Pipelines
  • Java
  • Gradle
  • Docker

本記事の趣旨

必要処理をべた書きしているのみにつき、あくまでも動かす過程の参考程度の情報です。
本記事では「こんなこといちいち手順みながらサーバ上でシェル叩くのか?」といったあたりについての解消の一助になれば、といった意図でのご紹介とさせていただきます。
最終的に「Azure-Pipelines がベストな方法か?」といえば、必ずしもそうではないです。
利用までのハードルが低めで助かる印象もありますが、Azure-Pipelines 固有のタスク挙動に振り回された挙句、別ツールでの自動化案も出るような場合、結局各タスクはシェルスクリプトとして別に切り出しておいた方が汎用性はあります。(ログ出力とかも自前で工夫する形と思いますが、そこ含めて何が自環境にあっているか、の判断になると思います。)
自動化の方法が複数ある中で、一番楽できそうな(コストが下がりそうな)方法抽出判断の参考になっていたら幸いです。

対象 判断
横展開、量産の有無 対応の必要があり次第、対応のしやすさがコストに直結
作業者の手間 開発者には開発に注力してもらう必要があるので、即座に、繰り返し実行しやすいことが重要
運用側の手間 開発側に作業環境連携して手順送って、使い方について問い合わせもまあまあ来る、という事態を避けられそうか

準備

今回は github 上のパイプラインを Azure Pipelines から実行します。
下記が準備となりますが、振り返りが不要な場合にはお読み飛ばしください。

ソース

本作業で利用するパイプラインとなります。
azure-Pipelines

20_application-springboot-build.yml

trigger: ※パイプラインを起動するトリガーの設定。本サンプルでは手動での実行のみを想定。
  - none

parameters:
  - name: BuildTag
    displayName: BuildTag (ex x.x.x)  ※現場ではBuildTagが自動でカウントアップされる仕組みにより、どういう結果であれ履歴保持されます。ここでは一旦最短でパラメータ渡し。
    type: string
    default: ""

pool:
  vmImage: "ubuntu-latest" ※MS提供のVMでパイプライン実行を行う。

resources:
  repositories:
  - repository: 'application-springboot' ※githubからとってくる対象リポジトリ
    type: github ※githubからとってくる
    ref: main ※githubからとってくるブランチ
    endpoint: '20220501' ※作成したサービスコネクション名
    name: 'oad3/application-springboot'  ※githubからとってくる対象リポジトリ

stages:
  - stage: BuildStage
    jobs:
      - job: BuildJob
        displayName: "Gradle Build And Docker Build Push"
        continueOnError: false
        workspace:
          clean: outputs
        steps:
          - checkout: self ※パイプラインを置いているリポジトリ。必要に応じてチェックアウト
          - checkout: application-springboot ※ビルド対象リポジトリ。
          - bash: |
              echo $JAVA_HOME_11_X64 ※MS提供のubuntuイメージ上におけるJAVA11のパス
          - task: Gradle@2
            displayName: Gradle Build and Test
            inputs:
              gradleWrapperFile: "./application-springboot/gradlew" ※ビルド対象リポジトリ配置したgradlewを利用してビルド。gradleバージョンを自分でコントロール可
              workingDirectory: "./application-springboot" ※作業ディレクトリ
              tasks: "build test" ※gradleに「buildとtestタスクを実行せよ」との指示
              publishJUnitResults: true ※JUnitで試験した結果をパブリッシュ
              testResultsFiles: "**/TEST-*.xml" ※JUnitで試験した結果をパブリッシュ
              javaHomeOption: "path" ※利用するJAVAはパスを指定するから、それでビルド
              jdkDirectory: "$(JAVA_HOME_11_X64)" ※「javaHomeOption == Path」のときに指定必須。ここのでビルド
              sonarQubeRunAnalysis: false ※現場ではsonarQubeもつかっているけれどここでは省略。静的解析
              spotBugsAnalysis: false ※現場ではspotBugsもつかっているけれどここでは省略。静的解析
            env:
              SYSTEM_ACCESSTOKEN: "$(System.AccessToken)" ※今回は省いてしまっているがビルド成果物をパブリッシュするときには利用
          - bash: |
              ls -la ./application-springboot/build/libs/
          - task: Docker@2 ※Docker login
            displayName: Login to Docker Hub
            inputs:
              command: login
              containerRegistry: "DockerRegistryServiceConnection"
          - task: Docker@2 ※Docker Build and Push
            displayName: Docker Build and Push
            inputs:
              Dockerfile: "./application-springboot/Dockerfile"
              command: buildAndPush
              repository: "oad3jp999/application-springboot"
              tags: "${{ parameters.BuildTag }}"
          - task: Docker@2 ※Docker logout
            displayName: Logout of Docker Hub
            inputs:
              command: logout
              containerRegistry: "DockerRegistryServiceConnection"

github 上のパイプラインを実行出来るようにサービスコネクション(Service connections)を作成する

  • github への接続認証のため、事前に個人アクセストークンを取得します。
  • github の個人アクセストークン取得後、サービスコネクションを作成作成します。
    ServiceConnections_001.png
    ServiceConnections_002.png
    ServiceConnections_003.png

Docker Hub にイメージプッシュ出来るようにサービスコネクション(Service connections)を作成する

作成したサービスコネクション(Service connections)を利用して、パイプラインを実行する

★★★ 要注意 ★★★
MS Hosted VM の利用申請が通っていないとパイプライン実行まで一日では終わらない可能性がありますが、少々腰を据えて準備ください。
※ご参考  
Azure Devops (PileLines) を無償、無料で使う

実行結果

  • Gradle での Build と Test に成功
    CreateBuildPipeline_001.png

  • Docker イメージの Build と Push に成功
    CreateBuildPipeline_002.png

  • Junit の結果がパブリッシュされている
    CreateBuildPipeline_003.png

  • Docker イメージ登録状況
    CreateBuildPipeline_004.png

関連記事

参考記事

Azure Pipelines を無料枠で使おうとして躓いた話
Azure Pipelines エージェント

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?