まえがき
今まで構築済みのJenkinsプロジェクトをただ使うだけで、
Jenkinsのプロジェクトの設定を自分で全くしたことがなかったので、
プロジェクトの作成と設定、自動デプロイまでをとりあえずやってみることにした。
お世話になった記事/サイトなど
https://qiita.com/japboy/items/42aeee94512495a6ddd4
http://www.buildinsider.net/enterprise/jenkins/001
http://sil.hatenablog.com/entry/jenkins-github-auto-deploy
https://qiita.com/yasuhiroki/items/61a2be613fc7dcfc8682
サーバの環境
- Ubuntu 16.04
- Memory 8GBくらい
- HDD 500GBくらい
Jenkinsの導入(Dockerコンテナ)
Dockerの導入は省略。。
Docker Hub上で公式イメージがあるのでこちらを使用
Jenkins Official Repo
sudo docker run -v /var/jenkins_home -p 8080:8080 -p 50000:50000 --name jenkins -d jenkins
オプションの意味:
-v
Data Volume
-p
port forwarding
-d
background
しばらくすると、jenkins上がってくるので http://サーバのIPアドレス:8080 にアクセス
adminのトークンを求められるので、下記のコマンドを叩いて取得する
docker exec -ti jenkins cat /var/jenkins_home/secrets/initialAdminPassword
次画面で推奨するプラグインを導入するか、選択して導入するかを聞かれるのでどちらかを選択する
プラグイン導入後、ユーザ作成画面に移り、これが終われば導入が完了
jenkinsのアップデート
Dockerコンテナ内のjenkinsが既に古いバージョンの場合、
Warningsが表示される
アップデートする方法は下記の通り
# jenkinsのコンテナにrootで入る
docker exec -ti -u root jenkins bash
cd /usr/share/jenkins/
wget http://updates.jenkins-ci.org/download/war/2.89.2/jenkins.war
mv jenkins.war.1 jenkins.war
# jenkinsのコンテナから抜ける
exit
# jenkinsのコンテナを再起動
docker restart jenkins
projectの作成
Github Enterprisesとの連携
Build Triggerを使いGHEにpushした段階でビルドが走るようにしたかったが,
自分が建てた場所が悪く,GHEが動いているサーバからjenkinsのトリガを引くことができないので保留...
自動デプロイ
下地処理として,デプロイ先サーバでpyenv環境を整えてpython3.6を導入しておく
その後,git pull
からrunserver
まで行ってくれるシェルをデプロイサーバ内に書き,jenkinsから叩くことにした
jenkinsのビルド時に任意のシェルを実行させるには「プロジェクト設定」->「Build」にある「execute shell」欄にシェルを書く
ssh -i /var/jenkins_home/.ssh/id_rsa target_server@xxx.xxx.xxx.xxx './init.sh'
ssh -i /var/jenkins_home/.ssh/id_rsa target_server@xxx.xxx.xxx.xxx 'git clone git@ghe.net:your-name/reponame.git'
ssh -i /var/jenkins_home/.ssh/id_rsa target_server@xxx.xxx.xxx.xxx '/bin/bash /home/django/run.sh'
上記に登場する,init.sh
とrun.sh
の内容
これらのシェルはデプロイ先サーバに配置
if [ -e /home/django/reponame/README.md ]; then
# リポジトリが既に存在する場合は消す
rm -rf /home/django/reponame
else
# 存在しない場合は何もしない
:
fi
#!/bin/bash
source ~/.profile
pgrep -f 'runserver' | xargs kill 2>/dev/null
# 標準入出力を捨てなければ,build時に帰ってこれなくなるのでjenkinsがタイムアウトしてしまう(ハマったポイント)
python /home/django/test2/mysite/manage.py runserver 0:5000 > /dev/null 2>1& < /dev/null &
自己満足だが,これでなんとかCIっぽい環境が自分でも構築できた
requirements.txtに対応するとさらによさそう