Jenkins之三----Pipeline与Jenkins视图
实战一:在Jenkins基于pipeline拉取Gitlab代码,部署到后端tomcat服务器上
1、pipeline介绍
官网地址:https://jenkins.io/2.0/
pipline是帮助Jenkins实现CI到CD转变的重要角色,是运行在 jenkins 2.X版本的核心插件,简单来说 Pipline 就是一套运行于 Jenkins 上的工作流框架,将原本独立运行
于单个或者多个 节点的任务连接起来,实现单个任务难以完成的复杂发布流程, 从而实现单个任务很难实现的复杂流程编排和任务可视化 Pipeline 的实现方式是一套
Groovy DSL ,任何发布流程都可以表述为 一段 Groovy 脚本。
2、pipline语法
Stage阶段:一个pipline可以划分为若干个 stage ,每个 stage 都是一个操作,比如clone 代码、代码 编译 、 代码 测试和代码部署 阶段是一个逻辑分组, 可以 跨多个 node执行。
Node节点:每个node都是一个jenkins节点,可以是jenkins master也可以是jenkins agent node是执行step 的具体服务器。
Step:步骤 step 是 jenkins pipline 最基本的操作单元 从 在 服务器创建目录到 构建容器 镜像 ,由各类 Jenkins 插件 提供实现,例如: sh “make”
3、pipline优势
可持续性: jenkins 的重启 或者 中断后不影响已经执行的 Pipline Job
支持暂停: pipline 可以选择 停止并 等待人工输入 或 批准后再继续执行。
可扩展通过 groovy 的编程更容易的扩展插件。
并行执行: 通过 groovy 脚本可以实现 step stage 间的并行执行,和更复杂的相互依赖关系 。
4、创建一个pipeline-test任务
1、创建一个pipeline-test任务,jenkins--->创建New任务
2、创建一个简单的pipeline job测试,丢弃旧的构建,设置保留的时间,也可以不设置。
选择流水线语法的选项,可以查看克隆gitlab网站上代码的pipeline语法:
git credentialsId: '26375340-9ad6-41f6-82b9-73571c30e266', url: 'git@192.168.7.100:linux_gitlab/web1.git' # pipeline克隆gitlab语法
3、开始创建pipeline脚本,先选择pipeline范例
4、配置pipeline语法脚本,其中192.168.7.104的地址是后端tomcat服务器的IP地址
node("jenkins-node1"){ # 括号中指定用jenkins-slave的主机进行克隆代码并进行一系列的操作。 stage("clone 代码"){ sh 'cd /var/lib/jenkins/workspace/pipeline-test && rm -rf ./*' # 注意,一开始没有此目录,用shell命令切换此目录下无法成功,刚开始构建时,可以创建此目录。 git credentialsId: '26375340-9ad6-41f6-82b9-73571c30e266', url: 'git@192.168.7.100:linux_gitlab/web1.git' echo "代码 clone完成" } stage("代码打包"){ sh 'cd /var/lib/jenkins/workspace/pipeline-test && tar czvf code.tar.gz ./*' echo "代码打包完成" } stage("停止tomcat服务"){ sh 'ssh www@192.168.7.104 "/apps/tomcat/bin/shutdown.sh"' } stage("代码复制"){ sh 'cd /var/lib/jenkins/workspace/pipeline-test && scp code.tar.gz www@192.168.7.104:/data/tomcat/tomcat_appdir/' } stage("代码部署"){ sh 'ssh www@192.168.7.104 "cd /data/tomcat/tomcat_appdir/ && rm -rf /data/tomcat/tomcat_webdir/myapp/* && tar xvf code.tar.gz -C /data/tomcat/tomcat_webdir/myapp/ "' } stage("启动tomcat服务"){ sh 'ssh www@192.168.7.104 "/apps/tomcat/bin/startup.sh"' } }
如果使用jenkins-node1的主机,需要将本主机的ssh公钥复制到后端tomcat服务器上,实现免秘钥登录
[root@jenkins-slave ~]# ssh-keygen [root@jenkins-slave ~]# ssh-copy-id www@192.168.7.104
5、立即构建pipeline-test
6、查看此时构建执行的脚本结果
Started by user 974212253@qq.com Running in Durability level: MAX_SURVIVABILITY [Pipeline] Start of Pipeline [Pipeline] node Running on jenkins-node1 in /var/lib/jenkins/workspace/pipeline-test [Pipeline] { [Pipeline] stage [Pipeline] { (clone 代码) [Pipeline] sh + cd /var/lib/jenkins/workspace/pipeline-test + rm -rf ./code.tar.gz ./index.html [Pipeline] git using credential 26375340-9ad6-41f6-82b9-73571c30e266 Fetching changes from the remote Git repository > git rev-parse --is-inside-work-tree # timeout=10 > git config remote.origin.url git@192.168.7.100:linux_gitlab/web1.git # timeout=10 Fetching upstream changes from git@192.168.7.100:linux_gitlab/web1.git > git --version # timeout=10 using GIT_SSH to set credentials > git fetch --tags --progress git@192.168.7.100:linux_gitlab/web1.git +refs/heads/*:refs/remotes/origin/* # timeout=10 > git rev-parse refs/remotes/origin/master^{commit} # timeout=10 Checking out Revision 5bd130b5a0936bafeb55b3a3617308902feb29e4 (refs/remotes/origin/master) > git rev-parse refs/remotes/origin/origin/master^{commit} # timeout=10 > git config core.sparsecheckout # timeout=10 > git checkout -f 5bd130b5a0936bafeb55b3a3617308902feb29e4 # timeout=10 > git branch -a -v --no-abbrev # timeout=10 > git checkout -b master 5bd130b5a0936bafeb55b3a3617308902feb29e4 # timeout=10 Commit message: "Add index.html" [Pipeline] echo 代码 clone完成 [Pipeline] } [Pipeline] // stage [Pipeline] stage [Pipeline] { (代码打包) [Pipeline] sh > git rev-list --no-walk 5bd130b5a0936bafeb55b3a3617308902feb29e4 # timeout=10 + cd /var/lib/jenkins/workspace/pipeline-test + tar czvf code.tar.gz ./index.html ./index.html [Pipeline] echo 代码打包完成 [Pipeline] } [Pipeline] // stage [Pipeline] stage [Pipeline] { (停止tomcat服务) [Pipeline] sh + ssh www@192.168.7.104 /apps/tomcat/bin/shutdown.sh [Pipeline] } [Pipeline] // stage [Pipeline] stage [Pipeline] { (代码复制) [Pipeline] sh + cd /var/lib/jenkins/workspace/pipeline-test + scp code.tar.gz www@192.168.7.104:/data/tomcat/tomcat_appdir/ [Pipeline] } [Pipeline] // stage [Pipeline] stage [Pipeline] { (代码部署) [Pipeline] sh + ssh www@192.168.7.104 'cd /data/tomcat/tomcat_appdir/ && rm -rf /data/tomcat/tomcat_webdir/myapp/* && tar xvf code.tar.gz -C /data/tomcat/tomcat_webdir/myapp/ ' ./index.html [Pipeline] } [Pipeline] // stage [Pipeline] stage [Pipeline] { (启动tomcat服务) [Pipeline] sh + ssh www@192.168.7.104 /apps/tomcat/bin/startup.sh Tomcat started. [Pipeline] } [Pipeline] // stage [Pipeline] } [Pipeline] // node [Pipeline] End of Pipeline Finished: SUCCESS
7、此时可以看到jenkins-slave服务器上已经有代码
[root@jenkins-slave ~]# cd /var/lib/jenkins/workspace/pipeline-test [root@jenkins-slave pipeline-test]# ls code.tar.gz index.html [root@jenkins-slave pipeline-test]# cat index.html linux web 123456[root@jenkins-slave pipeline-test]#
8、后端tomcat服务器上也已经有了代码
[root@tomcat-web1 ~]# cd /data/tomcat/tomcat_webdir/myapp/ [root@tomcat-web1 myapp]# cat index.html linux web 123456[root@tomcat-web1 myapp]#
9、访问tomcat网站,成功访问网页,此时基于pipeline流水线拉取代码成功。
Jenkins视图
1、列表视图
1、我的视图----->列表视图使用场景比较多,用于将一个业务的job保存至一个列表视图进行分类管理,即不同业务的job放在不同的列表视图中 。
2、创建一个列表视图,命名为pipeline-view
3、创建完pipeline-view,选择自己已经创建的项目。
4、在新创建的pipeline-view列表视图后,可以查看到分配的相同业务的项目。