はじめに
現代のソフトウェア開発において、継続的インテグレーションと継続的デプロイメント(CI/CD)は開発効率の向上とソフトウェア品質の確保において不可欠な要素となっています。オープンソースの自動化サーバーとして最も人気のあるJenkinsとDockerコンテナ技術を組み合わせることで、安定性と再現性のある自動化プロセスを構築するための最適なソリューションが実現します。
Jenkinsとは
Jenkinsはオープンソースの継続的インテグレーションツールであり、プロジェクト開発において広く利用されています。自動ビルド、テスト、デプロイなどの機能を提供します。主要なオープンソース自動化サーバーとして、Jenkinsはプロジェクトのビルド、デプロイ、自動化をサポートする数百のプラグインを提供します。
DockerとJenkinsの連携による利点
- 環境の一貫性:環境の違いによるビルド失敗を回避
- 迅速なデプロイ:コンテナ化されたJenkinsは迅速な起動と移行が可能
- リソースの分離:コンテナ間の相互分離によりセキュリティが向上
- 簡単な管理:Dockerコマンドによる運用操作の簡素化
インストールの準備
開始する前に、システムにDockerエンジンがインストールされていることを確認してください。以下のコマンドでDockerがインストールされているか確認できます:
docker --version
もしDockerがインストールされていない場合は、まず公式ドキュメントを参考にDockerエンジンをインストールしてください。
Jenkinsのインストール
1. Jenkinsイメージのプル
現在一般的に使用されているJenkinsイメージには主に2つのバージョンがあります:
# 公式Jenkinsイメージ
docker pull jenkins/jenkins:lts
# またはBlue Oceanイメージ(直感的なパイプラインUIを含む)
docker pull jenkinsci/blueocean
2. データボリュームディレクトリの作成
Jenkinsデータを永続化するために、ホストマシン上にディレクトリを作成し、適切な権限を設定する必要があります:
# ディレクトリ作成
sudo mkdir -p /var/jenkins_home
# 権限の設定(Jenkinsコンテナ内ではデフォルトで1000ユーザーで実行)
sudo chown -R 1000:1000 /var/jenkins_home
# またはより緩い権限(テスト環境向け)
sudo chmod 777 /var/jenkins_home
3. Jenkinsコンテナの実行
以下のコマンドを使用してJenkinsコンテナを起動します:
docker run -d \
-p 8080:8080 -p 50000:50000 \
-v /var/jenkins_home:/var/jenkins_home \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /etc/localtime:/etc/localtime \
--name jenkins \
--privileged=true \
jenkins/jenkins:lts
パラメータの説明:
-d:コンテナをバックグラウンドで実行-p 8080:8080:コンテナの8080ポートをホストマシンの8080ポートにマッピング(Webインターフェース)-p 50000:50000:Jenkinsエージェント通信ポート-v /var/jenkins_home:/var/jenkins_home:データの永続化-v /var/run/docker.sock:/var/run/docker.sock:コンテナ内でのDockerコマンドの使用を許可-v /etc/localtime:/etc/localtime:ホストマシンの時間との同期--privileged=true:コンテナに特権を付与(本番環境では慎重に使用)
4. インストールの検証
コンテナが正常に実行されているか確認:
docker ps
コンテナログの確認:
docker logs jenkins
初期設定
1. Jenkinsへのアクセス
ブラウザを開き、http://<サーバーのIPアドレス>:8080にアクセスすると、Jenkinsのロック解除画面が表示されます。
2. 初期パスワードの取得
Jenkinsが初回起動時にランダムな管理者パスワードを生成します。以下の方法で確認できます:
# 方法1:ホストマシンから確認
cat /var/jenkins_home/secrets/initialAdminPassword
# 方法2:コンテナ内から確認
docker exec jenkins cat /var/jenkins_home/secrets/initialAdminPassword
3. プラグインのインストール
「推奨プラグインをインストール」を選択すると、Jenkinsが最も一般的に使用されるプラグインセットを自動でインストールします。
プラグインインストールの高速化: 国内ユーザーはプラグインのダウンロードが遅い問題に遭遇することがあります。更新センターを変更することで解決できます:
/var/jenkins_home/hudson.model.UpdateCenter.xmlを編集- URLを清华大学のミラーソースに変更:
<sites>
<site>
<id>default</id>
<url>https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json</url>
</site>
</sites>
- Jenkinsコンテナを再起動:
docker restart jenkins
4. 管理者アカウントの作成
プラグインのインストールが完了したら、最初の管理者ユーザーを作成し、必要な情報を入力して初期設定を完了します。
基本設定
JDK環境の設定
DockerでインストールされたJenkinsコンテナには通常JDKが含まれていますが、Jenkinsシステム内で設定する必要があります:
- Manage Jenkins > Global Tool Configurationに移動
- JDKセクションを見つけ、「自動インストール」のチェックを外し、JAVA_HOMEパスを手動で設定
- jenkinsci/blueoceanイメージの場合、JDKパスは通常
/opt/java/openjdk - 設定を保存
Mavenの設定
- Global Tool ConfigurationページでMavenセクションを見つける
- 「新規Maven」をクリックし、名前(例:「Maven 3.6.3」)を入力
- 「自動インストール」のチェックを外し、MAVEN_HOMEパスを設定(手動でインストール済みの場合)
- または「自動インストール」をチェックし、必要なバージョンを選択
一般的なプラグインのインストール
初期インストールされたプラグインに加え、いくつかの一般的なプラグインもインストールします:
- Maven Integration:Mavenプロジェクトのサポート
- Pipeline:パイプライン機能
- Git:Gitバージョン管理
- Publish Over SSH:リモートデプロイ
Docker内でのDockerの使用
時にはJenkinsパイプライン内でDockerコマンドを実行する必要があります。以下に2つの方法があります:
方法1:Dockerソケットのマウント(推奨)
コンテナ起動時に以下のパラメータを追加:
-v /var/run/docker.sock:/var/run/docker.sock
これにより、コンテナ内でホストマシンのDockerエンジンを直接使用できます。
方法2:Docker in Docker(DinD)
Jenkinsコンテナ内にDockerクライアントをインストール:
# コンテナに入る
docker exec -it jenkins bash
# Dockerクライアントのインストール
apt-get update
apt-get install -y docker.io
基本的な使用例
最初のパイプラインプロジェクトの作成
- 「新規ジョブ」をクリックし、ジョブ名を入力して「パイプライン」を選択
- パイプラインセクションでは、「Pipeline script」で直接スクリプトを記述するか、SCMから取得できます
- 以下に簡単なパイプラインの例を示します:
pipeline {
agent any
tools {
maven 'maven-3.6.3'
}
stages {
stage('ビルド') {
steps {
sh 'mvn clean package -DskipTests'
}
}
stage('Dockerビルド') {
steps {
script {
docker.build("my-app:${env.BUILD_NUMBER}")
}
}
}
}
}
自動デプロイの設定
SSHプラグインと組み合わせることで自動デプロイを実現できます:
pipeline {
agent any
stages {
stage('デプロイ') {
steps {
sshPublisher(
publishers: [
sshPublisherDesc(
configName: 'production-server',
transfers: [
sshTransfer(
sourceFiles: 'target/*.jar',
removePrefix: 'target',
remoteDirectory: '/app'
)
],
execCommand: 'cd /app && ./restart.sh'
)
]
)
}
}
}
}
よくある問題と解決策
1. Jenkinsが起動ページで停止している
解決策:
- ファイアウォール設定を確認し、ポート8080と50000が開放されていることを確認
- Dockerサービスを再起動:
systemctl restart docker - コンテナログを確認:
docker logs jenkins
2. プラグインのインストールに失敗または遅い
解決策:
- 更新センターを国内ミラーに変更
- プラグインを手動でダウンロードしてアップロードしてインストール
3. 権限の問題
解決策:
- データボリュームディレクトリに適切な権限があることを確認:
chown -R 1000:1000 /var/jenkins_home - コンテナ実行時に
--privilegedパラメータを使用
4. タイムゾーンの問題
解決策:
- 起動時にタイムゾーンファイルをマウント:
-v /etc/localtime:/etc/localtime - コンテナ内でタイムゾーン環境変数を設定
本番環境での推奨事項
- 定期バックアップ:
/var/jenkins_homeディレクトリを定期的にバックアップ - リソース制限:コンテナに適切なCPUとメモリの制限を設定
- セキュリティの強化:イメージを定期的に更新し、ネットワーク分離を使用し、特権の使用を制限
- ログの監視:ログ監視とアラートメカニズムを構築
- Docker Composeの使用:デプロイと管理を簡素化
まとめ
Dockerを使用してJenkinsをインストールし実行することで、デプロイと保守作業が大幅に簡素化されます。コンテナ化されたJenkins環境は、一貫性、移植性、および管理の容易性という特徴を持ち、現代のソフトウェア開発プロセスに最適です。
この記事では、インストールから設定までの完全なプロセスと、よくある問題の解決策を紹介しました。これが皆様のCI/CD環境の迅速な構築の一助となれば幸いです。