ruby-on-rails - Rails dockerized:使用 Gitlab 和 Digitalocean 持续交付
问题描述
我实际上正在尝试为托管在 Gitlab.com 上的 Rails dockerized 项目设置持续交付。我关注了这篇与Rails环境没有直接关系的文章,并且我试图适应......显然没有任何成功:(
对于上下文,我创建了三个不同的服务db
:webpacker
和app
。
在上面的文章之后,这里是我的.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 时,一切似乎都正常,但我仍然无法浏览任何东西……有人会知道我错过了什么吗?
我觉得我非常接近实现(也许我也错了......),所以任何帮助都会非常受欢迎!
提前谢谢!
解决方案
推荐阅读
- r - 使用 grep 选择列中的值
- google-cloud-platform - 授予对某些 Google Cloud 存储桶的访问权限
- powershell - 你能运行一个每 24 小时更改一次日期和时间的脚本吗?
- swift - 在评估第二个未来后,快速组合第一个未来的返回结果
- laravel - Valet 502 错误网关
- user-interface - stderr 的文件描述符不等于 2
- java - 为什么连续的动画相互交织?
- perl - 如何替换以特定字符开头的注释行
- android - 自定义 Drawable 无法在 ImageView 中正确显示
- reactjs - 我可以在头部(React)中注入 Material UI 样式吗?