Docker outside of Doodo를 통한 GiitLab-cI

업데이트
2010/04/24 소스 코드가 설정된 URL이 잘못되어 수정됨
2010/05/01 소감 및 명령 수정

  • 이 직위는
    멈출 이유가 없으니까.시작 GiitLab으로 com을 사용할 수 없는 나날을 보내다의 후속 보도.
  • 골대

  • DOOD를 통한 CI 환경 구축
    공식-공통 Docker socket binding
  • 다음 그림 참조
    (Start) http://192.168.100.201:80/kubolab/tms의 master 제출을 계기로 CI 실행
    (End) http://192.168.100.201:10080에서 응용 프로그램의 초기 화면을 볼 수 있습니다.
    ※ 어쨌든 습관이 된 CakePHP3을 사용했습니다.
  • 감상


    일단 소감.더듬으면서 하는 거지만 도대체 이 방법이 자신 없는 건지...
    시험 따위가 움직일 수 있다면 다음은
    컨테이너의 볼륨을 중지하고 Docker Hub 상태의 컨테이너에 소스 코드를 배치합니다(Amazon ECS 또는 Azure로...).디자인하고 싶어요.

    구성도


    소스 코드: https://gitlab.com/kubolab/tms/-/tree/gitlab-ci-dood
    팀명, 프로젝트명을 블로그 투고용으로 변경하려고 했는데 일이 많이 걸려 이래서 미안하게 됐다.
    GiitLab 그룹 이름
    GiitLab 프로젝트 이름
    kubolab
    tms

    tree


    👀: 本来は gitignore に含めるべき
    .
    ├── .build
    │   ├── build.cmd
    │   ├── docker-compose.yml
    │   ├── .env
    │   └── .project-items 👀
    │       ├── app.php # DB接続情報等
    │       └── createdb.sql
    │
    ├── app.src
    │   ├── config
    │   │   └── app.php 👀
    │   └── webroot
    ├── docker
    │   ├── build
    │   │   ├── cake_app
    │   │   │   └── Dockerfile
    │   │   └── cake_nginx
    │   │       └── Dockerfile
    │   ├── config
    │   │   └── nginx
    │   │       └── default.conf
    │   ├── postgres-dump
    │   └── sh
    │       └── postgres
    │           └── docker-entrypoint-initdb.d
    │               └── init.sh # docker-compose up 時に実行される
    │
    └── shared_サーバ配置用 # CI実行前に GitLab サーバに配置しておく。
    
    항목
    컨텐트
    사전 설치된 GitLab의 IP
    192.168.100.201
    Host OS
    Windows 10 Pro 1909
    VirtualBox의 게스트 OS
    이전 문장을 인용하다
    Greest OS에서 이동하는 GitLab ver
    이전 문장을 인용하다
    GitLab Runner
    12.9.0
    Docker 컨테이너 이름(모두)
    image
    시험을 준비하다
    cake_nginx
    nginx:1.13.5-alpine
    ports: 10080:80 1
    cake_php
    php:7-fpm
    cake_postgres
    postgres:10.3-alpine
    ports: 5432:5432

    준비(GitLab에서 실행되는 서버)


  • CI를 실행할 때 사용할 파일을 수동으로 구성합니다(버전 관리에 포함되지 않는 파일).
    ※ SCP 또는 무언가를 통해/shared_サーバ配置用 GitLab 서버에 배치
    /shared
    └── kubolab
       └── tms
           └── .project-items
               └── app.php      #DB接続情報等
               └── createdb.sql #DB初期データ
    

  • GTLab-Runner(gitlab-Runner) 컨테이너 시작
    ⅰ. Hub OS에 Docker 설치
    https://qiita.com/ymasaoka/items/b6c3ffea060bcd237478 -- Install Docker on CentOS 7
    ⅱ. GTLab-Runner 컨테이너 시작
    $ docker run -d --name gitlab-runner-dd --restart always \
        -v /srv/gitlab-runner-dd/config:/etc/gitlab-runner \
        -v /var/run/docker.sock:/var/run/docker.sock \
        gitlab/gitlab-runner:latest
    
    # GitLab-Runner コンテナに入って実行
    $ docker exec -it gitlab-runner-dd bash
    
    # docker をインストール
    $ curl -sSL https://get.docker.com/ | sh
    # docker グループに追加
    $ usermod -aG docker gitlab-runner
    

  • 작업을 실행하는 Runner에 로그인합니다.
    ⅰ. 등록!
    ★ 필기를 한 Token
    참조: https://qiita.com/hykisk/items/ebff2f7cd2e8100a6bbe - 작업을 수행하는 Runner를 등록합니다.
    $ gitlab-runner register -n \
        --url http://172.17.0.1/ \
        --registration-token ★メモしたToken \
        --executor docker \
        --docker-image "docker:stable" \
        --docker-volumes /var/run/docker.sock:/var/run/docker.sock \
        --docker-volumes /shared-builds/kubolab/tms:/builds/kubolab/tms \
        --docker-volumes /shared/kubolab/tms/.project-items:/gitlab-runner-dd/.project-items \
        --tag-list app-build \
        --clone-url = "http://192.168.100.201"
    
    memo: 호스트 이름을 GitLab에 할당하는 동안 클론이 실패했습니다.옵션--clone-url을 취소하고 이름 해결을 추가로 지정합니다.--docker-extra-hosts "gitlab.private.hykisk.com:172.17.0.1"
  • gitlab-ci.yml

  • $CI_PROJECT_PATH는 GitLab의 지정된 값에 의해 결정됩니다.
  • 정의된 변수(SHARED BUILDS DOCKER DIR)는 docker-compose입니다.yml에서 사용 가능합니다.
  • /gitlab-ci.yml
    stages:
      - doodbuild
    variables:
      GIT_STRATEGY: fetch
    doodbuild:
      stage: doodbuild
      variables:
        SHARED_BUILDS_DOCKER_DIR: /shared-builds/$CI_PROJECT_PATH
        SHARED_DATA_DIR: /shared/$CI_PROJECT_PATH
      image: docker:stable
      script:
        - cp -pf /gitlab-runner-dd/.project-items/app.php $CI_PROJECT_DIR/app.src/config
        # このコンテナ (gitlab-runner) に docker-compose をインストール
        - apk update && apk add docker-compose
        - docker-compose -f ./.build/docker-compose.yml down
        # Dockerfile に手を加えたら build しなおす
        #- docker-compose -f ./.build/docker-compose.yml down --rmi all --volumes
        #- docker-compose -f ./.build/docker-compose.yml build --no-cache
        - docker-compose -f ./.build/docker-compose.yml up -d
        # アプリに必要なパッケージをインストール
        - docker exec cake_app sh -c "cd /var/www/app && composer install"
      #only:
        #- master
      tags:
        - app-build
    
    
    

    docker-compose.yml


    /.build/docker-compose.yml
    version: '3'
    services:
      web:
        container_name: cake_nginx
        build:
          context: ..
          dockerfile: docker/build/cake_nginx/Dockerfile
        volumes:
          - $SHARED_BUILDS_DOCKER_DIR/app.src:/var/www/app
          - $SHARED_BUILDS_DOCKER_DIR/docker/config/nginx/default.conf:/etc/nginx/conf.d/default.conf:ro
          - $SHARED_DATA_DIR/nginx_log:/var/log/nginx
        depends_on:
          - app
        ports:
          - 10080:80
        networks:
          vpcbr:
            ipv4_address: 172.26.0.2
      app:
        container_name: cake_app
        build:
          context: ..
          dockerfile: docker/build/cake_app/Dockerfile
        volumes:
          - $SHARED_BUILDS_DOCKER_DIR/app.src:/var/www/app
        networks:
          vpcbr:
            ipv4_address: 172.26.0.3
      db:
        container_name: cake_postgres
        image: postgres:10.3-alpine
        ports:
          - 5432:5432
        volumes:
          - $SHARED_BUILDS_DOCKER_DIR/docker/data/postgres:/var/lib/postgresql
          # DB作成スクリプトを配置
          - $SHARED_BUILDS_DOCKER_DIR/docker/sh/postgres/docker-entrypoint-initdb.d/init.sh:/docker-entrypoint-initdb.d/init.sh
          - $SHARED_DATA_DIR/.project-items/createdb.sql:/tmp/createdb.sql:ro
        environment:
          POSTGRES_USER: $TMS_POSTGRES_USER
          POSTGRES_PASSWORD: $TMS_POSTGRES_PASSWORD
          POSTGRES_DUMP_FILE_DIR: /tmp
        networks:
          vpcbr:
            ipv4_address: 172.26.0.4
    networks:
      vpcbr:
        ipam:
          driver: default
          config:
          - subnet: 172.26.0.0/24
    
    
    memo: 공개할 수 없는 정보는 브라우저(GitLab의 GUI)에서 설정한 환경 변수를 사용합니다.
        environment:
          POSTGRES_USER: $TMS_POSTGRES_USER
          POSTGRES_PASSWORD: $TMS_POSTGRES_PASS
    
    http://192.168.100.201/kubolab/tms/-/settings/ci_cd

    기타 파일(Docker file 등)


    소스 코드:참조https://gitlab.com/kubolab/tms/-/tree/gitlab-ci-dood

    확인


    PUSH를 통해 CI 작업created -> running -> passed이 되면 OK

    재구성도(상세판)




    더블 클릭/build/build.cmd으로 로컬 PC(Docker for Windows 설치 완료)의 개발 환경을 구축합니다.소스 할애

    환경 구축의 어려움

  • 문제: 용기 내에서 실행되는 케이스는 Permission denied로 실행할 수 없습니다.

  • 해법: 집행 권한 수여
  •   $ git update-index --add --chmod=+x {filepath}
    
  • 문제: 파일럿 오류(CI 환경, 로컬 PC 불문) Docker의 행동에 이상이 발생했을 때
  • 해법: 모두 제거
  • CI 환경 상황
    # GitLab サーバで (設定ファイルが残るので削除しておく)
    docker exec -it gitlab-runner-dd bash
    rm -f /etc/gitlab-runner/config.toml
    exit
    
    docker ps -aq | xargs docker rm -f
    docker images -aq | xargs docker rmi
    docker volume rm $(docker volume ls -qf dangling=true)
    docker network rm XXX_vpcbr
    
    로컬 PC의 경우(cmd)
    for /f "usebackq" %x in (`docker ps -aq`) do docker rm -f %x
    for /f "usebackq" %x in (`docker images -q`) do docker rmi %x
    for /f "usebackq" %x in (`docker volume ls -q`) do docker volume rm %x
    docker network rm XXX_vpcbr
    
    로컬 PC의 경우(powerrshell)
    cd .build
    docker-compose down --rmi all --volumes
    docker rm -f $(docker ps -aq)
    docker rmi -f $(docker images -aq)
    docker network rm XXX_vpcbr
    
    호스트 격인 지트랩은 80호를 사용하기 때문에 10080호를 사용한다.
    액세스 프로세스:
    1. 브라우저10080로 GitLab 서버 액세스
    2. VirtualBox포트 전달 규칙를 통해 10080 -> 10080에 매핑
    3.nginx의 설정10080 -> 80을 통해 비추기
     

    좋은 웹페이지 즐겨찾기