1、基础
-
DevOps是一种思想:是Development和Operations的组合,是一组过程、方法与系统的统称,用于促进开发(应用程序/软件工程)、技术运营和质量保障(QA)部门之间的沟通、协作与整合。它的出现是由于软件行业日益清晰地认识到:为了按时交付软件产品和服务,开发和运营工作必须紧密合作。
-
CI/CD
持续集成,Continuous integration ,CI。在各个项目集成之后测试阶段尽快的发现集成的错误。
持续交付,Continuous Delivery,CD。将新版本交付给质量团队或者用户,以通过评审。
持续部署,Continuous deployment,CD。快速上线,即自动化部署到生产环境,保证程序正常运行。
-
Jenkins,它是一个开源的实现持续集成工具。原名Hudson,2011年改为现在的名字。
-
特点:开源,简单(按照,配置等),支持分布式构建,支持很多第三方插件。及早发现问题和上线非常简单。
-
持续集成流程:包括,钩子程序,从git拉去代码,编译打包,构建和上传镜像,部署项目来创建容器。
2、实战
-
jenkins构建项目的类型JOB有很多,常用有三种:分别是自由风格软件项目;maven项目和流水线项目。
-
自由风格基本流程有:
general、源码管理、构建触发器、构建环境、构建、构建后操作;
general:主要是一个常规的操作。描述等。 源码管理:配置项目的git上路径 构建触发器:就是什么动作就可以出发自动构建,比如GitHub hook的钩子程序。 构建环境:构建过程中一些选择,比如输出时间 构建:如何具体的构建,比如可以选择执行shell,写一些脚本进行构建,mvn clean package 构建后操作:得到jar或者war等之后部署到tomcat等(需要一些插件)
构建步骤中构建docker镜像为例:
A=$BUILD_ID B=`expr $BUILD_ID - 1` source /etc/profile project="halo" cd $WORKSPACE && mvn clean package -Pprod docker stop $project && sleep 10 docker rm $project && sleep 5 docker rmi $project:$B && sleep 5 cd $WORKSPACE/target/dist/halo cat > halo.ini << EOF [program:halo] command=/usr/local/jdk1.8.0_144/bin/java -jar /opt/halo/halo-latest.jar numprocs=1 autostart=true autorestart=true startsecs=60 EOF cat > Dockerfile << EOF FROM idocker.io/eryajf/jdk:1.8 MAINTAINER eryajf <Linuxlql@163.com> ADD . /opt/halo ADD halo.ini /etc/supervisor/conf.d EXPOSE 8090 EOF docker build -t $project:$A . && sleep 5 docker run -d --name $project -p 8090:8090 $project:$A
简单说明,因为这个是直接在本机进行的试验部署,因此所有的命令也都全部写在这里来了,执行完成之后,应用也会部署在本机当中。
首先对项目进行打包,接着先停掉服务,然后通过Dockerfile生成新的镜像,然后启动服务。
如果是异地部署,那么只需将镜像推往私服,然后调用一个远程脚本,进行应用的部署即可。
http://www.eryajf.net/2036.html
-
maven,就是提前知道是maven项目了。有一些优化,大致流程与自由风格是一样的。
-
流水线pipeline:自己写相关操作的代码,比如来取代码,自己编写打包命令部署命令等,有专门的语法。不过这些都是声明式的。可以把这些命令写成文件放在项目中,命名为Jenkinsfile。重点有stages命令。
pipeline { agent any environment { git_url = "git@192.168.3.65:jenkins-learn/hello-world.git" remote_ip = "192.168.3.66" remote_dir = "/opt/hello" } options { buildDiscarder(logRotator(numToKeepStr: '10')) disableConcurrentBuilds() timeout(time: 10, unit: 'MINUTES') timestamps() } stages { stage('rsync') { steps { echo 'rsync' sh ''' rsync -avz --progress -e 'ssh -p 22' --exclude='Jenkinsfile' --exclude='.git' --delete ${WORKSPACE}/ root@$remote_ip:$remote_dir ''' } } stage('delete') { steps { echo '清理工作目录' cleanWs() } } } post { success { sh "echo 成功了" } failure { sh "echo 失败了" } } }
-
触发方式
build whenever a snapshot dependency is built 当job依赖的快照版本被build时,执行本job。 build after other projects are built 当本job依赖的job被build时,执行本job build periodically 隔一段时间build一次,不管版本库代码是否发生变化。 poll scm 隔一段时间比较一次源代码如果发生变更,那么就build。否则,不进行build。
-
通知方式
Jenkins的通知方式非常多,常用的如下: 电子邮件通知 即时消息,比如钉钉 短信通知 Jenkins的通知方式非常多,具体如下:电子邮件、通知声明、构建RSS订阅、构建分发器、 即时消息、IRC通知、桌面通知器、通过Notifo通知、移动通知、短信通知、制造噪声、极端反馈设备
-
Jenkins API
jenkins(持续集成开源工具)提供了丰富的api接口,实现对 Jenkins中Job、View等等的增、删、改、查操作。还有一些比如触发构建动作,github上。
Jenkins
中有view
和job
的概念,view
相当于组,job
则是具体的任务。
view
下面可以创建job
,但job
可以不在任何view
下。例子: 创建view的API: `<jenkins url>/createView`。 curl: curl -X POST <jenkins url>/createView?name=<view name> --data-binary "@viewCofnig.xml" -H "Content-Type: text/xml" --auth <u>:<p>
【正在去BAT的路上修行!!!】