UNPKG

escuela-init

Version:

Generador de CI para los proyectos

224 lines (203 loc) 6.42 kB
module.exports = { DockerFile: `FROM node:8.9.1-alpine RUN mkdir -p /usr/src/app ARG NODE_ENV ARG MONGO_CON COPY . /usr/src/app WORKDIR /usr/src/app RUN npm install ENV NODE_ENV=$NODE_ENV ENV MONGO_CON=$MONGO_CON EXPOSE 3000 CMD [ "npm", "run", "start-docker" ] `, DockerIgnore: `node_modules .git *.DS_Store `, GitLabCI: `image: gcr.io/cloud-builders/kubectl stages: - testlint - deploy variables: CONTAINER_IMAGE_DEV: gcr.io/$GCLOUD_PROJECT_ID/$APP/development CONTAINER_IMAGE_TEST: gcr.io/$GCLOUD_PROJECT_ID/$APP/test CONTAINER_IMAGE_STAGING: gcr.io/$GCLOUD_PROJECT_ID/$APP/staging .gcloud: &gcloud - touch $CI_PROJECT_DIR/sa.json - echo $DEPLOY_KEY > $CI_PROJECT_DIR/sa.json - export GOOGLE_APPLICATION_CREDENTIALS=$CI_PROJECT_DIR/sa.json - gcloud auth activate-service-account --key-file=sa.json - gcloud config set project $GCLOUD_PROJECT_ID - gcloud config set compute/zone $CLOUDSDK_ZONE - gcloud --quiet container clusters get-credentials $CONTAINER_CLUSTER --project=$GCLOUD_PROJECT_ID --zone=$CLOUDSDK_ZONE testlint: stage: testlint image: node:8.9.1-slim script: - npm install - npm run test master: variables: GIT_SUBMODULE_STRATEGY: recursive stage: deploy before_script: *gcloud environment: name: master script: - echo $CONTAINER_IMAGE_DEV - kubectl config set-context $(kubectl config current-context) --namespace=staging - gcloud builds submit --config cloudbuild.yml --substitutions _IMAGE=$CONTAINER_IMAGE_DEV,_CI_BUILD_ID=$CI_BUILD_ID,_NODE_ENV_VAR=development,_MONGO_CON=$MONGO_CON --timeout="1h" . - kubectl set image deployment/$APP $APP=$CONTAINER_IMAGE_DEV:$CI_BUILD_ID --namespace staging only: - master when: manual development: variables: GIT_SUBMODULE_STRATEGY: recursive stage: deploy before_script: *gcloud environment: name: master script: - echo $CONTAINER_IMAGE_DEV - kubectl config set-context $(kubectl config current-context) --namespace=development - gcloud builds submit --config cloudbuild.yml --substitutions _IMAGE=$CONTAINER_IMAGE_DEV,_CI_BUILD_ID=$CI_BUILD_ID,_NODE_ENV_VAR=development,_MONGO_CON=$MONGO_CON --timeout="1h" . - kubectl set image deployment/$APP $APP=$CONTAINER_IMAGE_DEV:$CI_BUILD_ID --namespace development only: - development test: variables: GIT_SUBMODULE_STRATEGY: recursive stage: deploy before_script: *gcloud environment: name: master script: - echo $CONTAINER_IMAGE_DEV - kubectl config set-context $(kubectl config current-context) --namespace=test - gcloud builds submit --config cloudbuild.yml --substitutions _IMAGE=$CONTAINER_IMAGE_DEV,_CI_BUILD_ID=$CI_BUILD_ID,_NODE_ENV_VAR=test,_MONGO_CON=$MONGO_CON --timeout="1h" . - kubectl set image deployment/$APP $APP=$CONTAINER_IMAGE_DEV:$CI_BUILD_ID --namespace test only: - test`, EslintIGnore: `node_modules`, GitIgnore: `*.DS_Store node_modules `, CloudBuild: `steps: - name: "gcr.io/cloud-builders/docker" args: ["build", "-t", "\${_IMAGE}:latest", "-t", "\${_IMAGE}:\${_CI_BUILD_ID}", "." ,"--build-arg","NODE_ENV=\${_NODE_ENV_VAR}", "--build-arg","MONGO_CON=\${_MONGO_CON}"] images: ["\${_IMAGE}:latest", "\${_IMAGE}:\${_CI_BUILD_ID}"] `, Eslintrtc: `{ "env": { "es6": true, "node": true }, "extends": "airbnb-base", "rules": { "semi" : [2, "always"], "react/require-extension": "off", "react/*": "off", "no-underscore-dangle": 0, "object-curly-spacing": 2, "max-len": [2, 500, 2], "comma-dangle": 0, "arrow-parens": 0, "no-restricted-syntax": ["error", "WithStatement","BinaryExpression[operator='in']","no-await-in-loop"], "no-param-reassign": 0 } } `, EcosystemPM2: `module.exports = { /** * Application configuration section * http://pm2.keymetrics.io/docs/usage/application-declaration/ */ apps: [ { name: 'micro', script: './server.js', // autorestart: false, watch: ['api', 'fw', './package.json'], merge_logs: true, }, ], }; `, consumerCore: `const { app } = require('@carlosbajo/micro'); // eslint-disable-line const packageJson = require('../../package.json'); module.exports = { version: async (payloads) => { // eslint-disable-line const payload = { microservice: app.name, version: packageJson.version, time: app.deployTime }; return payload; } };`, configRoutes: `module.exports = { 'GET /version': { controller: 'core', action: 'version' } };`, controllerCore: `const { app } = require('@carlosbajo/micro'); // eslint-disable-line const packageJson = require('../../package.json'); module.exports = { version: async ctx => { const payload = { microservice: app.name, version: packageJson.version, time: app.deployTime }; ctx.body = payload; return payload; }, };`, modelCore: `module.exports = class Core { };`, readme: `# Microservicio ## Configuración básica comando para cargar todas las dependencias, revisar json-lock antes de instalar cualquier elemento. \`npm install\` ## Docker Primero es necesario crear la imagen del contenedor, con el comando <br> \`docker build -t <cualquiernombre> .\` para poder ejectuar el microservicio dentro de el contenedor de docker es necesario tener las credenciales de google dentro del contenedor, para esto es necesario tener el SDK de google y usar **gcloud auth application-default** para obtener credenciales, una vez realizado ese proceso podemos usar el siguiente comando. (<span style="color:#c0392b">Solo en desarrollo</span>) \`docker run -p 3022:3022 -v ~/.config/gcloud:/root/.config/gcloud <imagenid>\` #### Utilidades para poder entrar al contendor de docker una vez iniciado. <br> \`docker exec -it <contenedor> bash\` #### Avisos En caso de que el pipeline de CI funcione asegurarse de que el deployment en kubernetes funcione. #### NPM npms centrales de el microservicio * MICRO * generic-consumers * escuela-init (Usado para generar este template)`, schemaCore: `module.exports = { datasource: 'mongo', properties: { version: { type: String, maxLength: 300, required: true } } };` }