53
NODE.JS 䌕礯蝨䌕痀ᓕ疑 蝱ᤈ樄咳窕纷碉ݳ؋皐䲒介 虏䌕礯磪ஞ᪡ 獺ᑀ虻懱 CT

為 Node.js 專案打造專屬管家進行開發流程整合及健康檢測

Embed Size (px)

Citation preview

Page 1: 為 Node.js 專案打造專屬管家進行開發流程整合及健康檢測

NODE.JS

CT

Page 3: 為 Node.js 專案打造專屬管家進行開發流程整合及健康檢測
Page 4: 為 Node.js 專案打造專屬管家進行開發流程整合及健康檢測

Page 5: 為 Node.js 專案打造專屬管家進行開發流程整合及健康檢測

Page 6: 為 Node.js 專案打造專屬管家進行開發流程整合及健康檢測

Page 7: 為 Node.js 專案打造專屬管家進行開發流程整合及健康檢測

• Continuous Integration

Page 8: 為 Node.js 專案打造專屬管家進行開發流程整合及健康檢測
Page 9: 為 Node.js 專案打造專屬管家進行開發流程整合及健康檢測
Page 10: 為 Node.js 專案打造專屬管家進行開發流程整合及健康檢測
Page 11: 為 Node.js 專案打造專屬管家進行開發流程整合及健康檢測
Page 12: 為 Node.js 專案打造專屬管家進行開發流程整合及健康檢測
Page 13: 為 Node.js 專案打造專屬管家進行開發流程整合及健康檢測

= /

Page 14: 為 Node.js 專案打造專屬管家進行開發流程整合及健康檢測

= /

Page 15: 為 Node.js 專案打造專屬管家進行開發流程整合及健康檢測
Page 16: 為 Node.js 專案打造專屬管家進行開發流程整合及健康檢測

DevOps

Page 17: 為 Node.js 專案打造專屬管家進行開發流程整合及健康檢測

= /

Page 18: 為 Node.js 專案打造專屬管家進行開發流程整合及健康檢測
Page 19: 為 Node.js 專案打造專屬管家進行開發流程整合及健康檢測
Page 20: 為 Node.js 專案打造專屬管家進行開發流程整合及健康檢測
Page 21: 為 Node.js 專案打造專屬管家進行開發流程整合及健康檢測

Continuous Improvement

Page 22: 為 Node.js 專案打造專屬管家進行開發流程整合及健康檢測
Page 23: 為 Node.js 專案打造專屬管家進行開發流程整合及健康檢測
Page 24: 為 Node.js 專案打造專屬管家進行開發流程整合及健康檢測

Sequelize

module.exports = { attributes: { username: { type: Sequelize.STRING, allowNull: false }, email: { type: Sequelize.STRING, allowNull: false }, age: { type: Sequelize.INTEGER } }, associations: function() { User.hasMany(Post); User.hasMany(Passport); },};

Page 25: 為 Node.js 專案打造專屬管家進行開發流程整合及健康檢測
Page 26: 為 Node.js 專案打造專屬管家進行開發流程整合及健康檢測

FROM mhart/alpine-node:4

RUN apk add --update git RUN apk add --update build-base libffi-dev ruby ruby-dev \ && gem install sass compass --no-ri --no-rdoc \ && apk del build-base libffi-dev ruby-dev \ && rm -rf /var/cache/apk/*

Dockerfile

Page 27: 為 Node.js 專案打造專屬管家進行開發流程整合及健康檢測

Edge of Tomorrow

Page 28: 為 Node.js 專案打造專屬管家進行開發流程整合及健康檢測

it('register user should success.', async (done) => { try { let newUser = { username: 'newUser', email: '[email protected]', password: 'newUser' }

let result = await request(sails.hooks.http.app) .post('/auth/local/register').send(newUser);

let {email} = newUser; let checkUser = await User.findOne({ where: {email}, include: Passport} );

checkUser.email.should.be.equal(newUser.email); result.status.should.be.equal(302); result.headers.location.should.be.equal('/'); done(); } catch (e) { done(e); } });

Mocha

Page 29: 為 Node.js 專案打造專屬管家進行開發流程整合及健康檢測
Page 30: 為 Node.js 專案打造專屬管家進行開發流程整合及健康檢測

"scripts": { "debug": "node debug app.js", "test": "grunt test", "test-junit": "mocha test --reporter mocha-junit-reporter",

"build": "npm i && node_modules/grunt-cli/bin/grunt build", "start": "node app.js",

"pm2-start": "pm2 start -f app.js --name 'sailsSample'", "pm2-stop": "pm2 stop sailsSample",

"start-prod": "NODE_ENV=production node app.js", "build-prod": "grunt prod",

"build-docker-env": "docker build -t agileworks/sails_sample_env dockers/node", "build-docker-prod-image": "docker build -t agileworks/sails_sample_prod .", }

Package.json

Page 31: 為 Node.js 專案打造專屬管家進行開發流程整合及健康檢測

deploy-production-docker:- ssh jenkins@localhost docker rm -f sails_sample_prodssh jenkins@localhost docker run -d --name sails_sample_prod -p 8800:1337 agileworks/sails_sample_prod

deploy-production-legacy:ssh jenkins@localhost mkdir -p ~/deploy/productionscp sailsSampleProd.tar.gz jenkins@localhost:~/deploy/productiontar -C ~/deploy/production/ -vxf ~/deploy/production/

sailsSampleProd.tar.gz

package-production:- rm sailsSampleProd.tar.gztar cvf ./sailsSampleProd.tar.gz ./

restart-production:- ssh jenkins@localhost cd ~/deploy/production && pm2 delete productionssh jenkins@localhost cd ~/deploy/production && NODE_ENV=production pm2 start -f app.js --name 'production'

Makefile

Page 32: 為 Node.js 專案打造專屬管家進行開發流程整合及健康檢測
Page 33: 為 Node.js 專案打造專屬管家進行開發流程整合及健康檢測

Jenkins 2 Pipeline

Page 34: 為 Node.js 專案打造專屬管家進行開發流程整合及健康檢測

node { stage 'checkout project' git url: 'https://github.com/TrunkWorkshop/sailsSample.git'

stage 'check env' sh "node -v"

stage 'install pm2' sh "npm install pm2 -g"

stage 'build project' sh "npm install"

stage 'test project' sh "npm run test-junit" step([$class: 'JUnitResultArchiver', testResults: 'test-results.xml'])}

Page 35: 為 Node.js 專案打造專屬管家進行開發流程整合及健康檢測

node { stage 'run project' sh "npm run pm2-start"

try{ stage 'Approve, go production' def url = 'http://localhost:1337/' input message: "$url look good? ", ok: "Deploy to production" }finally{ sh "npm run pm2-stop" }

stage 'package production' sh "make package-production" step([$class: 'ArtifactArchiver', artifacts: 'prod.tar.gz'])

stage 'deploy production' sh "make deploy-production-legacy"

stage 'restart production' sh "make restart-production"

}

Page 36: 為 Node.js 專案打造專屬管家進行開發流程整合及健康檢測
Page 37: 為 Node.js 專案打造專屬管家進行開發流程整合及健康檢測

CI / CD

有效溝通

累積開發能量

快速迭代驗證

永生

Page 38: 為 Node.js 專案打造專屬管家進行開發流程整合及健康檢測
Page 39: 為 Node.js 專案打造專屬管家進行開發流程整合及健康檢測
Page 40: 為 Node.js 專案打造專屬管家進行開發流程整合及健康檢測

Checking

Page 41: 為 Node.js 專案打造專屬管家進行開發流程整合及健康檢測
Page 42: 為 Node.js 專案打造專屬管家進行開發流程整合及健康檢測

Cobertura

Page 43: 為 Node.js 專案打造專屬管家進行開發流程整合及健康檢測

Integration

Page 44: 為 Node.js 專案打造專屬管家進行開發流程整合及健康檢測

Pipeline

Page 45: 為 Node.js 專案打造專屬管家進行開發流程整合及健康檢測

Pull Request

Page 46: 為 Node.js 專案打造專屬管家進行開發流程整合及健康檢測
Page 47: 為 Node.js 專案打造專屬管家進行開發流程整合及健康檢測

Connects

Page 48: 為 Node.js 專案打造專屬管家進行開發流程整合及健康檢測

Slack + Github + Jenkins

Page 49: 為 Node.js 專案打造專屬管家進行開發流程整合及健康檢測
Page 50: 為 Node.js 專案打造專屬管家進行開發流程整合及健康檢測
Page 51: 為 Node.js 專案打造專屬管家進行開發流程整合及健康檢測
Page 52: 為 Node.js 專案打造專屬管家進行開發流程整合及健康檢測
Page 53: 為 Node.js 專案打造專屬管家進行開發流程整合及健康檢測

&