Stage:阶段,一个 pipline 可以划分为若干个 stage,每个 stage 都是一个操作步骤, 比如 clone 代码、代码编译、代码测试和代码部署,阶段是一个逻辑分组,可以跨多 个 node 执行。
Node:节点,每个 node 都是一个 jenkins 节点,可以是 jenkins master 也可以是 jenkins agent,node 是执行 step 的具体服务器。
可持续性:jenkins 的重启或者中断后不影响已经执行的 Pipline Job。
支持暂停:pipline 可以选择停止并等待人工输入或批准后再继续执行。
可扩展:通过 groovy 的编程更容易的扩展插件。
并行执行:通过 groovy 脚本可以实现 step,stage 间的并行执行,和更复杂的相互依赖关系。
node('jenkins-slave1'){
stage("clone 代码"){
echo "代码 clone"
}
stage("代码构建"){
echo "代码构建"
}
stage("代码测试"){
echo "代码测试"
}
stage("代码部署"){
echo "代码部署"
}
}
Jenkins Web 界面配置
立即构建,查看构建状态
点击 流水线语法 跳转至生成脚本 URL
git branch: 'develop', credentialsId: 'f55bf2a5-abd5-4f08-87ae-3e9ad4cb1024', url: 'git@10.0.0.31:lcklck/app1.git'
lck@jenkins-slave1:~$ cat /var/lib/jenkins/workspace/linux-pipline-test/index.html
<h1>v111</h1>
<h1>v222</h1>
<h1>v333</h1>
node('jenkins-slave1'){
stage("clone 代码"){
git branch: 'develop', credentialsId: 'f55bf2a5-abd5-4f08-87ae-3e9ad4cb1024', url: 'git@10.0.0.31:lcklck/app1.git'
}
stage("代码构建"){
sh 'cd /var/lib/jenkins/workspace/linux-pipline-test && tar czvf code.tar.gz ./index.html'
}
stage("代码复制"){
sh 'cd /var/lib/jenkins/workspace/linux-pipline-test && scp code.tar.gz tomcat@10.0.0.37:/data/tomcat/tomcat_appdir/'
sh 'cd /var/lib/jenkins/workspace/linux-pipline-test && scp code.tar.gz tomcat@10.0.0.38:/data/tomcat/tomcat_appdir/'
sh 'cd /var/lib/jenkins/workspace/linux-pipline-test && scp code.tar.gz tomcat@10.0.0.39:/data/tomcat/tomcat_appdir/'
}
stage("停止 tomcat 服务"){
sh 'ssh tomcat@10.0.0.37 "/etc/init.d/tomcat.sh stop"'
sh 'ssh tomcat@10.0.0.38 "/etc/init.d/tomcat.sh stop"'
sh 'ssh tomcat@10.0.0.39 "/etc/init.d/tomcat.sh stop"'
}
stage("代码部署"){
sh 'ssh tomcat@10.0.0.37 "rm -rf /data/tomcat/tomcat_webdir/myapp/* && cd /data/tomcat/tomcat_appdir && tar xvf code.tar.gz -C /data/tomcat/tomcat_webdir/myapp/"'
sh 'ssh tomcat@10.0.0.38 "rm -rf /data/tomcat/tomcat_webdir/myapp/* && cd /data/tomcat/tomcat_appdir && tar xvf code.tar.gz -C /data/tomcat/tomcat_webdir/myapp/"'
sh 'ssh tomcat@10.0.0.39 "rm -rf /data/tomcat/tomcat_webdir/myapp/* && cd /data/tomcat/tomcat_appdir && tar xvf code.tar.gz -C /data/tomcat/tomcat_webdir/myapp/"'
}
stage("启动 tomcat 服务"){
sh 'ssh tomcat@10.0.0.37 "/etc/init.d/tomcat.sh start"'
sh 'ssh tomcat@10.0.0.38 "/etc/init.d/tomcat.sh start"'
sh 'ssh tomcat@10.0.0.39 "/etc/init.d/tomcat.sh start"'
}
}
root@jenkins-master:~# cd app1/
root@jenkins-master:~/app1# vim index.html
<h1>v111</h1>
<h1>v222</h1>
<h1>v333</h1>
<h1>v444</h1>
root@jenkins-master:~/app1# git commit -m "v4 version"
[master 625ecab] v4 version
1 file changed, 1 insertion(+)
root@jenkins-master:~/app1# git push
Counting objects: 3, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 297 bytes | 297.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To 10.0.0.31:lcklck/app1.git
3f721f0..625ecab master -> master
pipeline{
agent { label 'jenkins-slave1' }
stages{
stage("代码clone"){
steps{
sh "cd /var/lib/jenkins/workspace/linux-pipline-test && rm -rf ./*"
git credentialsId: 'f55bf2a5-abd5-4f08-87ae-3e9ad4cb1024', url: 'git@10.0.0.31:lcklck/app1.git'
echo "代码 clone完成"
}
}
stage("代码构建"){
steps{
sh "cd /var/lib/jenkins/workspace/linux-pipline-test && tar czvf code.tar.gz ./index.html"
}
}
stage("停止服务"){
steps{
sh 'ssh tomcat@10.0.0.37 "/etc/init.d/tomcat.sh stop && rm -rf /data/tomcat/tomcat_webapps/myapp/*"'
sh 'ssh tomcat@10.0.0.38 "/etc/init.d/tomcat.sh stop && rm -rf /data/tomcat/tomcat_webapps/myapp/*"'
sh 'ssh tomcat@10.0.0.39 "/etc/init.d/tomcat.sh stop && rm -rf /data/tomcat/tomcat_webapps/myapp/*"'
}
}
stage("代码copy"){
steps{
sh "cd /var/lib/jenkins/workspace/linux-pipline-test && scp code.tar.gz tomcat@10.0.0.37:/data/tomcat/tomcat_appdir/"
sh "cd /var/lib/jenkins/workspace/linux-pipline-test && scp code.tar.gz tomcat@10.0.0.38:/data/tomcat/tomcat_appdir/"
sh "cd /var/lib/jenkins/workspace/linux-pipline-test && scp code.tar.gz tomcat@10.0.0.39:/data/tomcat/tomcat_appdir/"
}
}
stage("代码部署"){
steps{
sh 'ssh tomcat@10.0.0.37 "cd /data/tomcat/tomcat_appdir/ && tar xvf code.tar.gz -C /data/tomcat/tomcat_webapps/myapp/"'
sh 'ssh tomcat@10.0.0.38 "cd /data/tomcat/tomcat_appdir/ && tar xvf code.tar.gz -C /data/tomcat/tomcat_webapps/myapp/"'
sh 'ssh tomcat@10.0.0.39 "cd /data/tomcat/tomcat_appdir/ && tar xvf code.tar.gz -C /data/tomcat/tomcat_webapps/myapp/"'
}
}
stage("启动服务"){
steps{
sh 'ssh tomcat@10.0.0.37 "/etc/init.d/tomcat.sh start"'
sh 'ssh tomcat@10.0.0.38 "/etc/init.d/tomcat.sh start"'
sh 'ssh tomcat@10.0.0.39 "/etc/init.d/tomcat.sh start"'
}
}
}
}
root@jenkins-master:~/app1# vim Jenkinsfile
pipeline{
agent { label 'jenkins-slave1' }
stages{
stage("代码clone"){
steps{
...............................................
root@jenkins-master:~/app1# git add .
root@jenkins-master:~/app1# git commit -m "add Jenkinsfile"
[master 3424fa3] add Jenkinsfile
1 file changed, 51 insertions(+)
create mode 100644 Jenkinsfile
root@jenkins-master:~/app1# git push
Counting objects: 3, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 809 bytes | 809.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To 10.0.0.31:lcklck/app1.git
625ecab..3424fa3 master -> master
因篇幅问题不能全部显示,请点此查看更多更全内容