ライブラリ開発者より指定されたバージョンを利用してアプリケーションを作る

# はじめに

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

以下の手順を実施することで、アプリケーション開発者がライブラリ開発者より指定されたバージョンを利用してアプリケーションを作る工程を模倣します。

## 対象者と関連環境・機能

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

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

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

- Java
- Spring Boot
- Spring Web
- Spring Tool Suite 4
- Gradle
- Azure DevOps
- Azure Artifacts

## 準備

|  No | 参照 URL                                                                                                                            |
| --: | ----------------------------------------------------------------------------------------------------------------------------------- |
|   1 | [Azure Devops (Artifacts) を無償、無料で使う](https://qiita.com/wf-kenji-ikeda/items/9c21859d8b5b6a63246e)                          |
|   2 | [Jar を作り、Azure Artifacts を利用して成果物を配布する](https://qiita.com/wf-kenji-ikeda/items/696bda335a8933abfcb3)                               |

## ライブラリ利用

### ソース

本作業実施後の状態となります。  
[ライブラリ利用](https://github.com/oad3/application-springboot/tree/feature/add-library-jar)

最新はこちらとなりますが、clone 後に状態を遡って確認頂けます。  
[main の最新](https://github.com/oad3/application-springboot)

### 実施した作業

発生差分は[実物](https://github.com/oad3/application-springboot/pull/2/files)を確認してもらう方が早いかもしれません。  
概要としては以下

- ビルド時の依存対象として、ライブラリを指定

```build.gradle
dependencies {
	implementation 'LibraryJar-groupId:library-jar:0.0.2'
```

- [Jar を作り、Azure Artifacts を利用して成果物を配布する](https://qiita.com/wf-kenji-ikeda/items/696bda335a8933abfcb3) の対応と同様に、取得用のトークンの取得と設定を行います。

```build.gradle
allprojects {
	repositories {
		maven {
			url 'https://pkgs.dev.azure.com/SecOrgOad3/cicd-training-env/_packaging/cicd-training-env-feed-001/maven/v1'
			credentials {
				username "cicd-training-env-feed-001"
				password System.getenv("SYSTEM_ACCESSTOKEN") != null ? System.getenv("SYSTEM_ACCESSTOKEN") : vstsMavenAccessToken
			}
		}
	}
}
```

- Spring Web アプリにてライブラリを利用

```build.gradle
application-springboot>gradlew bootRun

> Task :bootRun
 =========================================    ※
 Hello LibraryJar!                            ※ここが出てれば想定通り
 =========================================    ※


  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::                (v2.6.7)

2022-05-14 07:50:17.133  INFO 12828 --- [           main] com.example.demo.DemoApplication         : Starting DemoApplication using Java 11.0.2 on senju-HP with PID 12828 (\application-springboot\build\classes\java\main started by senju in \application-springboot)
2022-05-14 07:50:17.133  INFO 12828 --- [           main] com.example.demo.DemoApplication         : No active profile set, falling back to 1 default profile: "default"
2022-05-14 07:50:18.289  INFO 12828 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8080 (http)
2022-05-14 07:50:18.305  INFO 12828 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2022-05-14 07:50:18.305  INFO 12828 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.62]
2022-05-14 07:50:18.414  INFO 12828 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2022-05-14 07:50:18.414  INFO 12828 --- [           main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 1234 ms
2022-05-14 07:50:18.664  INFO 12828 --- [           main] o.s.b.a.w.s.WelcomePageHandlerMapping    : Adding welcome page template: index
2022-05-14 07:50:18.789  INFO 12828 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path ''
2022-05-14 07:50:18.805  INFO 12828 --- [           main] com.example.demo.DemoApplication         : Started DemoApplication in 2.139 seconds (JVM running for 2.633)
```

## 関連記事

- [CI/CD とは?](https://qiita.com/wf-kenji-ikeda/items/bfb6d5e21b33d0cca83b)
- [Azure Devops (Artifacts) を無償、無料で使う](https://qiita.com/wf-kenji-ikeda/items/9c21859d8b5b6a63246e)
- [Spring Tool Suite 4 インストール、Spring Initializr 、gradlew の利用](https://qiita.com/wf-kenji-ikeda/items/d00766da8a4076ec43ed)
- [Spring Boot Web アプリケーションを作る](https://qiita.com/wf-kenji-ikeda/items/1e64e44094ce8a1d997f)
- [Jar の Library を作り、Azure Artifacts を利用して成果物を配布する](https://qiita.com/wf-kenji-ikeda/items/696bda335a8933abfcb3)
- [ライブラリ開発者より指定されたバージョンを利用してアプリを作る](https://qiita.com/wf-kenji-ikeda/items/5bf06ce19c52e73a5463)
- [アプリを Docker 、Docker Compose でコンテナを動かしてみる](https://qiita.com/wf-kenji-ikeda/items/e6604ea6ae257f3925a7)
- [Azure Devops (PileLines) を無償、無料で使う](https://qiita.com/wf-kenji-ikeda/items/451838da3b4ac45a8d65)
- [Azure Devops (PileLines) でテスト、ビルド、イメージプッシュをする](https://qiita.com/wf-kenji-ikeda/items/5ddf6158bb98c4174db9)
- [minikube(kubernetes) でコンテナを動かしてみる](https://qiita.com/wf-kenji-ikeda/items/95604d83850a17b91c46)
- [nginx のコンテナを Docker や minikube(kubernetes) で動かし、静的コンテンツ公開工程を模倣](https://qiita.com/wf-kenji-ikeda/items/bf6cb1b7a047f562d309)

## 参考記事

[リンクタイトル](url)