首页 > 解决方案 > Rails dockerized:使用 Gitlab 和 Digitalocean 持续交付

问题描述

我实际上正在尝试为托管在 Gitlab.com 上的 Rails dockerized 项目设置持续交付。我关注了这篇与Rails环境没有直接关系的文章,并且我试图适应......显然没有任何成功:(

对于上下文,我创建了三个不同的服务dbwebpackerapp​​ 。

在上面的文章之后,这里是我的.gitlab-ci.yml和docker -compose.staging2.yml(自动部署):

image: docker
services:
  - docker:dind

cache:
  paths:
    - node_modules

variables:
  DOCKER_HOST: tcp://docker:2375/
  DOCKER_DRIVER: overlay2
  CONTAINER_CURRENT_IMAGE: $CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG
  CONTAINER_LATEST_IMAGE: $CI_REGISTRY_IMAGE:latest
  CONTAINER_STABLE_IMAGE: $CI_REGISTRY_IMAGE:stable

stages:
  - test
  - build
  - release
  - deploy

before_script:
  - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
  - apk add --no-cache py-pip python-dev libffi-dev openssl-dev gcc libc-dev make
  - pip install docker-compose
  - docker-compose --version

test:
  stage: test
  script:
    - docker-compose build --pull
    # Here we will run tests when available...
  after_script:
    - docker-compose down
    - docker volume rm `docker volume ls -qf dangling=true`

build:
  stage: build
  script:
    - docker build -t $CONTAINER_CURRENT_IMAGE . --pull
    - docker push $CONTAINER_CURRENT_IMAGE

release-latest-image:
  stage: release
  only:
    - feat-dockerisation
  script:
    - docker pull $CONTAINER_CURRENT_IMAGE
    - docker tag $CONTAINER_CURRENT_IMAGE $CONTAINER_LATEST_IMAGE
    - docker push $CONTAINER_LATEST_IMAGE

release-stable-image:
  stage: release
  only:
    - feat-dockerisation
  script:
    - docker pull $CONTAINER_CURRENT_IMAGE
    - docker tag $CONTAINER_CURRENT_IMAGE $CONTAINER_STABLE_IMAGE
    - docker push $CONTAINER_STABLE_IMAGE

deploy_staging:
  stage: deploy
  only:
    - feat-dockerisation
  environment: production
  before_script:
    - mkdir -p ~/.ssh
    - echo "$DEPLOY_SERVER_PRIVATE_KEY" | tr -d '\r' > ~/.ssh/id_rsa
    - chmod 600 ~/.ssh/id_rsa
    - which ssh-agent || (apk add openssh-client)
    - eval $(ssh-agent -s)
    - ssh-add ~/.ssh/id_rsa
    - ssh-keyscan -H $DEPLOYMENT_SERVER_IP >> ~/.ssh/known_hosts
  script:
    - scp -rp ./docker-compose.staging2.yml root@${DEPLOYMENT_SERVER_IP}:~/
    - ssh root@$DEPLOYMENT_SERVER_IP "docker login -u ${CI_REGISTRY_USER} -p ${CI_REGISTRY_PASSWORD} ${CI_REGISTRY};
      docker-compose -f docker-compose.staging2.yml down;
      docker pull $CONTAINER_LATEST_IMAGE;
      docker-compose -f docker-compose.staging2.yml up -d"
version: '3'
services:
  db:
    image: postgres:11-alpine
    ports:
      - 5433:5432
    environment:
      POSTGRES_PASSWORD: postgres

  webpacker:
    image: registry.gitlab.com/soykje/beweeg-ror:latest
    command: [sh, -c, "yarn && bin/webpack-dev-server"]
    ports:
      - 3035:3035

  app:
    image: registry.gitlab.com/soykje/beweeg-ror:latest
    links:
      - db
      - webpacker
    ports:
      - 3000:3000

我开始使用 Docker 和 CI/CD 所以......找不到我做错了什么:/

在 Gitlab CI/CD 上成功完成所有作业后,当我尝试在 Docker 液滴上访问我的应用程序时,我什么也得不到……当我在我的液滴上 ssh 时,一切似乎都正常,但我仍然无法浏览任何东西……有人会知道我错过了什么吗?

我觉得我非常接近实现(也许我也错了......),所以任何帮助都会非常受欢迎!

提前谢谢!

标签: ruby-on-railsdockerdocker-composedigital-oceangitlab-ci

解决方案


推荐阅读