2017年7月21日金曜日

Docker 公式 image の Jenkins に JavaFX プロジェクトのビルドをしてもらうためにやったことメモ

やりたいこと

このプロジェクトを Jenkins にビルドしてほしいのです。

前提条件

この記事には初期設定書いていないけれど、 Install suggested plugins を選択して初期設定を行った。

やったこと

OS へ必要なパッケージをインストール

JavaFX のパッケージが足りないので入れる。

docker-compose exec -u root jenkins /bin/bash
apt update
apt upgrade
apt install openjfx
apt-get clean
exit

Jenkins 全体の設定

環境変数設定

JavaFX を扱うため、 build.gradle に下記のような設定がされている。

compile files(JAVA_HOME + '/jre/lib/ext/jfxrt.jar')

そのため、Jenkins に ORG_GRADLE_PROJECT_JAVA_HOME の環境変数が設定されている必要がある。

設定方法は下記の通り。

  • Jenkinsの管理 -> システムの設定 -> グローバルプロパティ
    • 環境変数のチェックボックスを ON にする
    • 下記 2 つの環境変数を追加
      • キー: JAVA_HOME, 値:/usr/lib/jvm/java-8-openjdk-amd64/
      • キー: ORG_GRADLE_PROJECT_JAVA_HOME, 値:$JAVA_HOME

新しいジョブの作成

ジョブの名前と種類選択

  1. Enter an item name: Yadome
  2. 「フリースタイル・プロジェクトのビルド」を選択
  3. OK

ビルド定義

General

  • GitHub project にチェック
    • Project url: https://github.com/mikoto2000/Yadome

ソースコード管理

  • Git を選択
    • リポジトリ
      • リポジトリURL: https://github.com/mikoto2000/Yadome

ビルド環境

  • 「コンソール出力にタイムスタンプを追加する」にチェック

ビルド

  • Invoke Gradle script
    • 「Make gradlew executable」にチェック
    • Use Gradle Wrapper
      • Wrapper location: ./
      • Tasks: build

ビルド後の処理

Yadome では各種レポートを html 出力しているので、もうそれそのまま Jenkins に取っておいてもらえばいいじゃんという考えで設定。

  1. 成果物を保存
    • 保存するファイル: build/reports/**/*

ビルド結果

こんな感じで、レポートの html 出力を参照できるのでこの辺はとりあえず妥協できるかなと。

統計情報出したくなったら xml 出力にしてきちんとプラグイン設定する感じで。

イメージの作成

ビルドできることを確認したので、 Dockerfile を作ってイメージ作成する。

mkdir -p ~/project/docker/jenkins-with-openjfx
cd ~/project/docker/jenkins-with-openjfx
gvim Dockerfile

■ Dockerfile

FROM jenkins

USER root

RUN apt -y update
RUN apt -y upgrade
RUN apt -y install openjfx
RUN apt-get clean

USER jenkins

そして、 jenkins-with-openjfx という名前でビルドする。

docker build -t jenkins-with-openjfx .

で、 jenkins の docker-compose.yml をもとに、with openjfx のファイルを作る。

■ docker-compose.yml

version: '3'
services:
    jenkins:
        image: jenkins-with-openjfx
        volumes:
            - jenkins_home:/var/jenkins_home
        ports:
            - "8080:8080"
            - "50000:50000"
        environment:
            - JAVA_OPTS="-Djava.util.logging.config.file=/var/jenkins_home/log.properties"
        entrypoint: ["/bin/tini", "--", "/usr/local/bin/jenkins.sh"]
volumes:
    jenkins_home:
        external: true

これで、このディレクトリで docker-compose up -d jenkins すれば、Yadome プロジェクトのビルドができるようになった。

※ 記事を修正するのが面倒なのでここには書いていないが、ビルド成果物に build/libs/*jar を追加した。

作ったものは Github に上げた。

以上。

2017年7月20日木曜日

Docker の公式 Jenkins イメージを使う

イメージの取得

docker pull jenkins

docker-compose.yml の作成

version: '3'
services:
    jenkins:
        image: jenkins
        volumes:
            - jenkins_home:/var/jenkins_home
        ports:
            - "8080:8080"
            - "50000:50000"
        environment:
            - JAVA_OPTS="-Djava.util.logging.config.file=/var/jenkins_home/log.properties"
        entrypoint: ["/bin/tini", "--", "/usr/local/bin/jenkins.sh"]
volumes:
    jenkins_home:
        external: true

jenkins 用の volume 作成

docker volume create --name=jenkins_home

コンテナ実行

docker-compose up -d jenkins

http://localhost:8080/ にアクセスすると、「初期パスワードは /var/jenkins_home/secrets/initialAdminPassword に書いてあります」って言われるのでそれを確認する。

docker-compose run jenkins cat /var/jenkins_home/secrets/initialAdminPassword

今日はここまで。

2017年7月15日土曜日

Docker for Windows で apt-chacer-ng 環境を作る

やりたいこと

環境構築の試行錯誤する中で、毎回 Debian のミラーサイトにアクセスするのは心苦しい。 なので、ローカルに apt のキャッシュサーバーを立てたい。

実現方針

  1. apt-cacher-ng 用のイメージ作成
  2. apt-cacher-ng 用のキャッシュ用の Named Volume 作成
  3. 実験環境用の docker-compose.yml ひな形を作成
    • 実験用コンテナと、 apt-cacher-ng 用コンテナがネットワークでつながるようにする
    • 実験用コンテナが「2.」で作った Named Volume を使うように設定

これで、各実験環境ごとに apt-cacher-ng サーバが立ち上がり、共有している Volume のキャッシュを使用することで、ミラーサイトへのアクセスを減らすことができるはず。

環境

OS: Windows 10 Pro

やったこと

apt-cacher-ng 用のイメージ作成

コンテナ用ディレクトリ作成

$ mkdir -p ~/project/docker/apt-cacher-ng
$ cd ~/project/docker/apt-cacher-ng

Dockerfile 作成

Dockerize an apt-cacher-ng service を参考に作成。

VOLUME, EXPOSE は、 docker-compose で指定する想定なので削った。

■ Dockerfile

FROM debian:stretch-slim

RUN apt -y update
RUN apt -y upgrade
RUN apt -y install apt-cacher-ng

CMD chmod 777 /var/cache/apt-cacher-ng && /etc/init.d/apt-cacher-ng start && tail -f /var/log/apt-cacher-ng/*

イメージのビルド

cd ~/project/docker/apt-cacher-ng
docker build -t apt-cacher-ng .

作成したイメージの確認

docker images を実行すると、今作ったイメージが表示されるはず。

$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED              SIZE
apt-cacher-ng       latest              fc58ec7f120b        About a minute ago   79.2MB

apt-cacher-ng 用のキャッシュ用の Named Volume 作成

docker volume create するだけ。

$ docker volume create apt-cacher-ng
apt-cacher-ng
$ docker volume ls
DRIVER              VOLUME NAME
local               apt-cacher-ng

実験環境のひな形を作成

apt のプロキシ設定済みのイメージを作成

$ mkdir -p ~\project\docker\test-base
$ cd ~\project\docker\test-base

ファイル類作成

■ Dockerfile

FROM debian:stretch-slim

COPY ./02proxy /etc/apt/apt.conf.d/02proxy

■ 02proxy

Acquire::http::Proxy "http://apt-cacher-ng:3142/";

イメージのビルド

docker image -t test-base .

ひな形から実験環境を構築する

実験環境用のディレクトリを作って docker-compose.yml を作る

$ mkdir -p ~/project/docker/target
$ cd ~/project/docker/target
$ gvim docker-compose.yml

試行錯誤した結果、こんな感じでよいのではないかと。

■ docker-compose.yml

version: '3'
services:
    # apt-cacher-ng 用の設定
    apt-cacher-ng:
        image: apt-cacher-ng
        # apt-cacher-ng 用の Named Volume を指定
        # Named Volume の apt-cacher-ng が、
        # コンテナの /var/cache/apt-cacher-ng にマウントされる
        volumes:
            - apt-cacher-ng:/var/cache/apt-cacher-ng
        # ポートを開ける
        expose:
            - 3142
    # 実験環境用のコンテナ設定
    target:
        image: test-base

volumes:
    apt-cacher-ng:
        external: true

動作確認

最初の 1 つを作る

apt-cacher-ng のキャッシュが空であることを確認。

$ docker-compose up -d
Creating target_apt-cacher-ng_1 ...
Creating target_target_1 ...
Creating target_target_1
Creating target_apt-cacher-ng_1 ... done
$ docker-compose run apt-cacher-ng /bin/bash
root@a187654c95e3:/# ls /var/cache/apt-cacher-ng/
_xstore
root@a187654c95e3:/# exit
exit

target で、とりあえず git をインストールしてみる。

$ docker-compose run target /bin/bash
root@89ce826c2a94:/# apt -y update; apt -y upgrade; apt -y install git

また apt-cacher-ng に戻って、ログやらキャッシュやらを確認。

$ docker-compose logs apt-cacher-ng
$ docker-compose run apt-cacher-ng /bin/bash
root@310265d1d8e3:/# ls /var/cache/apt-cacher-ng/

中身増えてますね。きちんと動いていそう。

2 つめを作る

一つ目のキャッシュファイルがあることを確認。

$ mkdir ~/project/docker/target2/
$ cd ~/project/docker/target2/
$ cp ~/project/docker/target/docker-compose.yml .
$ docker-compose up -d
$ docker-compose run apt-cacher-ng /bin/bash
root@57d7dc4b271b:/# ls /var/cache/apt-cacher-ng/

うん、増えてますね。 さっきと同じように git インストールまでやってみる。

$ docker-compose run target /bin/bash
root@4aa9a5c1021b:/# apt -y update; apt -y upgrade; apt -y install git

ログを確認。

$ docker-compose logs apt-cacher-ng

うん、効いていそう。

以上。

変更履歴

日付 修正内容
v1 2017/7/15 新規作成
v2 2017/7/16 docker-compose.yml の「ポートを開ける」を ports から expose に変更。
(ホストに公開する必要がないため。)

Docker for Windows のインストールメモ

環境

OS: Windows 10 Pro

手順

  1. Docke for Windows を入手・インストール
    1. docker store から exe をダウンロード
  2. Windows で Hyper-V を有効にする
    1. スタートボタン右クリック -> アプリと機能 -> 関連項目の「プログラムと機能」 -> 「Windows の機能の有効化または無効化」 -> Hyper-V にチェックを入れる
  3. BIOS で Hyper-V を有効にする
    1. スタート -> 設定アイコン -> 更新とセキュリティ -> 回復
    2. 「PC の起動をカスタマイズする」の「今すぐ再起動する」ボタン押下
    3. advanced -> CPU Coonfiguration -> SVM Mode を enable に変更(マザーボードによってここは変わってくるはず...)
  4. 「1.」でダウンロードした exe を実行してインストール。全部デフォルトで OK

以上。