iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 9
1
自我挑戰組

DevOps學習之旅系列 第 9

Day 9 Jenkins CI/CD 伺服器(一)

  • 分享至 

  • xImage
  •  

簡介

上一篇介紹如果把專案部署到主機,今天會使用 Jenkins 還自動這些步驟,主要步驟如下:

  1. 開發人員 Commit 原始碼,並 push 遠端 Bitbucket.
  2. Jenkins 輪詢每分鐘檢查 bitbucket 是否有更新
  3. 有新的更新就執行建置部署
  4. 建置完成開始執行測試

Jenkins

首頁

https://ithelp.ithome.com.tw/upload/images/20181010/20072651AA86HY4n7n.png

創建專案

https://ithelp.ithome.com.tw/upload/images/20181010/20072651jNkxKOA1Lg.png

設定原始碼

https://ithelp.ithome.com.tw/upload/images/20181010/20072651Nknt9iAxBY.png

設定觸發建置,每分鐘檢查是否有更新

*/1 * * * *

https://ithelp.ithome.com.tw/upload/images/20181010/20072651I4JctTxD43.png

部署專案,執行測試產出測試報告

安裝必要軟體:Debain Linux

apt-get install -y make build-essential libssl-dev zlib1g-dev libssl1.0-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev xz-utils tk-dev libffi-dev liblzma-dev

專案建置腳本 prepare.sh

#!/bin/bash
# 套用環境變數
. ~/.bash_profile
# 檢查pyenv
which pyenv
if [ $? == "0" ]; then
    echo "already have pyenv"
else
    echo ""
    git clone git://github.com/yyuu/pyenv.git ~/.pyenv
    echo 'export PATH="$HOME/.pyenv/bin:$PATH"' >> ~/.bash_profile
    echo 'eval "$(pyenv init -)"' >> ~/.bash_profile
    . ~/.bash_profile
    pyenv install 3.5.0
    pyenv global 3.5.0
    pip install --upgrade pip setuptools virtualenv
fi
# 設定專案
PYENV_HOME="`pwd`/env/"
echo ${PYENV_HOME}
if [ -d ${PYENV_HOME} ]; then
    . ${PYENV_HOME}/bin/activate
    # 重新安裝 oklib
    #pip uninstall -y oklib
    #pip install git+ssh://git@bitbucket.org/okborn/oklib.git#egg=v1.6
else
    pyenv global 3.5.0
    virtualenv ${PYENV_HOME}
    . ${PYENV_HOME}/bin/activate
    # 準備專案相依插件
    pip install cryptography psycopg2 SQLAlchemy psycopg2-binary
    pip install git+ssh://git@bitbucket.org/okborn/oklib.git#egg=v1.6
    python setup.py develop
    pip install -e ".[testing]"
fi
# 初始化 DB
rm -f ithome_pellok_2018.sqlite
${PYENV_HOME}/bin/initialize_ithome_pellok_2018_db production.ini#ithome_pellok_2018

Jenkins Shell Script 執行部署腳本,並且執行測試程式

bash prepare.sh
env/bin/py.test --junitxml=pytest_result.xml --cov=ithome_pellok_2018 --cov-report=xml

螢幕快照 2018-10-11 下午12.09.47.png

覆蓋率報表

coverage.xml

螢幕快照 2018-10-11 下午12.14.50.png

螢幕快照 2018-10-11 下午12.16.32.png

測試報告

pytest_result.xml

螢幕快照 2018-10-11 下午12.15.01.png

螢幕快照 2018-10-11 下午12.16.42.png

結論

Jenkins Server 是一個很好的 CI/CD 伺服器,還蠻多人使用也很好用,在這邊串起了建置部署,並且執行測試程式,並且會出報告(測試報告、覆蓋率報告),這邊有幾個重點和大家提醒一下:

  1. Debain 程式在安裝 pyenv 的時候需要先安裝一些軟體,這邊有小卡一下,才安裝起pyenv
  2. 在 Debain 執行 prepare.sh 腳本的時候需要使用 bash prepare.sh 這邊也需要注意
  3. 跑測試的時候會出報表,不知道會什麼 JUnit會有沒跑出圖片、以及Cobertura Coverage 圖片跑不出來,這兩點還沒解決,可能有時間再來查查看.
  4. 設定原始法那邊有監控版本預設是 */master ,代表 master 有更新才會驅動建置部署,這邊可以拿來當QA(develop分支)和正機(master分支)來使用.
參考

pyramid deploy


上一篇
Day 8 專案部署
下一篇
Day 10 Jenkins CI/CD 伺服器(二)
系列文
DevOps學習之旅30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言