Igor Suvorov
Программист-предприниматель
8 Apr 2018
Профессия
Node.js & React.js developer
продвинутый курс
и история
я не DevOps - я просто программист
слабо связанная совокупность нескольких вычислительных систем, работающих совместно для выполнения общих приложений, и представляющихся пользователю единой системой
Feature highlights
CLI:
Text
# .gitlab-ci.yml
image: docker:latest
cache:
key: cache_npm
paths:
- .npm
stages:
- npm_install
- npm_build
- create_image
- test
- deploy
variables:
CONTAINER_IMAGE: ${CI_REGISTRY}/${CI_PROJECT_PATH}:${CI_COMMIT_REF_NAME}_${CI_COMMIT_SHA}
CONTAINER_IMAGE_TAG: ${CI_REGISTRY}/${CI_PROJECT_PATH}:${CI_COMMIT_REF_NAME}
CONTAINER_IMAGE_CONCAT: ${CI_PROJECT_PATH_SLUG}-${CI_COMMIT_REF_NAME}
npm_install:
stage: npm_install
image: node:6.9.2
before_script:
- npm config set cache ./.npm
script:
- npm install
variables:
NODE_ENV: production
artifacts:
paths:
- .npm/
- node_modules/
npm_install_client:
stage: npm_install
image: node:6.9.2
before_script:
- npm config set cache ./.npm
script:
- cd client
- npm install
variables:
NODE_ENV: production
artifacts:
paths:
- .npm/
- client/node_modules/
npm_build:
stage: npm_build
image: node:6.9.2
script:
- cd client
- npm run build
- cd ../
- cp -r client/build public
dependencies:
- npm_install
- npm_install_client
artifacts:
paths:
- public/
create_image:
stage: create_image
image: docker:latest
script:
- docker login -u gitlab-ci-token -p ${CI_BUILD_TOKEN} ${CI_REGISTRY}
- docker build -t ${CONTAINER_IMAGE} .
- docker tag ${CONTAINER_IMAGE} ${CONTAINER_IMAGE_TAG}
- docker push ${CONTAINER_IMAGE}
- docker push ${CONTAINER_IMAGE_TAG}
test:
stage: test
image: docker:latest
script:
- echo "ok"
.depoy: &deploy
stage: deploy
script:
- docker stack deploy --with-registry-auth --compose-file=docker-compose.yml ${CONTAINER_IMAGE_CONCAT}
deploy_master:
<<: *deploy
environment:
name: master
url: https://master.demo.test
variables:
STAGE: master
EXPOSE_PORTTT: 8001
only:
- master
when: manual
deploy_develop:
<<: *deploy
environment:
name: develop
url: https://develop.demo.test
variables:
STAGE: develop
EXPOSE_PORTTT: 8002
only:
- develop
deploy_staging:
<<: *deploy
environment:
name: staging
url: https://staging.demo.test
variables:
STAGE: staging
EXPOSE_PORTTT: 8003
only:
- staging
# Dockerfile
FROM node:6.9.2
COPY . .
EXPOSE 8080
CMD [ "npm", "start" ]
# .docker-compose.yml
version: "3"
services:
web:
image: "${CONTAINER_IMAGE}"
deploy:
replicas: 3
restart_policy:
condition: on-failure
resources:
limits:
cpus: "0.1"
memory: 50M
expose:
- 8000
environment:
- VIRTUAL_HOST=demo.test
# labels:
# - com.df.notify=true
# - com.df.distribute=true
# - com.df.servicePath=/
# - com.df.reqMode=tcp
# - com.df.reqPathSearch=/
# - com.df.reqPathReplace=/
# - com.df.port=8080
# - com.df.srcPort=8080
networks:
- visualizer
- proxy
volumes:
- "/root/projects/public:/public"
или как я обновил все зависимости до самых актуальных и что нового узнал
any questions?
программист-предприниматель
By Igor Suvorov