flow. ci 를 사용 하여 프로젝트 문 서 를 빠르게 발표 합 니 다.
이 르 면 워드 + ppt 로 문 서 를 만 들 고 공유 서버 (ftp, 삼바) 에 올 리 는 방식 으로 문서 잠 금 과 덮어 쓰 는 문제 가 있 을 수 있 습 니 다. 몇 명의 작은 팀 은 괜 찮 습 니 다. 업데이트 할 때 "문 서 를 업데이트 하 겠 습 니 다. 여러분 은 어떤 파일 을 차지 하지 마 세 요 (windows 로 문 서 를 공유 하 는 동 화 를 사용 하 는 것 이 익숙 할 것 입 니 다)" 라 고 소 리 쳤 습 니 다.업 데 이 트 를 마치 고 다시 한 번 소 리 를 질 러 야 한다.그 밖 에 워드 파일 형식 (워드 파일 은 압축 패키지 로 많은 xml 과 다른 파일 로 구성 되 어 있 습 니 다) 이 너무 복잡 하기 때문에 git 나 svn 을 통 해 버 전 통 제 를 하 더 라 도 충돌 이 발생 하면 육안 통합 과 충돌 을 해결 하기 어렵 습 니 다.
그렇다면 상술 한 문 제 를 어떻게 해결 할 것 인가?이 글 은 gitbook + flow. ci 로 문서 의 발표, 통합 과 배 치 를 진행 하여 필요 한 학생 들 에 게 참고 하 기 를 바 랍 니 다.
문서 협업 & 버 전 관리 방법 (git + markdown)
개발 팀 은 git 나 svn 을 협력 과 버 전 관리 도구 로 사용 하 는 것 은 이미 성숙 한 방안 입 니 다. 물론 문서 에 도 사용 할 수 있 습 니 다. 다만 워드 문서 자체 가 버 전 관리 에 적합 하지 않 습 니 다. markdown 은 경량급 의 태그 언어 로 학습 이 간단 하고 손 이 쉽 습 니 다 (구체 문법 참고
http://wowubuntu.com/markdown/
. git 와 결합 하면 완벽 한 문서 버 전 통 제 를 할 수 있 습 니 다.문서 발표 방법 (gitbook + nginx)
가장 좋 은 방법 은 문 서 를 웹 사이트 로 발표 하 는 것 이다. 이렇게 하면 어떠한 도 구 를 설치 하지 않 아 도 문 서 를 볼 수 있 고 업데이트 할 때 사 이 트 를 업데이트 하면 된다.여기 서 gitbook 으로 markdown 파일 을 사이트 로 빠르게 생 성 합 니 다.
gitbook 이 뭐 죠?홈 페이지 에 이렇게 소개 되 어 있 습 니 다.
GitBook is a modern publishing toolchain. Making both writing and collaboration easy.
쉽게 말 하면 markdown 문 서 를 html, pdf, epub 등 다양한 형식 으로 바 꾸 는 것 이다. 많은 오픈 소스 소프트웨어 와 책 은 gitbook 으로 발표 된다. 예 를 들 어 Elasticsearch 권위 지침, Docker - 입문 부터 실천 등 이다.
markdown 문 서 를 정적 html 로 만들어 서버 (nginx) 에 배치 하면 브 라 우 저 를 통 해 볼 수 있 을 뿐만 아니 라 server 를 업데이트 하면 모든 사람 이 볼 수 있 는 최신 문서 입 니 다.
문 서 를 지속 적 으로 통합 & 배치 하 는 방법 (flow. ci)
CI (Continuous Integration) 는 '지속 적 통합' 이라는 뜻 으로 코드 의 지속 적 인 테스트 및 기타 코드 수정 과 의 통합 과 병합 을 말한다.
CD (Continuous Deployment) 는 '지속 적 인 배치' 라 는 뜻 으로 코드 와 패 치 의 지속 적 인 배 치 를 전체 코드 라 이브 러 리 에 말 합 니 다.
문 서 를 보면 지속 적 인 배 치 는 내용 의 지속 적 인 테스트 와 수정 이 필요 한 병합 과 배치 이다.배 치 는 발표 라 는 뜻 이다.예 를 들 어 '배치 문서' 는 출력 파일 이 웹 서버 에 복사 되 어 열람 되 는 것 을 말한다.
지속 적 인 통합, 지속 적 인 배 치 는 한두 마디 로 분명하게 말 할 수 있 는 것 이 아니 라 지속 적 인 통합, 지속 적 인 배 치 를 실현 하 는 도구 체인 도 다양 하 다. 예 를 들 어 가장 흔히 볼 수 있 는 jenkins, TravisCI 등 은 사용 하기에 너무 복잡 하 다.이 글 에서 저 는 자신의 지속 적 인 통합 서비스 인 flow. ci 를 사용 하여 문서 의 통합 과 배 치 를 진행 할 것 입 니 다. 참고 하 시기 바 랍 니 다.
git repo 저장 문서 만 들 기
우선, git repo 저장 문 서 를 만 듭 니 다. flow. ci 공식 문서 docs. flow. ci 를 예 로 들 면 git repo 는
[email protected]:FIRHQ/flow.ci.git
현재 flow. ci 는 github, bitbucket, 국내의 coding 과 개인 배 치 를 지원 하 는 Gitlab 입 니 다.문서 가 위 코드 창고 에 있 는 git repo 만 있 으 면 flow. ci 를 사용 하여 통합 할 수 있 습 니 다. flow. ci 에서 프로젝트 를 만 드 는 방법 은 문 서 를 참고 할 수 있 습 니 다.
flow. ci 에 flow 만 들 기
이 어 flow. ci 에 flow 를 만 들 고 언어 템 플 릿 은 nodejs (gitbook 을 사용 하려 면 node 환경 이 필요 합 니 다) 를 사용 합 니 다.
동시에 Cache, Install, Test 등 step 를 삭제 합 니 다. 이 몇 step 는 nodejs 프로젝트 에 제공 되 는 것 입 니 다. 우 리 는 nodejs 가 실 행 될 때 환경 과 npm 도구 만 필요 합 니 다.
사용자 정의 스 크 립 트 step 추가
삭제 후 사용자 정의 스 크 립 트 step 를 추가 합 니 다. 사용자 정의 스 크 립 트 step 를 추가 하 는 방법 은 문 서 를 참고 할 수 있 습 니 다.사용자 정의 스 크 립 트 두 개 를 추가 합 니 다. 하 나 는 gitbook 을 설치 하고 하 나 는 문 서 를 컴 파일 하고 발표 하 는 데 사 용 됩 니 다.
gitbook 을 설치 한 사용자 정의 스 크 립 트 step 내용
flow_cmd "npm install gitbook-cli -g" --echo --retry --assert
이곳 의 flowcmd 는 flow. ci 가 제공 하 는 함수 입 니 다. 명령 을 실행 하 는 데 실패 하면 다시 시도 합 니 다.
정적 파일 생 성 & 배치 사용자 정의 스 크 립 트 step 내용
if [ "$FLOW_GIT_BRANCH" == "gitbook" ]; then # gitbook
source get_commits_from_last.sh
bash -x ./deploy.sh
fi;
$FLOW_GIT_BRANCH
는 환경 변수 로 현재 git 분기 get_commits_from_last.sh
지난번 에 발 표 된 날짜 와 git commt id deploy.sh
gitbook 명령 으로 markdown 문 서 를 컴 파일 하고 첫 페이지 head 에 이번 commt id 번호 와 시간 스탬프 를 추가 하여 서버 에 발표 합 니 다. 스 크 립 트 는 마지막 으로 방 송 됩 니 다 Email Sender 플러그 인 은 메 일 수신 자, 메 일 테마, 메 일 내용 템 플 릿 등 세 가지 인자 가 필요 합 니 다. 다음 과 같 습 니 다.
총결산
이로써 flow. ci 를 사용 하여 문 서 를 빠르게 발표 하 는 절차 가 모두 완료 되 었 습 니 다.flow. ci 는 지속 적 으로 통합 되 고 지속 적 으로 배 치 된 도구 가 아니 라 자동화 의 시각 으로 번 거 로 운 일 을 살 펴 보고 새로운 사물 에 더 많은 시간 을 사용 하도록 도와 준다.
궁금 한 게 있 으 면 메 일 로 보 내 주세요[email protected], 당신 의 관점 을 공유:)
모든 step 에서 언급 된 스 크 립 트 를 첨부 합 니 다:
#!/usr/bin/env bash
# usage: sh get_commits_from_last.sh
# export 2 :
# DEPLOY_DIFF
# DEPLOY_LOG
set -e
STAGE="docs"
URL="${STAGE}.flow.ci"
HTML=`eval curl -sS ${URL}` # html
# html ID
LAST_ID=`echo $HTML | awk 'match($0, /-[0-9a-f]{7}/) { print substr( $0, RSTART+1, RLENGTH-1 )}'`
LAST_TIME=`echo $HTML | awk 'match($0, /[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}/) { print substr( $0, RSTART, RLENGTH )}'`"Z"
FMT="%Y-%m-%dT%H:%M:%SZ"
currDate=`date -u +"$FMT"`
if [[ `uname` == 'Darwin' ]]; then
ts=$(date -j -f "$FMT" "${currDate}" "+%s")
ts2=$(date -j -f "$FMT" "${LAST_TIME}" "+%s")
else
ts=$(date --date="${currDate}" +"%s")
ts2=$(date --date="${LAST_TIME}" +"%s")
fi
(( diff=(ts-ts2)/60 ))
export DEPLOY_DIFF=$diff
echo "Last $1 version : $LAST_ID @ ${LAST_TIME} (${DEPLOY_DIFF} minutes ago)"
echo "-----------------------------------------"
export DEPLOY_LOG=`git log --oneline $LAST_ID..HEAD`
echo "${DEPLOY_LOG}"
#!/bin/bash
set -e
# VARS
DEPLOY_TIME=`date +%Y%m%d%H%M%S`
REMOTE_DIR="/var/www/flow-doc"
RELEASE_DIR="${REMOTE_DIR}/release"
DEPLOY_DIR="${RELEASE_DIR}/${DEPLOY_TIME}"
LATEST_DIR="${REMOTE_DIR}/latest"
TARGET=prod
USER=deploy # rsa key
HOST=" server ip"
PORT=22 # ssh
# gitbook
gitbook build docs dist
#
FMT="%Y-%m-%dT%H:%M:%SZ"
currDate=`date -u +"$FMT"`
if [[ `uname` == 'Darwin' ]]; then
ts=$(date -j -f "$FMT" "${currDate}" "+%s")
else
ts=$(date --date="${currDate}" +"%s")
fi
#
branch=$(git rev-parse --abbrev-ref HEAD)
if [ -n "$FLOW_GIT_BRANCH" ] ; then
branch=$FLOW_GIT_BRANCH
fi
# commit log
commit=$(git rev-parse --short HEAD)
# COMMIT ID html
sed -i '/author/a\ \' ./dist/index.html
sed -i '/author/a\ \' ./dist/index.html
sed -i "s/COMMIT-TAG/${branch}-${commit}/g" ./dist/index.html
sed -i "s/UPDATE-TIME/${currDate}/g" ./dist/index.html
#
echo "########## Deploy to ${TARGET} ##########"
ssh ${USER}@${HOST} -p ${PORT} "mkdir -p ${DEPLOY_DIR}"
ssh ${USER}@${HOST} -p ${PORT} "rm -rfv ${LATEST_DIR}"
scp -P ${PORT} -rv ./dist/* ${USER}@${HOST}:${DEPLOY_DIR}
ssh ${USER}@${HOST} -p ${PORT} bash -x <
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
《 큰소리 SecureCRT 스 크 립 트 》 의 (2) 순환 증가반찬: 매일 N 개의 명령 을 반복 해서 입력 해 야 하 는데, 이 제 는 재생 스 크 립 트 하나 로 끝 났 습 니 다. 큰 새: 유 조 는 가 르 칠 수 있어 요 ~ 역시 똑똑 해 요.이렇게 되면 한 대의 장 치...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.