↓ Jenkins の使い方については ↓
↓ 以下にまとめ直しましたのでこちらをご利用ください ↓
以下は古い内容になります
Jenkisジョブ作成について
Jenkinsとは
- 継続的インテグレーション(continuous integration)ツール
- アジャイル型開発での利用を前提に設計された
- 日本製で、作者は川口耕介氏
- "ジョブ"と呼ばれる用途単位の機能を順次実行していくことでGit操作やファイル転送を実行する
- 1つのジョブは、対象Gitブランチ設定やGitコマンド、シェルコマンドなどを設定することで1つの機能を担う構造になっている
- ジョブを一度作成すると実行時に機能の詳細内容を意識することなく反復利用できる
- 初期状態では、ジョブが何も与えられてない"からっぽのハコ"のようなもの
なぜCIツール
- 機械が得意なことを機械に任せる
- 差分抽出
- 反復作業
- 転送設定
- 高速リリース
- ローカルルールの撲滅
ジョブ画面の構成
ジョブ画面のなかでフロントエンドデプロイのためによく利用する機能は以下のとおり
- 基本情報
- プロジェクト名
- 説明
-
ビルドのパラメーター化
- 文字列
- 真偽値
- 選択
- Git Parameter
- ソースコード管理
- Git
- ビルド・トリガ
- SCMをポーリング
- ビルド
- シェルスクリプト
- ビルド後の処理
- E-mail通知
ジョブ画面 : 基本情報
プロジェクト名
- 必須入力項目
- 半角英数字で命名する
- プロジェクト名がURIとして利用されるため「%20」に変換される半角スペースも使わないほうが望ましい
説明
- 一部のHTML要素に対応
- プロジェクトの名前やジョブの内容などを記載する
- deployの場合、本番向けかSTG向けかDEV向けかなどのdeploy先を記載する
- deploy元のgitリポジトリURIやdeploy先のURIなど記載しておくと便利
ビルドのパラメーター化 : 文字列
- 自由入力文字列を設定する場合に利用
- 同期するbranchの選択などに利用
ビルドのパラメーター化 : 真偽値
- チェックボックスによる選択に利用
- DRYRUNのオン/オフの選択などに利用
ビルドのパラメーター化 : 選択
- プルダウンによる選択に利用
- 複数項目の選択に利用
ビルドのパラメーター化 : Git Parameter
- Gitリポジトリを参照することで取得できる項目の選択に利用
- Tagやブランチの選択に利用
ソースコード管理 : Git
- 読み取り、書き込み対象とするGitリポジトリを設定する
ビルド・トリガ : SCMをポーリング
- GitのWebHooks機能によるGitとJenkinsの自動同期を設定する際にオンにする
ビルド : シェルスクリプト
- ジョブのメインタスクのほぼすべてをここに記載、あるいはここから呼び出す
ビルド後の処理 : E-mail通知
- ビルド完了を記録、共有しておきたいメールアドレスがある場合に設定する
ジョブに追加する主なコマンド
上記の「ビルド : シェルスクリプト」項目に設定するタスクは、おもに以下のようなコマンドで構成される
-
rsync
: ファイル転送 -
rm
: 削除 -
echo
: 文字列表示 -
mkdir
: ディレクトリ作成 #!/bin/bash
- gitコマンド
rsync
テストサーバーや本番サーバーへのファイルアップロードにはおもにrsync
を利用する
- UNIXソフトウェアの1つ
- 「remote sync」の意味
- パスの「/」の有無が挙動に影響するので注意が必要
- 「/hoge」はディレクトリ自身を含み、「/hoge/」はディレクトリの中身だけに作用する
よく使うrsyncコマンドオプション
option | 内容 |
---|---|
-r |
指定したディレクトリの下層のディレクトリにも再帰的に実行する |
-l |
ローカルのシステムと同様にリモートのシステムでシンボリック・リンクを再作成する |
-c |
コピー先に同じチェックサムとサイズを持つ同名のファイルをスキップする |
-v |
転送中の情報を詳しく表示する |
-n |
実際には実行しないで実行した場合の情報だけを表示する |
--delete |
コピー先に存在してコピー元に存在しないファイルを削除する |
--ignore-existing |
コピー先に存在するファイルは更新しない |
rsyncのサンプルコード
REMOTE_PATH=/hoge/
LOCAL_PATH=${WORKSPACE}/_src/
rsync -rlcv --delete $LOCAL_PATH $REMOTE_PATH
rm
指定したディレクトリ以下の全ディレクトリツリーを削除する
- UNIXコマンドの1つ
- 「remove」の意味
よく使うrmコマンドオプション
option | 内容 |
---|---|
-r |
指定したディレクトリの下層のディレクトリにも再帰的に実行する |
-f |
警告メッセージを表示せずに実行する |
rmのサンプルコード
BACKUP_PATH=${WORKSPACE}/_backup/
if test -d $BACKUP_PATH ; then
rm -rf $BACKUP_PATH
fi
mkdir
新しいディレクトリを作成する
- UNIXコマンドの1つ
- 「make directory」の意味
よく使うmkdirコマンドオプション
option | 内容 |
---|---|
-p |
親ディレクトリも同時に作成する |
mkdirのサンプルコード
BACKUP_PATH=/hoge/
mkdir $BACKUP_PATH
echo
文字列や変数の内容を表示する
- UNIXコマンドの1つ
よく使うechoコマンドオプション
option | 内容 |
---|---|
-e |
エスケープ文字を有効にして表示する |
echoのサンプルコード
echo -e "\n\n*** deploy ***"
#!/bin/bash
- UNIXシェルスクリプトの先頭に書くUNIX命令
- この命令のことをシバン、シェバン(shebang)と呼ぶ
- インタプリタを起動する命令
- シェバン以下に書くコマンドの種類を指定している
-
#!/bin/bash
、#!/bin/sh
、#!/bin/csh -f
、#!/usr/bin/perl
、#!/usr/bin/ruby
などがある
gitコマンド
gitコマンドによって任意のリポジトリを操作可能
gitコマンドのサンプルコード : Tag作成
if git branch | grep -q master; then
DATE=`date +%Y-%m-%d-%H-%M-%S`
git tag -a $DATE -m "version : $DATE"
git push --tag
git tag -d $DATE
fi
ワークスペース
- Jenkinsジョブはジョブ毎に1つのワークスペースが存在する
- Gitブランチから取得したりタスクランナーによってビルド出力するファイルはワークスペースに展開される
- 各ワークスペースのパスはそのジョブ内において「${WORKSPACE}/」と指定する
- インスタンス内の各ワークスペースのパスはジョブ外からは「/home/jenkins_path/workspace/[ジョブ名]/」などのように指定する
タスク実行
- [ビルド]ボタンによる手動実行
- Web hooksによる自動実行
[ビルド]ボタンによる手動実行
- ジョブ画面において、左メニューの[パラメーター付きビルド]からジョブ実行画面に遷移
- 選択項目など設定の後、[ビルド]ボタンを押下することでジョブを実行する
- 左メニューの「ビルド履歴」より最新の日付のリンクに遷移
- 左メニューの[Console Output]によりジョブの内容を確認する
- 転送されたファイルのリストや、末尾の「SUCCESS」のメッセージなどを確認し、問題なければ転送先の表示確認などの作業に移行する
Web hooksによる自動実行
- 開発フローの中で、常に同じ手順で実行しているGit操作とJenkinsジョブの組み合わせが存在する場合にWeb hooks機能の導入を検討する
- developブランチへのマージリクエストがAcceptされた時に、developブランチの内容をSTG環境に自動デプロイする、などのように利用する
GitlabからのWeb hooksの設定方法
- Gitlabリポジトリにおいて、[Settings]→[Web Hooks]に遷移する
- 同期するタイミングを[Trigger]の4項目から選択する
- 「[同期するJenkins URL]/git/notifyCommit?url=[Gitlabリポジトリのhttpパス]」を[URL]に設定する
- Web hooksに入力する[URL]は例えば以下のようになる
http://xx.xx.xx.xx:xxxx/jenkins/git/notifyCommit?url=http://glab.yyyy/yyyyyy.git
ジョブ応用編
ビルドジョブを含む実装例
ジョブの中でGulpやGruntのビルド実行も可能
ビルドジョブのサンプルコード
# 変数
SYMBOLIC_LINK=/home/node_package/xxxxx/node_modules
# 指定領域のnode_modulesにシンボリックリンクを張る
if test -d node_modules ; then
echo "node_module is exist."
else
ln -s $SYMBOLIC_LINK
fi
# ビルド
grunt