2016-09-09 21 views
1

gitlabランナーを使用して正常に構築されたドッカー画像をデプロイしたいと思っていますが、これを行うために.gitlab-ci.ymlのデプロイメントステージを使用する方法がわかりません。ビルドログは、ビルドプロセス中にデータベースがドッカーイメージ上に正しく作成されたことを示しています。gitlab runnerがビルドを完了した後にデプロイ

私はMac(OSX 10.11.6)でローカルにドッカーを使用して、ドッカーコンテナを構築しています。 Gitlabはリモートで実行されています。私はビルドを処理するために特定のローカルランナーを登録しました。プロジェクトに変更を加えると、gitlab CIはビルドスクリプトを実行してテストデータベースを作成します。それが構築された後の画像はどうなりますか?完成したビルドのドッキング・イメージは、ローカル・マシンにリストされていません。 gitlab-runner-prebuilt-x86_64はビルドに接続されていないベアボーンのLinuxイメージです。

https://docs.gitlab.com/ce/ci/docker/using_docker_build.html

http://container-solutions.com/running-docker-in-jenkins-in-docker/

>gitlab-ci-multi-runner list 
Listing configured runners       ConfigFile=/Users/username/.gitlab-runner/config.toml 
local-docker-executor        Executor=docker Token=[token] URL=http://gitlab.url/ci 

>docker images 
REPOSITORY      TAG     IMAGE ID   CREATED    SIZE 
gitlab-runner-prebuilt-x86_64 f6fdece    [id1]  25 hours ago  50.87 MB 
php7       latest    [id2]  26 hours ago  881.8 MB 
ubuntu       latest    [id3]  13 days ago   126.6 MB 
docker       latest    [id4]  2 weeks ago   104.9 MB 

.gitlab-ci.yml:

image: php7:latest 

# build_image: 
# script: 
#  - docker build -t php7 . 

# Define commands that run before each job's script 
# before_script: 
# - docker info 

# Define build stages 
    # First, all jobs of build are executed in parallel. 
    # If all jobs of build succeed, the test jobs are executed in parallel. 
    # If all jobs of test succeed, the deploy jobs are executed in parallel. 
    # If all jobs of deploy succeed, the commit is marked as success. 
    # If any of the previous jobs fails, the commit is marked as failed and no jobs of further stage are executed. 
stages: 
    - build 
    - test 
    - deploy  

variables: 
    db_name: db_test 
    db_schema: "db_test_schema.sql" 

build_job1: 
    stage: build 
    script: 
    - service mysql start 
    - echo "create database $db_name" | mysql -u root 
    - mysql -u root $db_name < $db_schema 
    - mysql -u root -e "show databases; use $db_name; show tables;" 
    #- echo "SET PASSWORD FOR 'root'@'localhost' = PASSWORD('root');" | mysql -u root 
    #- echo "run unit test command here" 
    #Defines a list of tags which are used to select Runner 
    tags: 
    - docker 

deploy_job1: 
    stage: deploy 
    #this script is run inside the docker container 
    script: 
    - whoami 
    - pwd 
    - ls -la 
    - ls/
    #Usage: docker push [OPTIONS] NAME[:TAG] 
    #Push an image or a repository to a registry 
    - docker push deploy:latest 
    #gitlab runners will look for and run jobs with these tags 
    tags: 
    - docker 

config.toml

concurrent = 1 
check_interval = 0 

[[runners]] 
    name = "local-docker-executor" 
    url = "http://gitlab.url/ci" 
    token = "[token]" 
    executor = "docker" 
    builds_dir = "/Users/username/DOCKER_BUILD_DIR" 
    [runners.docker] 
    tls_verify = false 
    image = "ubuntu:latest" 
    privileged = false 
    disable_cache = false 
    volumes = ["/cache"] 
    [runners.cache] 

Dockerfile

FROM ubuntu:latest 

#https://github.com/sameersbn/docker-mysql/blob/master/Dockerfile 
ENV DEBIAN_FRONTEND noninteractive          
ENV MYSQL_USER mysql              
ENV MYSQL_DATA_DIR /var/lib/mysql          
ENV MYSQL_RUN_DIR /run/mysqld           
ENV MYSQL_LOG_DIR /var/log/mysql           
ENV DB_NAME "db_test"            
ENV DB_IMPORT "db_test_schema.sql"         

# RUN apt-get update && \ 
#  apt-get -y install sudo 
# RUN useradd -m docker && echo "docker:docker" | chpasswd && adduser docker sudo 
# USER docker 
# CMD /bin/bash 

RUN apt-get update              \ 
&& DEBIAN_FRONTEND=noninteractive apt-get install -y mysql-server  
# \ 
# && rm -rf ${MYSQL_DATA_DIR}           \ 
# && rm -rf /var/lib/apt/lists/* 

ADD ${DB_IMPORT} /tmp/${DB_IMPORT} 


# #RUN /usr/bin/sudo service mysql start             \ 
# RUN service mysql start             \ 
# && mysql -u root -e "CREATE DATABASE $DB_NAME"       \ 
# && mysql -u root $DB_NAME < /tmp/$DB_IMPORT 

RUN locale-gen en_US.UTF-8 \ 
    && export LANG=en_US.UTF-8 \ 
    && apt-get update \ 
    && apt-get -y install apache2 libapache2-mod-php7.0 php7.0 php7.0-cli php-xdebug php7.0-mbstring php7.0-mysql php-memcached php-pear php7.0-dev php7.0-json vim git-core libssl-dev libsslcommon2-dev openssl libssl-dev \ 
    && a2enmod headers 

ENV APACHE_RUN_USER www-data 
ENV APACHE_RUN_GROUP www-data 
ENV APACHE_LOG_DIR /var/log/apache2 
ENV APACHE_PID_FILE /var/run/apache2.pid 
ENV APACHE_RUN_DIR /var/run/apache2 
ENV APACHE_LOCK_DIR /var/lock/apache2 
RUN ln -sf /dev/stdout /var/log/apache2/access.log && \ 
    ln -sf /dev/stderr /var/log/apache2/error.log 
RUN mkdir -p $APACHE_RUN_DIR $APACHE_LOCK_DIR $APACHE_LOG_DIR 


#VOLUME [ "/var/www/html" ] 
WORKDIR /var/www/html 

EXPOSE 80 3306 

#ENTRYPOINT [ "/usr/sbin/apache2" ] 
#CMD ["-D", "FOREGROUND"] 

#ENTRYPOINT ["/bin/bash"] 
+0

私は間違っている可能性がありますが、あなたの質問はGitlabsよりもDockersに関連しています。 –

+0

GitLabランナーに私のドッカー画像を配備させたいのですが。これを行うには、ソケット上でイメージ上にサービスとして実行されているドッカーを持っていなければならないか、イメージにドッカーがインストールされている必要があります。 – maogenc

答えて

1

あなたはCIでドッカー画像を構築していません。

DockerHubのphp7イメージを使用してすべてのジョブを実行しています。これには、dockerバイナリを使用してそのコンテナ内にないイメージ(deploy:latest)をプッシュしようとしているジョブdeploy_job1が含まれます。さらに、私はdockerバイナリはphp7イメージに含まれていないと思います。

Macでローカルに作成したイメージをプッシュしたいと思うでしょうか?その場合、実行者はshellでなければならない別のランナーを使用する必要があります。このシナリオでは、ドッカーを使用してbuild_job1ジョブを実行するランナーと、ローカルに構築されたイメージをプッシュするランナーの2人のランナーがいます。しかし、ドッカーの画像を手動で構築するより良い解決法があります.GitLab CIを構築するためには、これが最適です。

だから、・修正お使いの.gitlab-ci.yml(説明のために地雷を追加し、あなたのコメントを削除する):

# Removed global image definition 

stages: 
    - build 
    - test 
    - deploy  

variables: 
    db_name: db_test 
    db_schema: "db_test_schema.sql" 

build_job1: 
    stage: build 
    # Use image ONLY in docker runner 
    image: php7:latest 
    script: 
    - service mysql start 
    - echo "create database $db_name" | mysql -u root 
    - mysql -u root $db_name < $db_schema 
    - mysql -u root -e "show databases; use $db_name; show tables;" 
    # Run on runner with docker executor, this is ok 
    tags: 
    - docker 

deploy_job1: 
    stage: deploy 
    script: 
    # Build the docker image first, and then push it 
    - docker build -t deploy:latest . 
    - docker push deploy:latest 
    # Run on runner with shell executor, set proper tag 
    tags: 
    - docker_builder 

あなたはshellとタグdocker_builderなどの新しいランナー、設定エグゼキュータを登録します。あなたのMacにdockerエンジンをインストールしたことをお伝えします。

一方、この例は少なくとも私にとっては意味がありません。 buildステージは何もしません。コンテナは一時的です。私はあなたがDockerfileでそれを行うべきだと思います。

関連する問題