centos7下docker gitlab(五)安装 Gitlab Runner(中)(Building Docker images with GitLab)

251 阅读1分钟

附上我的(持续更新中)

.gitlab-ci.yaml

stages:
  - test
  
job_test:
  stage: test
  tags:
    - image
  script:
    - CI_TEMP_PORT=$[65535-CI_MERGE_REQUEST_ID] # 生成一个端口号
    # - CI_TEMP_RANDOM=$(openssl rand -hex 2) # 随机生成字符串,方便域名用
    - CI_TEMP_RANDOM=test # 随机生成字符串,方便域名用
    - CI_TEMP_TEST_DOMAIN=${CI_MERGE_REQUEST_SOURCE_BRANCH_NAME}"-"${CI_MERGE_REQUEST_ID}"."${CI_TEMP_RANDOM}"."${TEST_DOMAIN} # 生成域名
    - CI_TEMP_CONTAINER_NAME=${CI_PROJECT_NAMESPACE}"-"${CI_PROJECT_NAME}"-"${CI_MERGE_REQUEST_SOURCE_BRANCH_NAME}"-"${CI_MERGE_REQUEST_ID} # 生成容器名称
    # - echo $CI_TEMP_PORT
    # - echo $CI_TEMP_RANDOM
    # - echo $CI_TEMP_TEST_DOMAIN
    # - echo $CI_TEMP_CONTAINER_NAME
    - docker stop $CI_TEMP_CONTAINER_NAME && docker rm $CI_TEMP_CONTAINER_NAME
    - docker build -t workerman/thinkphp:v1 . #为什么是v1版本,因为不同的项目的版本可能会一直用某一个版本的镜像,但是随着项目升级,原来版本的镜像需要更多的扩展,就需要新的镜像版本;集中测试版本的镜像要和线上版本的镜像一致才能更好的测试。
    - docker run --name $CI_TEMP_CONTAINER_NAME --restart=always -p $CI_TEMP_PORT:5001 -d workerman/thinkphp:v1
    - |
      cat > /etc/nginx/conf.d/${CI_TEMP_TEST_DOMAIN}.conf <<EOF
      upstream ${CI_TEMP_TEST_DOMAIN}-upstream{
        server 127.0.0.1:$CI_TEMP_PORT;
      }

      server {
        listen 80;
        server_name  ${CI_TEMP_TEST_DOMAIN};
        access_log     /var/log/nginx/${CI_TEMP_TEST_DOMAIN}-access.log;
        error_log     /var/log/nginx/${CI_TEMP_TEST_DOMAIN}-error.log;
        location / {
          proxy_pass_header Server;
          proxy_set_header Host \$http_host;
          proxy_set_header X-Real-IP \$remote_addr;
          proxy_set_header X-Scheme \$scheme;
          proxy_pass http://${CI_TEMP_TEST_DOMAIN}-upstream;
        }
      }
      EOF
    - systemctl reload nginx
    - echo $CI_TEMP_TEST_DOMAIN
  only:
    - merge_requests

Dockerfile

FROM registry.cn-hangzhou.aliyuncs.com/dake/php:v1
COPY . /var/www
WORKDIR /var/www
EXPOSE 5001
CMD ["php", "think", "worker"]