LoginSignup
7
6

More than 5 years have passed since last update.

クリーンな環境でJenkinsにDockerコンテナを起動させる方法

Last updated at Posted at 2014-12-08

JenkinsでDockerコンテナを起動していると、ビルド失敗やDockerfileの編集で不要になったコンテナやイメージがたまってくることがあります。
Dockerコンテナ起動失敗の原因になることもあるので、適度に掃除しながら実行させる方法を紹介します。

やりたいこと

  1. Job(ワークスペース)ごとにコンテナを生成する
  2. イメージは使いまわす
  3. 使わなくなったコンテナやイメージは削除する

対象環境

  • Docker: (Macでvolumeオプションを使う場合)1.3以降
  • Jenkins: 1.458以降

Jenkinsで使用するプラグイン

  • Managed Script Plugin
    • Jobごとに生成するコンテナのタグ付けルールがバラバラだと競合する可能性があります。
    • そこで、スクリプトを共通化するプラグインを用いて、規則化されたタグ付けを行うようにします。

スクリプト作成

登録方法

  1. 「Jenkinsの管理」>「Managed files」>「Add a new Config」
  2. 「Managed script file」を選択

スクリプト

  • 「Name」は適当な名前をつける
  • 「Argument list」を登録
    • docker_build_tag(ビルドタグ)
    • docker_run_command(Dockerコンテナ上で実行するコマンド)
    • dockerfile_dir(Dockerfileをおいたディレクトリ)
    • 実行ユーザーやポート指定が必要な方は適宜追加してください。
  • 「Content」に以下のスクリプトを追加
# ビルドパラメータ
docker_build_tag=$1
docker_run_command=$2
dockerfile_dir=$3

# Docker初期設定
boot2docker init
boot2docker up

# Docker環境変数
export DOCKER_HOST=tcp://$(boot2docker ip 2>/dev/null):2376
export DOCKER_CERT_PATH=~/.boot2docker/certs/boot2docker-vm
export DOCKER_TLS_VERIFY=1

# 未起動コンテナの削除
for container_id in $(docker ps -a -q -f status=exited); do
  docker rm ${container_id}
done

# 不要イメージの削除
for image_id in $(docker images | awk '/^<none>/ { print $3 }'); do
  docker rmi ${image_id}
done

# イメージ作成
docker build -t ${docker_build_tag}:1.0 ${dockerfile_dir}

# コンテナ上でworkspaceをビルド
docker run -it \
  -v ${WORKSPACE}:/workspace \
  -w /workspace \
  --name ${JOB_NAME} \
  $(docker images | grep ${docker_build_tag} | awk '{ print $3 }') \
  /bin/sh -c "${docker_run_command}"

# 今回のJobで作成したコンテナの削除
# docker runに"--rm=true"オプションをつければ同等のことはできるが、ビルド失敗した際は解析できるように外している
for container_id in $(docker ps -a -f status=exited | awk '/'${JOB_NAME}'/ { print $1 }'); do
  docker rm ${container_id}
done

ジョブごとの設定

  • 「ビルド」で「Execute managed script」を追加
  • パラメータ指定例 job.png
7
6
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
7
6