5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Jenkins導入からjenkinsによるdjangoアプリの自動デプロイまで試した際のメモ

Last updated at Posted at 2018-01-05

まえがき

今まで構築済みの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.shrun.shの内容
これらのシェルはデプロイ先サーバに配置

init.sh
if [ -e /home/django/reponame/README.md ]; then
   # リポジトリが既に存在する場合は消す
   rm -rf /home/django/reponame
else
   # 存在しない場合は何もしない
   :
fi
run.sh
#!/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に対応するとさらによさそう

5
2
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
5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?