アプリのコードを書いて、コンテナのリポジトリにプッシュするまでの自動化環境を、次のツールを利用して作ってみた。
1.GitHub
2.Jenkins
3.DockerHub
4.DockerCE
5.Java8
6.Ubuntu Linux
7.MyDNS
Jenkinsのインストールとセットアップ
インターネット上に仮想サーバーを立てる
IBM Cloud の仮想サーバーを立てました。 https://console.bluemix.net/
MyDNSでドメイン名を取得する
# m h dom mon dow command
#
0 2 * * * curl --user USERID:PASSWD http://www.mydns.jp/login.html > /tmp/mydns.txt
DockerCE のインストール
# add repo Docker-CE
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add -
add-apt-repository "deb https://download.docker.com/linux/$(. /etc/os-release; echo "$ID") $(lsb_release -cs) stable"
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
# install Docker-CE
apt-get update
apt-get install -y docker-ce=$(apt-cache madison docker-ce | grep 17.03 | head -1 | awk '{print $3}')
usermod -aG docker myuserid
Java8 のインストール
このサイトを参考にインストール
https://qiita.com/TsutomuNakamura/items/f12fdf0a8502e634584d
Jenkins をインストールする
Jenkinsのダウンロード
https://jenkins.io/download/
Jenkins 起動スクリプト
# !/bin/bash
export BASE=/$HOME/jenkins
export JENKINS_HOME=$BASE/data
nohup java -jar jenkins.war --httpPort=9080 1>$BASE/logs/jenkins.log 2>$BASE/logs/jenkins.err &
Jenkinsのセットアップ
Youtube を参考にセットアップ
https://www.youtube.com/watch?v=89yWXXIOisk
GitHubとJenkinsの連携を設定する
GitHubの Webhooks 設定
GitHubのリポジトリ https://github.com/takara9/web-nginx で設定
Jenkins 認証情報作成
認証情報 -> System -> Add domain -> ドメイン、ドメイン名を付与 -> OK
認証情報の追加 ->
種類「ユーザー名とパスワード」
ユーザー名 DockerHubのユーザーID
パスワード 同パスワード
ID パイプライン・スクリプトが参照するラベル dockerhub
Jenkins タスク設定
「新規ジョブ作成」-> 名前をつけて「パイプライン」を選択 -> OKでジョブ作成
1.General の GitHub project をチェック
2.URLを設定する https://github.com/takara9/web-nginx/
3.ビルドトリガーのGitHub hook trigger for GITScm polling
4.パイプラインを設定、定義 Pipeline scriptを選択
node {
stage('チェックアウト') {
checkout([$class: 'GitSCM',
branches: [[name: '*/master']],
doGenerateSubmoduleConfigurations: false,
extensions: [], submoduleCfg: [],
userRemoteConfigs: [[url: 'https://github.com/takara9/web-nginx/']]])
}
// versionの読み込み
def version = readFile('version').trim()
def imageName = "maho/web-nginx:" + version
print imageName
stage('ビルド') {
sh "docker build --tag " + imageName + " ."
}
stage ('DockerHubへプッシュ') {
// jenkinsに登録した認証情報を利用する
withCredentials([[$class: 'UsernamePasswordMultiBinding',
credentialsId: 'dockerhub',
usernameVariable: 'USERNAME', passwordVariable: 'PASSWORD']]) {
sh 'docker login -u $USERNAME -p $PASSWORD'
}
sh "docker push " + imageName
}
}
参考資料 https://qiita.com/miyasakura_/items/9d9a8873c333cb9e9f43
ビルドの実行テスト
ビルド実行をクリックしてビルドのテスト
git pushトリガーの コンテナ ビルド & プッシュ
(1) ソースコードをローカルへクローン
git clone https://github.com/takara9/web-nginx
(2) コードを編集
エディタで修正
version ファイルに、DockerHub リポジトリのタグを設定 例 0.1, 0.2
(3) リポジトリへpush
git commit -m "update"
git push
(4) wehhooksにより、チェックアウト、ビルド、プッシュが実行される。
まとめ
- 以上でGitHub, Jenkins, DockerHub までのツールのチェーンを作成できた。
- Jenkinsには、Dockerコンテナのビルド環境など、ビルドの環境は作らなければいけない。
- Jenkinsは、JENKINS_HOMEのディレクトリごとバックアップが必要