git 저장소에 변화가 생기면, 서버에 자동으로 업데이트하는 스크립트.


소스가 변경될 때 마다, 라이브서버에 소스를 업데이트 하는 일은 참 귀찮은 일이다.
그래서 보통 cron을 이용해 서버에 소스 자동 업데이트를 하곤 한다.
이번에도 cron을 이용해 자동 업데이트를 구축하려다가 한가지 문제에 부딪혔다.
crontab에서 스크립트를 돌릴경우 상대경로를 쓰지 못한다는 거다.
그래서 비슷한 걸 찾아 헤매다가 shell-jobs를 발견했고,
이를 이용해 git 저장소가 갱신될 때마다 서버를 자동 업데이트하도록 구축했다.


작동 순서

  1. shell-jobs 데몬 실행.
  2. shell-jobs에서 일정 시간마다 ~/update.sh를 호출.
  3. ~/update.sh에서 원격 저장소를 업데이트하고 변경사항이 있다면 update_platform.sh를 호출.
  4. update_platform.sh에서 소스를 업데이트하고 서버를 재구동.

shell-jobs(https://github.com/azer/shell-jobs)

설치

npm install -g shell-jobs

설정파일 작성

update.jobs
~/update.sh > ~/cron.log # => 10 minutes

shell-jobs 데몬으로 구동

shell-jobs update.jobs -d

리눅스 시동시에 자동으로 구동되도록 하려면, /etc/rc.local파일에도 위 코드를 추가한다.

update.sh

원격 저장소를 업데이트하고 git diff를 통해 로컬과 다른점을 검사한다.
grep -v 뒤에는 로컬 변경을 무시할 파일명을 넣는다.
만약 원격 저장소와 다른 점이 있다면 update_platform.sh를 실행한다.
#!/bin/sh
cd /home/project
git remote update
diff=$(git diff remotes/origin/master master | grep -v <무시할 변경사항>)
if ["$diff" == ""]
then
echo "no diffs"
else
echo "have diffs"
~/update_platform.sh
fi


update_platform.sh

소스를 최신으로 업데이트하고, 서버를 재구동하는 스크립트.
sed를 이용해 debug플래그와 project.wsgi파일을 변경하기 때문에,
git reset --hard로 로컬 변경사항을 무시한다.
#!/bin/sh
cd /home/project
git checkout master
git reset --hard master
git pull
pip2 install -r requirements.txt
alembic revision --autogenerate -m "Alembic initilized boilerplate tables."
alembic upgrade head
sed -i "s/^DEBUG = .*/DEBUG = False/" ./application/config/debug_flag.py
sed -i "s/^sys.path.insert.*/sys.path.insert\(0, '\/home\/project'\)/" ./project.wsgi
chown me -R .
~/restart_server.sh


resteart_server.sh

간혹 서버를 직접 재구동하기도 하니, 서버 재구동용 스크립트는 따로 작성한다.
#!/bin/sh
service apache2 restart



by


Tags : , , , , , , , ,

  • 재미있게 읽으셨나요?
    방랑자의 이야기.
    월풍도원에선 기부를 받습니다.

Git cheat sheet


ssh 키페어 만들기

ssh 키 페어 만들기

git 기본 명령어


git init  - 초기화
git add * - git에 파일 목록 넣기
git commit -am 'initial commit' - 커밋
git push repository_name master - 해당 브랜치에 커밋
git clone git@app.repo.com:app/app.git - 코드를 로컬로  복제
cd app
git pull - 변경사항 풀


git 환경 설정


git config --global --list
현재 설정정보 조회할 수 있습니다. --global옵션은 전역설정에 대한 옵션이며 현재 프로젝트에만 적용할때는 주지 않습니다.
git config --global user.name "사용자명"
사용자명을 등록합니다 (필수)
git config --global user.email "이메일주소"
이메일 주소를 등록합니다. (필수)
git config --global color.ui “auto”
터미널에 표시되는 메시지에 칼라를 표시해 줍니다.



gitignore 사용하기


.gitignore
git config --global core.excludesfile ~/.gitignore_global
git rm -r --cached .
git add .
git commit -m ".gitignore 완성!"
git stash branch branchname
git fetch
git merge
git pull (git fetch + git merge branchname)


로컬 변경 무시하고 저장소에서 받아오기

모든 로컬 변경을 스태쉬 한다.
git stash save --keep-index
저장한 stash를 지운다.
git stash drop

파일 하나만 저장소에서 불러오려면 이렇게 한다.
git checkout HEAD^ path/to/file/to/revert

그리고 저장소에서 풀 한다.
git pull


특정 커밋으로 돌아가기
http://stackoverflow.com/questions/4114095/revert-to-previous-git-commit
git reset --hard 0d1d7fc32

Send a pull request on GitHub for only latest commit
http://stackoverflow.com/questions/5256021/send-a-pull-request-on-github-for-only-latest-commit
git checkout -b upstream upstream/master
git cherry-pick <SHA hash of commit>
git push origin upstream



How can I rollback a github repository to a specific commit?
http://stackoverflow.com/questions/4372435/how-can-i-rollback-a-github-repository-to-a-specific-commit
git reset --hard <old-commit-id>
git push -f



참고 자료

http://git-scm.com/
http://github.com/
아웃사이더님의 git 명령어 정리
구글 검색



by


Tags : , , , , ,

  • 재미있게 읽으셨나요?
    방랑자의 이야기.
    월풍도원에선 기부를 받습니다.

트랙+서브버젼 설치 (trac+svn) [소프트웨어형상관리,트랙,서브버젼,trac,svn,SCM]

이미지출처 : www.wiggy.net

Trac+SVN 설치 방법








——————————————————-

# 파이썬으로 인스톨 하기

——————————————————-

setup.py 파일이 들어있는 배포판의 인스톨 방법



python ./setup.py install



——————————————————-

# [swig] 설치(Simplified Wrapper and Interface Generator)

——————————————————-

./configure –with-python=/usr/bin/python

make

sudo make install



——————————————————-

# [Subversion] 설치(SCM)

——————————————————-

./configure -prefix=/usr/local –without-berkeley-db –enable-swig-bindings=python \

–with-swig=/usr/local/bin/swig PYTHON2=/System/Library/Frameworks/Python.framework/Versions/2.3/ \

–mandir=/usr/local/share/man –with-ssl –with-apxs=/usr/local/apache2/bin/apxs –with-zlib \

–with-apr=/usr/local/apache2 –with-apr-util=/usr/local/apache2

make

sudo make install



——————————————————-

# swig svn python bindings

——————————————————-

swig를 이용하여 svn을 연동

cd <subversion-distribution-top-dir>

make swig-py

sudo make install-swig-py

echo /usr/local/lib/svn-python > /Library/Python/2.3/site-packages/svn-python.pth



——————————————————-

# [Clearsilver]

——————————————————-

소스코드를 색으로 강조해준다.(highlight 기능)

cd <clearsilver-distribution-top-dir>

./configure –prefix=/usr/local –with-python=/usr/bin/python –disable-ruby

make

# >>> here modify first line of scripts/document.py to use same python (#!/usr/bin/ python)

sudo make install



——————————————————-

# [Docutils]

——————————————————-

문서를 원하는 형식으로 변환

cd < docutils-distribution-top-dir>

sudo python setup.py install



——————————————————-

# [postgres db] 설치

——————————————————-

./configure

gmake

su

gmake install

adduser postgres

mkdir /usr/local/pgsql/data

chown postgres /usr/local/pgsql/data

su - postgres

/usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data

/usr/local/pgsql/bin/postgres -D /usr/local/pgsql/data >logfile 2>&1 &

/usr/local/pgsql/bin/createdb -E=utf8 test

/usr/local/pgsql/bin/psql test



——————————————————-

# postgres 기본적인 명령어들

——————————————————-

c dbname : dbname 에 연결

\d : show databases

show server_encoding :

show client_encoding

set client_encoding = ‘uhc’;



——————————————————-

# trac 새로운 환경 만들기

——————————————————-

trac-admin /path/to/projectenv initenv



# 환경설정중에 DB에 postgres 사용하기

Database Connection Strings

postgres://user:pass@server/database?schema=yourschemaname



——————————————————-

# [pyPgSQL] 설치

——————————————————-

python에서 pgsql 이용하기 위해서 필요



——————————————————-

# [egenix-mx-base] 설치

——————————————————-

postgres의 DateTime을 사용하기 위해서 설치



——————————————————-

# trac 기본 익명 사용자 권한

——————————————————-

trac-admin PATH permission list - 권한 리스트 보기

trac-admin PATH permission add ID PERMISSION - 권한 추가(’*’ 사용가능)

trac-admin PATH permission remove ID PERMISSION - 권한 제거(’*’ 사용가능)



User Action

————————–

anonymous BROWSER_VIEW

anonymous CHANGESET_VIEW

anonymous FILE_VIEW

anonymous LOG_VIEW

anonymous MILESTONE_VIEW

anonymous REPORT_SQL_VIEW

anonymous REPORT_VIEW

anonymous ROADMAP_VIEW

anonymous SEARCH_VIEW

anonymous TICKET_CREATE

anonymous TICKET_MODIFY

anonymous TICKET_VIEW

anonymous TIMELINE_VIEW

anonymous WIKI_CREATE

anonymous WIKI_MODIFY

anonymous WIKI_VIEW



Available actions:

BROWSER_VIEW, CHANGESET_VIEW, CONFIG_VIEW, FILE_VIEW, LOG_VIEW,

MILESTONE_ADMIN, MILESTONE_CREATE, MILESTONE_DELETE, MILESTONE_MODIFY,

MILESTONE_VIEW, REPORT_ADMIN, REPORT_CREATE, REPORT_DELETE, REPORT_MODIFY,

REPORT_SQL_VIEW, REPORT_VIEW, ROADMAP_ADMIN, ROADMAP_VIEW, SEARCH_VIEW,

TICKET_ADMIN, TICKET_APPEND, TICKET_CHGPROP, TICKET_CREATE, TICKET_MODIFY,

TICKET_VIEW, TIMELINE_VIEW, TRAC_ADMIN, WIKI_ADMIN, WIKI_CREATE,

WIKI_DELETE, WIKI_MODIFY, WIKI_VIEW



——————————————————-

# svn PATH 설정

——————————————————-

cd ~

echo ‘export PATH="$PATH:/usr/local/bin"‘ >> .profile



——————————————————-

# trac + svn 권한 설정

——————————————————-

htpasswd -c .htpasswd ID 로 생성



create the .htpasswd in /var/trac/your_project/, for exampe:



[users]

YourName:8d2yxeC7vAkiQ

HisName:7$4k2Ci4QoVFc



# SVN authz

Edit the file authz in /var/svn/your_project/conf/, for example:



[groups]

admin = YourName



[/]

@admin = rw

HisName = r

* =



——————————————————-

trac-digest.py 패스워드 생성기

——————————————————-

from optparse import OptionParser

import md5



# build the options

usage = “usage: %prog [options]”

parser = OptionParser(usage=usage)

parser.add_option("-u", “–username",action="store", dest="username", type = “string",

help="the username for whom to generate a password")

parser.add_option("-p", “–password",action="store", dest="password", type = “string",

help="the password to use")

(options, args) = parser.parse_args()



# check options

if (options.username is None) or (options.password is None):

parser.error("You must supply both the username and password")



# Generate the string to enter into the htdigest file

realm = ‘trac’

kd = lambda x: md5.md5(’:’.join(x)).hexdigest()

print ‘:’.join((options.username, realm, kd([options.username, realm, options.password])))



——————————————————-

SVN & trac 구동(digest파일 사용)

——————————————————-


svnserve -d -r /data/repository/svn


python trac-digest.py -u username -p password >> c:\digest.txt

python tracd -d –port 8000 –auth proj_name,c:\digest.txt,trac c:\path\to\proj_name



——————————————————-

참조자료

——————————————————-

[TracInstall]

[TracOnOsxServerNoFink]

[TracEnvironment]

[TracPermissions]

[TracIni]



by


Tags : , , , , , , , , , ,

  • 재미있게 읽으셨나요?
    방랑자의 이야기.
    월풍도원에선 기부를 받습니다.

SCM도구 서브버젼 설치법, 서브버젼의 설정과 사용법.(SubVersion installation guide) [소프트웨어 형상관리,SCM,서브버젼,subversion,installation,서브버젼 설치법,서브버젼 사용법]

이미지출처 : blog.codesion.com

SCM(software configuration management)도구의 하나인 SVN의 설치 및 설정방법을

여러 웹페이지를 참조하여 간단하게 사용법을 정리해 보았다.








————————————————-

서브버젼 설정

————————————————-

1. 서브버젼을 설치한다. (http://subclipse.tigris.org/)



2. 저장소를 생성한다.

svn설치폴더\bin\svnadmin create 저장소명(ex: NC_DEV_TEAM) –fs-type fsfs

–fs-type 옵션에서 fsfs 는 파일시스템을 의미하며, bdb 는 버클리DB 를 의미한다.



3. NC_DEV_TEAM\conf\svnserve.conf를 수정한다.

(주석의 제거가 필요하다. 아래의 예 참조.)

——————————-

[general]

anon-access = none

auth-access = write

password-db = passwd

——————————-

anon-access : 계정이 없는 anonymous 의 권한을 설정한다.

auth-access : 계정이 있는 경우의 권한을 설정한다.

( none : 권한없음, read : 읽기권한, write : 읽기+쓰기권한 )

password-db = password : 계정을 password 파일을 사용한다.



4. NC_DEV_TEAM\conf\passwd를 수정한다. (계정설정)

——————————

[users]

testid = testpass

——————————-

5. 아래와 같이 실행한다.

cd C:\Program Files\Subversion\bin

svnserve -d -r ./NC_DEV_TEAM



6. 서비스는 다음과 같이 등록한다.

cygrunsrv –install svnserve -p 설치폴더\bin\runsvn.bat



net start svnserve



net stop svnserve

————————————————–

Linux

————————————————–



Subversion과 연관된 프로그램들을 컴파일 하고 설치하겠습니다.



[edit]

3.1 OpenSSL 컴파일과 설치 ¶



# tar vxzf openssl-0.9.7c.tar.gz

# cd openssl-0.97c

openssl-0.97c# ./config

openssl-0.97c# make

openssl-0.97c# make install

[edit]

3.2 Berkeley DB 컴파일과 설치 ¶



# tar vxzf db-4.3.28.NC.tar.gz

# cd db-4.3.28.NC

db-4.3.28.NC# cd build_unix

db-4.3.28.NC/build_unix# ../dist/configure

db-4.3.28.NC/build_unix# make

db-4.3.28.NC/build_unix# make install

db-4.3.28.NC/build_unix# echo “/usr/local/BerkeleyDB.4.3/lib” >> /etc/ld.so.conf

db-4.3.28.NC/build_unix# ldconfig



3.3 Apache 컴파일과 설치 ¶

Apache는 설치해도 되고 안 해도 됩니다. 웹으로 저장소를 공개한다거나. http:// 프로토콜을 이용해서 subversion을 이용하고 싶다면 설치하도록 합니다.



# tar vxzf httpd-2.0.54.tar.gz

httpd-2.0.54# ./configure –prefix=/usr/local/apache2 –enable-suexec \

–enable-so –with-suexec-caller=bin \

–enable-ssl –with-ssl=/usr/local/ssl –enable-cache \

–enable-ext-filter –with-z=/usr/include –enable-dav \

–with-dbm=db4 –with-berkeley-db=/usr/local/BerkeleyDB.4.2

httpd-2.0.54# make

httpd-2.0.54# make install



[edit]

3.4 Subversion 컴파일과 설치 ¶

데비안의 경우 zlib1g-dev, libxml2-dev, libexpat1-dev의 패키지가 필요합니다. 다른 배포판의 경우도 거의 같은 이름으로된 패키지가 있을 것입니다. 이 패키지들은 라이브러리와 헤더 파일을 포함하고 있는 것들입니다.



앞에서 Apache를 설치했을 경우



# tar vxzf subversion-1.2.1.tar.gz

# cd subversion-1.2.1

subversion-1.2.1# ./configure –with-zlib –with-ssl=/usr/local/ssl \

–with-apr=/usr/local/apache2 \

–with-apr-util=/usr/local/apache2 \

–with-apxs=/usr/local/apache2/bin/apxs \

–with-dbm=db4 –with-berkeley-db=/usr/local/BerkeleyDB.4.3

subversion-1.2.1# make

subversion-1.2.1# make install



Apache를 설치하지 않았을 경우



# tar vxzf subversion-1.2.1.tar.gz

# cd subversion-1.2.1

subversion-1.2.1# ./configure –with-zlib –with-ssl=/usr/local/ssl \

–with-dbm=db4 –with-berkeley-db=/usr/local/BerkeleyDB.4.3

subversion-1.2.1# make

subversion-1.2.1# make install



———————————————————————

서브버젼 저장소 생성시 권장 스텝

———————————————————————

There are many ways to begin a repository. I’d suggest the following:

(1) Use “svnadmin create” (once) much as you have to create an empty repository (at revision 0): so that would be something like “svnadmin create /var/repos”

(2) Locally, create your desired repository layout with trunk, tags, branches and any project directories as desired

(3) Use “svn import” on (2) to bring those directories into the repository (revision 1)

(4) Use “svn checkout” from the trunk in the repository to create a working copy of the empty trunk

(5) Locally, set up your source files in your working copy.

(6) Tell SVN about them using “svn add”

(7) Commit these to the repository (revision 2) with “svn commit”

Now trunk and tags are in the same repository, and the “svn copy” should work.



~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

서브버젼 클라이언트 설정법

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~



1. 이클립스를 실행한다.



2. Help>Software Update>find and Install

에서 다음 작업을 수행한다.

1) Search for new features to install 선택 (next)

2) 다음의 URL을 추가하고 체크박스를 선택한후 finish

————————————————

Name: Subclipse

URL: http://subclipse.tigris.org/update_1.0.x

————————————————



3. Window>Preferences>Team>SVN

부분에서 환경설정이 가능하다.

인터페이스는 JavaSVN으로 설정한다.



4. Window>Customize Perspective에서 SVN관련 부분을 체크해준다.



5. Repository에서 공유할 프로젝트를 우클릭한후

Team>share Project에서 SVN을 선택해 준다.



6. 서버 주소를 적어준후 계정정보를 입력한다.

svn://(IP or Domain:Port)/RepositoryName



###################################################

*올라간 파일의 프로퍼티 변경을 가능하게 해주려면

repository/hooks폴더안에 다음의 파일을 추가해준다.



pre-revprop-change.bat

————————————————–

REM REPOS=%1

REM REV=%2

REM USER=%3

REM PROPNAME=%4

if “%4″=="svn:log” goto :end

:err

exit 1

:end

exit 0



by


Tags : , , , , ,

  • 재미있게 읽으셨나요?
    방랑자의 이야기.
    월풍도원에선 기부를 받습니다.