CI平台诞生的背景
很多公司因为种种原因,不想使用GitHub/gitlab上的CI能力,或是希望定制一些功能更加强大的CI/CD工作流,这时就需要一些更专业的CI平台了。
CI平有那些
github / gitlab
Aone (阿里巴巴)、织云 (腾讯)、Overmind (网易)、Jenkins (开源的)、...
Jenkins简介
Jenkins是一款开源CI&CD 软件,用于自动化各种任务,包括构建、测试和部署服务
历史悠久,功能强大,之后出现的各个CI平台的设计都受其影响
Jenkins的使用
Git - Webhook
Github和Gitlab,都提供了Webhook的功能
利用Webhook可以通知Jenkins开始CI/CD任务
Jenkins - Pipeline
Jenkins提供了一种DSL(领域特定语言),用于开发者编写自定义的Cl/CD流程,这个流程在Jenkins中叫做Pipeline。—般CI平台都会提供类似的DSL: Ant / Shell等。
Jenkinsfile ( Scripted Pipeline)node {
stage( ' Build ' ) {
steps {
environment {
NODE_ENV = 'production'
}
sh ' npm run build '
}
}
stage( 'Test' ) {
steps {
sh 'npm run test'
}
}
stage( 'Deploy ' ) {
echo 'Deploying. . . .'
sh './deploy .sh'
echo 'done! '
}
}
Jenkins - Publish Over SSH
pipeline一般用来构建项目,构建后的结果会保留在CI平台的构建机里,我们可以使用Publish Over SSH插件实现远程发布功能,实际就是将代码通过SSH传输到服务器上
//插件参数
Name: 选择一个ssh服务器
source files: 要传输的文件路径
Remote directory: 服务器的接收路径
Exec command: 传输完了要执行的命令(前端项目一般不需要配置此项,主要针对后端项目配置传输完成后要执行的启动命令)
Jenkins - 结果通知
结合Git Commiter信息,我们可以通知对应开发者发布结果
- Extended E-mail Notification插件: 邮件通知
- dingTalk插件: 钉钉通知