escuela-init
Version:
Generador de CI para los proyectos
224 lines (203 loc) • 6.42 kB
JavaScript
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
}
}
};`
}