연결 환경 빠 른 배치 - docker - compose 기반 CI / CD 실천

항목 주소:https://github.com/xiongwilee...기본 기능:
  • 다 중 nginx + phop 의 개발 테스트 환경 을 신속하게 배치 하고 다른 언어 를 확장 할 수 있 습 니 다.
  • Docker 와 docker - compose 를 바탕 으로 K8S 등 고급 편성 도구 에 의존 하지 않 고 원가 가 저렴 하 며 배치 가 간단 합 니 다.
  • Docker 에 통합 jenkins 가 내장 되 어 있 고 개발 테스트 캐릭터 를 원 키 로 추가 하여 추가 설정 이 필요 없습니다.
  • 마이크로 서비스 구 조 를 지원 하고 작은 회사 or 민첩 프로젝트 팀 에 적용 되 며 Docker 학습 입문 케이스 로 도 사용 할 수 있 습 니 다.

  • 배경
    캐릭터 분업 이 명확 한 팀 에서 어떤 조건 이 가장 우아 한 조화 테스트 환경 이 라 고 할 수 있 습 니까?큰 공장 에는 틀림없이 많은 고급 해결 방안 이 있 을 것 이다. 예 를 들 어 이런 것들:
  • docker 는 대규모 테스트 환경 을 구축 하 는 실천 / 테스트 개발 의 길 - k8s 에서 의 대규모 지속 적 인 통합 과 환경 관리
  • DevOps 착지 실천: BAT 시리즈: CICD: ipe vs CCI
  • 아 리 DevOps 전환 실천
  • 대형 팀 의 합작 구조 에서 더욱 복잡 한 DevOps 구조 에 의존 해 야 한다 (참고: DevOps 상세 설명).그러나 구성원 이 많 지 않 고 담당 하 는 웹 프로젝트 의 공 사 량 이 많 지 않 은 팀 에 게 직면 하 는 문제 도 더욱 단순 할 것 이다.
  • 전후 단 역할 공정 디 결합, 개발 환경 분리;
  • 엔 지 니 어 는 업무 논리 자체 에 만 관심 을 가지 고 지속 적 으로 집적 한다.
  • 환경 과 캐릭터 의 원 키 생 성, 원 키 업데이트, 원 키 소각, 환경 간 에 영향 을 받 지 않 습 니 다.

  • 이러한 수요 만 있 더 라 도 기 존의 '개발 기' 의 연결 환경 에서 개발 이나 테스트 인원 을 추가 하거나 nginx 의 설정 을 업데이트 해 야 하거나 PHP, Nodejs 버 전 을 업데이트 해 야 하 는 것 은 테스트 환경 유지 에 있어 서 매우 고 통 스 러 운 일이 다.
    2. 빠 른 시작
    주의: 현재 배치 방안 은 의존: Docker, Docker-compose, git1. 다운로드 코드
    $ git clone https://github.com/xiongwilee/docker-compose-boilerplate.git

    2, 테스트 캐릭터 추가 demo
    $ cd docker-compose
    $ sh build.sh -u demo -m admin:master

    이 때 app/ 에 서 는 demo 디 렉 터 리 를 만 들 고 nginx/conf.d 에 서 는 demo.conf 파일 을 만 듭 니 다.
    3. 서비스 시작
    $ docker-compose up -d

    이때 다시 실행 docker-compose ps 하면 세 개의 미 러 를 만 든 것 을 발견 할 수 있 습 니 다.그리고 hosts 를 설정 하여 현재 기 계 를 가리 키 고 접근 합 니 다.http://sample.demo.testdomain... sample.demo.testdomain.com 정 보 를 되 돌려 주 고 생 성 성공 을 설명 합 니 다.
    3. 배치 구조 설명
    TIPS: 이 방안 은 작은 회사 or 민첩 프로젝트 팀 의 테스트 환경 배치 에 만 적용 되 며, Docker 학습 입문 케이스 로 도 사용 할 수 있 으 며, 일정한 규모 의 생산 환경 에 적용 되 지 않 습 니 다.
    '개발 기' 에 docker, docker - compose, git 만 설치 한 후에 Nginx, PHP 의 응용 은 당연히 docker 용기 화 사상 덕분이다.사실 이것 의 실현 도 용기 화 된 이 특성 만 을 이용 하여 최종 적 으로 docker - compose 포장 의 전체 서비스 회장 이 메모리 에 저장 되 고 많은 관리 비용 이 필요 하지 않 습 니 다.
    최종 실현 은 두 가지 특징 을 가진다.
  • 이 를 바탕 으로 이 루어 진 boilerplate 는 다른 프로젝트 와 다른 언어 로 쉽게 이전 할 수 있 습 니 다.
  • phpinfo() 은 모든 응용 창고 주소, 환경 변수 설정, 코드 업데이트 후의 갈고리 등 조작 을 관리한다.

  • 그 실현 원 리 는 스 크 립 트 파일 을 통 해 docker - compose 를 숙주 호스트 에 투사 하 는 설정, 소스 코드 를 관리 하 는 동시에 docker - compose 를 노출 시 켜 서비스 관 리 를 실현 하 는 것 이다.구조 도 는 다음 과 같다.
    1. docker - compose 설정 파일: sampledocker - compose 설정 파일 docker-compose.yml 을 먼저 보 세 요.
    version: '3'
    services:
        #    PHP     app   
        php:
            build: ./php
            expose:
                - "9000"
        # nginx  
        nginx:
            build: ./nginx
            #     
            ports:
                - "80:80"
            #       ,  php    
            depends_on:
                - "php"
        # jenkins  
        jenkins:
            image: jenkins:latest
            ports:
                - "8080:8080"
                - "50000:50000"

    이것 은 바로 일반적인 PHP 개발 환경 예제 이다. docker-compose.yml, php, nginx 세 개의 기본 용 기 를 볼 수 있 고 jenkins 를 제외 한 다른 용 기 는 모두 Dockerfile (build 설정) 을 사용 하여 구축 할 수 있다.
    2. 구축 스 크 립 트: jenkinsdocker 에서 nginx 설정 파일 과 phop 소스 파일 의 맵 을 숙 호스트 에 실 현 했 기 때문에 숙 호스트 의 파일 을 관리 하면 코드 의 발표 와 배 치 를 관리 할 수 있 습 니 다. build.sh 이 바로 이 일 을 하 는 데 사 용 됩 니 다.
    물론 배치 코드 가 완 료 된 후에 재 부팅, 컴 파일 등 작업 을 해 야 한다 면 Sample 디 렉 터 리 의 갈 고 리 를 통 해 이 루어 질 수 있 습 니 다.
    구체 적 인 실현 은 build.sh 소스 코드 를 참고 할 수 있다.
    4. 상세 설정
    1. 테스트 환경 도 메 인 이름 설정 개발build.sh 테스트 환경 도 메 인 이름 을 수정 하고 예제 에서 사용 하 는 nginx/conf.d/sample 을 자신의 테스트 환경 도 메 인 이름 으로 바 꾸 면 된다.
    또한 이 서 비 스 를 배치 하 는 기계 에 테스트 도 메 인 이름 범 위 를 분석 하 는 것 을 권장 합 니 다.
    2. testdomain.com 설정 설명
    docker - compose 의 설정 파일 은 기본적으로 수정 할 필요 가 없습니다. 관심 만 가 져 야 합 니 다. nginx 는 80 포트 에 매 핑 되 고, jenkins 는 8080 포트 이 며, phop - fpm 의 9000 포트 는 대외 적 으로 개방 되 지 않 으 면 됩 니 다.
    물론 phop 환경 이 설치 의존 이 필요 하 다 면 수정 docker-compose.yml 이 필요 하 다.또 다른 언어 환경 을 추가 하려 면 용기 성명 을 추가 해 야 한다.
    3. 모듈 설정
    1) 배치 스 크 립 트 ./php/Dockerfile비 즈 니스 모듈 의 설정 은 기본적으로 배치 스 크 립 트 build.sh 를 통 해 작 동 합 니 다.실행 build.sh 알림 은 다음 과 같 습 니 다.
    Example:
      ./build.sh -u xiongwilee -m php:online,service:online
    Usage:
      -u   ,                            :default
      -m   ,                     :php:online,service:online
      -e   ,                  :php:true,service:false
      -d   ,                           :default

    2) PHP 모듈
    추가 캐릭터 는 실시 간 으로 ./build.sh 디 렉 터 리 에 따라 캐릭터 이름 에 해당 하 는 폴 더 를 만 들 었 습 니 다.sample 에 네 개의 파일 만 있 습 니 다:
    창고 배치
  • php/sample: 현재 모듈 의 원 격 창고 주 소 를 설명 합 니 다
  • 갈고리
  • .gitaddress: 캐릭터 를 만 들 때 PHP 모듈 코드 가 완 료 된 후 리 셋 갈 고 리 를 다운로드 하고 환경 변수 등 파일 을 업데이트 하면 실행 on_add.sh 이 호출 됩 니 다
  • ./build.sh -u {name}: 어떤 모듈 이 업 데 이 트 된 후의 리 셋 갈 고 리 를 컴 파일, 리 셋 서비스 등 으로 실행 on_upd.sh 하면 호출 됩 니 다
  • ./build.sh -u {name} -m web:master: 환경 변 수 를 업데이트 하 는 갈고리, 실행 on_env.sh 이 모두 호출 됩 니 다.

  • c. 예제 디 렉 터 리 ./build.sh -u {name} -m web:master -e web:true:
    sample 디 렉 터 리 에 sample 디 렉 터 리 가 있 습 니 다. 이것 은 phop 모듈 예제 입 니 다.캐릭터 를 추가 한 후 sample. {name}. testdomain. com 을 방문 하면 추가 여 부 를 테스트 할 수 있 습 니 다.
    3) Nginx 설정
    목록
    php / sample 디 렉 터 리 와 마찬가지 로 app/sample/sample 아래 에 도 sample 파일 이 있 습 니 다. 이것 도 캐릭터 를 추가 할 때 사용 하 는 예제 설정 파일 입 니 다.추가 캐릭터 는 sample 의 ${name} 을 현재 캐릭터 이름 으로 바 꿉 니 다.
    b. nginx/conf.d 디 렉 터 리nginx/conf.d 디 렉 터 리 와 nginx 모든 로그 파일 의 홈 호스트 맵 디 렉 터 리.
    4) Jenkins 구성 방안
    jenkins 는 기본적으로 8080 포트 를 엽 니 다. 직접 통과 할 수 있 습 니 다.http://jenkins.testdomain.com:8080jenkins 서비스 방문.구체 적 인 초기 화 과정 은 여기 서 상세 하 게 설명 하지 않 습 니 다.
    a. 플러그 인 을 설치 하여 현재 사용자 이름 가 져 오기
    Jenkins 를 통 해 build. sh 스 크 립 트 를 실행 할 때 위 에서 언급 한 캐릭터 이름 은 어떻게 얻 습 니까?사실은 제 인 킨 스 의 사용자 이름 입 니 다. 여러 개의 제 인 킨 스 를 만 드 는 사용 자 를 통 해 테스트 환경 역할 을 만 들 수 있 습 니 다.
    jenkins 플러그 인 - Build User Vars Plugin 의 간단 한 설명 을 참고 하여 jenkins 플러그 인 을 설치 합 니 다.
    설치 가 완료 되면 nginx/log 환경 변 수 를 통 해 현재 jenkins 의 사용자 이름 을 얻 을 수 있 습 니 다. (물론 새 jenkins 사용자 의 사용자 이름 은 병 음 이나 영어 가 좋 습 니 다.)
    b. Docker 미 러 의 Jenkins 가 홈 호스트 와 통신 합 니 다.
    제 인 킨 스 는 Docker 미 러 에 존재 하기 때문에 제 인 킨 스 작업 을 수행 할 때마다 nginx/log 미 러 의 제 인 킨 스 를 홈 호스트 와 통신 해 야 합 니 다.여기 서 사용 하 는 방법 은 젠 킨 스 의 미 러 에 호스트 의 신뢰 관 계 를 추가 하 는 것 입 니 다.
    그리고 BUILD_USER 를 통 해 호스트 의 스 크 립 트 를 직접 실행 할 수 있 습 니 다.
    c. job 추가
    하나의 작업 을 추가 한 후 두 가지 만 설정 하면 됩 니 다:
  • genel: "매개 변수 화 구축 과정":
  • "String Parameter" 를 선택 하고 "web", "web - fe", "service" 필드 를 추가 합 니 다
  • 'Boolean Parameter' 를 선택 하고 '웹 env', '서비스 env' 필드 를 추가 합 니 다.

  • 구축: "Execute Shell":
  • echo "    web-fe:${web_fe},web:${web},service:${service}      ${BUILD_USER_ID}   "
    
    ssh apple@{jenkins  IP} "sh ~/docker-compose/build.sh -u ${BUILD_USER_ID} -m web-fe:${web_fe},web:${web},service:${service} -e web:${web_env},service:${service_env}";

    이렇게 하면 이 작업 을 통 해 jenkins 에서 호스트 의 build.sh 스 크 립 트 를 직접 실행 하여 캐릭터 를 추가 하고 코드 를 업데이트 하 는 작업 을 실현 할 수 있 습 니 다.
    마지막 으로 만약 에 PHP 의 서 비 스 를 바탕 으로 다른 언어의 서 비 스 를 통합 해 야 한다 면 예 를 들 어 Nodejs 와 관련 된 변경 사항 은 다음 과 같다.
  • Nodejs 미 러 추가: ssh apple@{jenkins IP} "sh build.sh"
  • 배치 퀘 스 트 추가: build.sh
  • 캐릭터 프로 세 스 생 성 및 삭제
  • 배치 절차
  • nginx 프로필 예제: docker-compose.yml
  • 공헌
    다른 전문 적 인 아 이 디 어 를 제공 하 는 것 을 환영 합 니 다. issue, fork 를 제시 하 는 것 을 환영 합 니 다.메 일 로 연락 하 셔 도 됩 니 다: xiongwilee [at] foxmail. com.

    좋은 웹페이지 즐겨찾기