jenkins與django的持續集成

背景

持續集成是敏捷開發的一項重要環節,傳統的集成方式較爲繁瑣,需要利用一些CI/CD工具進行集成工作。筆者嘗試採用jenkins進行django項目的集成部署。

jenkins安裝與配置

安裝

jenkins的安裝比較簡單,分爲兩步安裝java運行環境和jenkins軟件即可。另外,官網還推薦使用docker進行安裝。筆者在ubuntu系統上採用傳統方式進行後續的流程。安裝步驟爲:

  • 安裝java
    apt install openjdk-8-jre
  • 安裝Jenkins
wget -q -O - https://pkg.jenkins.io/debian/jenkins.io.key | sudo apt-key add -
sudo sh -c 'echo deb https://pkg.jenkins.io/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list'
sudo apt-get update
sudo apt-get install jenkins

配置

端口

首次安裝jenkins可能會出現無法啓動的情況,其中一個原因可是能系統的8080端口被佔用,我們需要修改/etc/default/jenkinsHTTP_PORT=8080爲其他空閒端口即可。之後重啓服務service jenkins restart

賬戶權限

jenkins會爲安裝jenkins軟件的linux系統生成一個jenkins賬戶進行後續操作。但是筆者想採用超級管理員權限進行後續的操作。

  • 將jenkins賬戶加到root分組中,gpasswd -a root jenkins
  • 修改配置文件/etc/default/jenkins
JENKINS_USER=root
JENKINS_GROUP=root
  • 重啓服務service jenkins restart

插件

筆者試用了blue ocean的插件,看起來比較美觀。我們僅需要到系統管理->插件配置進行添加即可。
在這裏插入圖片描述

創建持續集成項目

項目創建有多種方案,最常用的是任意風格和流水線。筆者先介紹默認任意風格的方案,pipeline方案日後補上。

任意風格

在這裏插入圖片描述

項目配置

一個簡單django集成部署的步驟,需要包含:

  • 從代碼倉庫(git/github等)拉取代碼
  • 指定python運行環境
  • 創建或激活虛擬環境
  • 安裝依賴
  • 數據庫遷移
  • 靜態文件收集
  • 配置環境變量
  • 殺死舊程序
  • 啓動新程序

其中從代碼倉庫拉取代碼可以利用配置完成:
在這裏插入圖片描述
剩餘步驟,我們可以編寫一個shell去完成這一系列的步驟:

# !/bin/bash
cd project_path

PROCESS=`ps -e | grep gunicorn | awk '{printf "%d\n", $1}'`
for i in $PROCESS
do
    echo "Kill the gunicorn process [ $i ]"
    kill -9 $i
done

CPROCESS=`ps -e | grep celery | awk '{printf "%d\n", $1}'`
for i in $CPROCESS
do
    echo "Kill the celery process [ $i ]"
    kill -9 $i
done

echo "finish kill"

~/.pyenv/bin/pyenv local 3.7.2
pipenv --python 3.7.2

export BUILD_ID=dontKillMe
. `pipenv --venv`/bin/activate
pip install -r requirements.txt
pip install gunicorn==19.9.0

python manage.py collectstatic --noinput
python manage.py migrate

nohup gunicorn -w 3 -b localhost:9003 imageprocessing.wsgi:application > django.out 2>&1 &

sleep 10s

nohup celery -A imageprocessing worker -l info -P eventlet -c 1 > celery.out 2>&1 &

sleep 10s

exit 0

其中有幾個比較需要注意的點是:

  • 筆者的python環境管理採用pyenv進行管理,但是在jenkins的腳本中,不知道出於什麼原因直接調用pyenv是會報command not found的,需要指定絕對路徑~/.pyenv/bin/pyenv才行。
  • 另外,jenkins當腳本完成之後會殺死所有的後臺進程,所以直接使用nohup掛進程的話是沒有效果的,需要在腳本中聲明一個環境變量export BUILD_ID=dontKillMe纔可以達到目的。
    在這裏插入圖片描述
    保存過後點擊執行即可。

如果安裝了blue ocean最終的效果:
在這裏插入圖片描述
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章