0
0

More than 3 years have passed since last update.

TeamCityビルドエージェントコンテナにJDKを追加する

Posted at

目的

自分の環境にあったビルドエージェント環境のコンテナを用意できる。

ビルドエージェント構成方針

ビルドエージェントの構成は2つの方針がある。

1:リッチなビルドエージェント

ビルドエージェントは無料枠では2つまでなので、小さなプロジェクトユースでは(費用を払わない限り)1つのエージェントに複数のビルド環境をもたせたいだろう。
おそらく、個人ユースでもおおよそ同じと思う。

2:最小限のビルドエージェント

ビルドエージェントを最小限にすることで、ビルド環境のセットアップは簡単に済ませることができるし、Dockerfileも小さくて済む。
反面、エージェントの管理を手動で行わなければならない。

ベース検討

特に要件がない場合には、通常のエージェントコンテナを出発点として作業するのがいいだろう。.NETビルドやDockerデプロイ用の環境セットアップもなされているようだ。
一方、ハードなプロジェクトユースでコンテナを少しでも小さくしたかったり、完全に管理するため余計なものを入れたくない場合には最小のエージェントコンテナを利用するかもしれない。

どちらにせよ、エージェント自体の実行環境としてJava8は入っている。(OpenJDK派生のAmazon Corettoを利用しているようだ)

本題:JDKの追加

今回は最小のエージェントコンテナを出発点としてJDKを追加することにした。
使用するコンテナはlinux(Ubuntu)タグのlatestである。

Javaの追加先

エージェントのJava環境自動検知を参照すると以下のディレクトリ群で自動検知されるとのこと。
あとは設定ファイルに探索先パスを設定できるようだ。

Unix

The following directories are searched for Java subdirectories:

/usr/local/java
/usr/local
/usr/java
/usr/lib/jvm
/usr

サンプル:Amazon Correto 11

jdk11を追加する場合のDockerfileサンプル。
最小のエージェントコンテナのJDK追加をパクってドン。

Dockerfile
FROM jetbrains/teamcity-minimal-agent:latest

LABEL maintainer=""

# JDK preparation start

# Amazon Coretto 11
ARG MD5SUM='08a0cea184824c5477a62ce6a6a0fb0b'
ARG JDK_URL='https://d3pxv6yz143wms.cloudfront.net/11.0.3.7.1/amazon-corretto-11.0.3.7.1-linux-x64.tar.gz'

RUN set -eux; \
    curl -LfsSo /tmp/openjdk.tar.gz ${JDK_URL}; \
    echo "${MD5SUM} */tmp/openjdk.tar.gz" | md5sum -c -; \
    mkdir -p /usr/local/java/openjdk; \
    cd /usr/local/java/openjdk; \
    tar -xf /tmp/openjdk.tar.gz --strip-components=1; \
    rm -rf /tmp/openjdk.tar.gz;

# JDK preparation end
##################################

AGENT_NAMEを使ってエージェントに名前をつけておくとサーバーで管理しやすい。

docker-compose.yml
version: '3'

services:
  ci-agent-java11:
    build: ./ci/ci-agent/
    environment: 
      - SERVER_URL=ci:8111
      - AGENT_NAME=Java11
    ports:
      - 9090:9090
   volumes:
      - ./ci/agent-java11/conf:/data/teamcity_agent/conf

ビルドステップにJDK11を指定する

ビルドステップはデフォルトだとビルドエージェントのJAVA_HOMEのJDKを使用するので設定したJDKを指定する

image.png

参考:エージェントをプールに割り当てる

defaultプールのみでは管理しにくい場合はエージェントを適切にプールで分けてプロジェクトごとに割り当てましょう。

image.png

いじょ。

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