
Pipeline流水线项目
1.pipeline简介
1.什么是pipeline
Jenkins 2.0的精髓是Pipeline as Code,是帮助Jenkins实现CI到CD转变的重要角色。什么是Pipeline,简单
来说,就是一套运行于Jenkins上的工作流框架,将原本独立运行于单个或者多个节点的任务连接起来,实现单个
任务难以完成的复杂发布流程。Pipeline的实现方式是一套Groovy DSL,任何发布流程都可以表述为一段Groovy
脚本,并且Jenkins支持从代码库直接读取脚本,从而实现了Pipeline as Code的理念。
2.Pipeline 概念
Pipeline 是一个用户定义的 CD 流水线模式。Pipeline 代码定义了通常包含构建、测试和发布步骤的完整的构
建过程。Node
node 是一个机器,它是 Jenkins 环境的一部分,并且能够执行 Pipeline。同时,node 代码块也是脚本式
Pipeline 语法的关键特性。Stage
Stage 块定义了在整个 Pipeline 中执行的概念上不同的任务子集(例如“构建”,“测试”和“部署”阶段),
许多插件使用它来可视化或呈现 Jenkins 管道状态/进度。Step
一项任务。从根本上讲,一个步骤告诉 Jenkins 在特定时间点(或过程中的“步骤”)要做什么。例如,使用sh step:sh 'make' 可以执行 make 这个 shell 命令。
3.jenkins file
声明式 脚本式
脚本式语法格式:pipeline{ agent any stages{ stage("get code"){ steps{ echo "get code from scm" } } stage("package"){ steps{ echo "packge code" } } stage("deploy"){ steps{ echo "deploy packge to node1" } } } }2.创建一个pipeline项目
1.登录jenkins创建pipline项目
2.在项目设置中添加语法
3.立即构建
3.在gitlab的项目中添加一个新文件用来测试流水线
1.在gitlab项目中新建一个调用文件
在仓库创建一个jenkinsfile文件进行调用
Jenkins支持从代码库直接读取脚本,从而实现了Pipeline as Code的理念
2.粘贴语法脚本
pipeline{ agent any stages{ stage("get code"){ steps{ echo "get code from scm" } } stage("package"){ steps{ echo "packge code" } } stage("deploy"){ steps{ echo "deploy packge to node1" } } } }
3.在jenkins的pipeline项目中修改获取来源
在jenkins端进行获取测试
注意脚本路径
下图是默认路径Jenkinsfile,在实际的目录中为jenkinsfile
[root@git02 opt]#ls /var/lib/jenkins/workspace/pipeline-job/ | grep jenkins jenkinsfile
4.测试上线
更改jenkinsfile文件进行测试
pipeline{ agent any stages{ stage("get code"){ steps{ echo "get code" } } stage("unit test"){ steps{ echo "unit test" } } stage("package"){ steps{ sh 'tar zcf /opt/web-${BUILD_ID}.tar.gz ./* --exclude=./git --exclude=jenkinsfile' } } stage("deploy"){ steps{ sh 'ssh 10.0.0.6 "cd /etc/nginx/web && mkdir web-${BUILD_ID}"' sh 'scp /opt/web-${BUILD_ID}.tar.gz 10.0.0.6:/etc/nginx/web/web-${BUILD_ID}' sh 'ssh 10.0.0.6 "cd /etc/nginx/web/web-${BUILD_ID} && tar xf web-${BUILD_ID}.tar.gz && rm -rf web-${BUILD_ID}.tar.gz"' sh 'ssh 10.0.0.6 "cd /etc/nginx/web && rm -rf html && ln -s web-${BUILD_ID} /etc/nginx/web/html"' } } } }5.查看nginx服务器上是否推送到项目代码
如图所示,推送代码个格式为BUILD_ID
提交阶段: node { gitlabCommitStatus(builds:["Commit Build"]){ stage('Code PUll'){ echo "Code PUll" git credentialsId: '10ca77b0-5bcc-4aa7-9f26-b27a5d557f7a', url: 'http://192.168.56.12/devops/account.git' } stage('Code Build'){ echo "code Build" sh '/root/mvn/apache-maven-3.5.2/bin/mvn clean compile' } stage('Unit Test'){ echo "Unit test" } } } 集成测试阶段: node { stage('Code PUll'){ echo "Code PUll" git credentialsId: '10ca77b0-5bcc-4aa7-9f26-b27a5d557f7a', url: 'http://192.168.56.12/devops/account.git' } stage('Code Build'){ echo "code Build" sh '/root/mvn/apache-maven-3.5.2/bin/mvn clean compile' } stage('Unit Test'){ echo "Unit test" sh '/root/mvn/apache-maven-3.5.2/bin/mvn test' } stage('Package'){ echo "Package" sh '/root/mvn/apache-maven-3.5.2/bin/mvn package' } stage('Deploy Test ENV'){ echo "Deploy Test ENV" sh 'ls -la ./account-service/target/' } stage('AUto API TEst'){ echo "TEST" } } 部署阶段 参数化构建过程 node { stage('Deploy'){ echo "Code Deploy Prod" sh '/opt/test.sh ${ENV} ${GROUP} ${PROJECT} ${VERSION}' } }








