在gitlab运行器完成构build后部署

我想使用gitlab跑步者来部署一个成功build立的docker图像,但我不知道如何使用.gitlab-ci.yml中的部署阶段来做到这一点。 构build日志显示在构build过程中数据库在Docker镜像上正确创build。

我在本地使用Docker(Mac OS X 10.11.6)来构build我的Docker容器。 Gitlab正在远程运行。 我注册了一个特定的本地亚军来处理构build。 当我将更改推送到我的项目时,gitlab CI将运行构build脚本来创buildtesting数据库。 图像生成后会发生什么? 在我的本地机器上没有列出完成的版本的docker图像。 gitlab-runner-prebuilt-x86_64是一个准系统的linux镜像,并没有和build连接。

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

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"] 

您不在CI上构build任何泊坞窗图像。

你使用DockerHub的php7镜像来执行所有的工作。 这包括正在尝试使用deploy_job1二进制推送不在该容器内的映像( deploy:latest )的作业deploy_job1 。 另外,我认为docker二进制文件不包括在php7图像。

我猜你想要在Mac上本地创build的图像,不是吗? 在这种情况下,你需要使用另外一个runner,它的执行者应该是shell 。 在这种情况下,你将有2个跑步者,一个使用build_job1来运行build_job1作业,另一个来推动本地构build的图像。 但是有一个更好的解决scheme,手动构builddocker镜像,并且让GitLab CI构build它。

所以,修改你的.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 

当您注册新的亚军时,将executor设置为shell并标记docker_builder 。 我假装你已经在Mac上安装了docker引擎。

另一方面,这个例子是没有意义的,至less对我来说。 build阶段什么都不做,因为容器是短暂的。 我想你应该在Dockerfile上做到这一点。