LoginSignup
6
9

More than 5 years have passed since last update.

git pushしたら、Jenkinsでコンテナをビルドして、DockerHubへPushするチェーンを作る

Last updated at Posted at 2018-08-02

アプリのコードを書いて、コンテナのリポジトリにプッシュするまでの自動化環境を、次のツールを利用して作ってみた。
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 で設定
スクリーンショット 2018-08-02 21.02.12.png

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

ビルドの実行テスト

ビルド実行をクリックしてビルドのテスト

スクリーンショット 2018-08-02 21.23.26.png

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のディレクトリごとバックアップが必要
6
9
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
6
9