jenkins补充1
pipline实现代码部署
https://jenkins.io/2.0/
pipline 是帮助Jenkins 实现Cl到CD转变的重要角色,是运行在jenkins2.X版本的核心插件,简单来说Pipline就是一套运行于Jenkins上的工作流框架,将原本独立运行于单个或者多个节点的任务连接起来,实现单个任务难以完成的复杂发布流程,从而实现单个任务很难实现的复杂流程编排和任务可视化,Pipeline的实现方式是一套Groovy DSL,任何发布流程都可以表述为一段Groovy 脚本。
pipline优势
- 可持续性:jenkins的重启或者中断后不影响已经执行的Pipline Jobe
- 支持暂停:pipline可以选择停止并等待人工输入或批准后再继续执行。
- 可扩展:通过groovy的编程更容易的扩展插件。
- 并行执行:通过groovy脚本可以实现step,stage间的并行执行,和更复杂的相互依赖关系。
pipline 语法
- Stage:阶段,一个pipline 可以划分为若干个stage,每个stage都是一个操作,比如clone代码、代码编译、代码测试和代码部署,阶段是一个逻辑分组,可以跨多个node执行。
- Node:节点,每个node都是一个jenkins节点,可以是jenkins master也可以是jenkins agent,node是执行step的具体服务器。
- Step:步骤,step是jenkinspipline最基本的操作单元,从在服务器创建目录到构建容器镜像,由各类
Jenkins 插件提供实现,例如:sh “make"
pipline job测试
phpline 创建一个job
写入测试代码
node {
stage('代码clone') {
echo '代码clone'
}
stage('代码打包') {
echo '代码打包'
}
stage('停止服务') {
echo '停止服务'
}
stage('启动服务') {
echo '启动服务'
}
}
执行pipline job
查看pipline job执行结果
- 代码clone
- 代码打包
- 停止服务
- 代码替换
- 启动服务
查看语法
node {
stage('代码clone') { //echo '代码clone'
git credentialsId: '900ec5eb-5557-4f26-94cd-85c72a3c7f50', url: 'git@192.168.10.254:web233/web1.git'
}
stage('代码打包') {
echo '代码打包'
}
stage('停止服务') {
echo '停止服务'
}
stage('代码替换') {
echo '代码替换'
}
stage('启动服务') {
echo '启动服务'
}
}
执行结果
node {
stage('代码clone') { //echo '代码clone'
git credentialsId: '900ec5eb-5557-4f26-94cd-85c72a3c7f50', url: 'git@192.168.10.254:web233/web1.git'
}
stage('代码打包') { //echo '代码打包'
sh 'cd /var/lib/jenkins/workspace/pipline-test && rm -rf web233.zip && zip -r web233.zip ./*'
sh 'scp -P22 /var/lib/jenkins/workspace/pipline-test/web233.zip www@192.168.10.230:/data/tomcat/webapps/testapp'
sh 'scp -P22 /var/lib/jenkins/workspace/pipline-test/web233.zip www@192.168.10.231:/data/tomcat/webapps/testapp'
}
stage('停止服务') { //echo '停止服务'
sh 'ssh -p22 www@192.168.10.230 "/etc/init.d/tomcat stop"'
sh 'ssh -p22 www@192.168.10.231 "/etc/init.d/tomcat stop"'
}
stage('代码替换') { //echo '代码替换'
sh 'ssh -p22 www@192.168.10.230 "cd /data/tomcat/webapps/testapp && rm -rf ./index.* && unzip web233.zip && rm -rf web233.zip"'
sh 'ssh -p22 www@192.168.10.231 "cd /data/tomcat/webapps/testapp && rm -rf ./index.* && unzip web233.zip && rm -rf web233.zip"'
}
stage('启动服务') { //echo '启动服务'
sh 'ssh -p22 www@192.168.10.230 "/etc/init.d/tomcat start"'
sh 'ssh -p22 www@192.168.10.231 "/etc/init.d/tomcat start"'
}
}
在上传一个版本
cat index.html
this is web233 test v1...
this is web233 test v2...
this is web233 test v3...
this is web233 test v4...
this is web233 test v5...
git add ./*
git commit -m "v5"
git push
配置slave执行job
jenkins-slave1
ssh-keygen
cat /root/.ssh/id_rsa.pub
ssh-copy-id -p22 www@192.168.10.230
ssh-copy-id -p22 www@192.168.10.231
node ('jenkins-slave1') {
stage('代码clone') { //echo '代码clone'
sh 'cd /var/lib/jenkins/workspace/workspace/pipline-test && rm -rf ./* && git clone git@192.168.10.254:web233/web1.git'
//git credentialsId: '900ec5eb-5557-4f26-94cd-85c72a3c7f50', url: 'git@192.168.10.254:web233/web1.git'
}
stage('代码打包') { //echo '代码打包'
sh 'cd /var/lib/jenkins/workspace/workspace/pipline-test/web1 && rm -rf web233.zip && zip -r web233.zip ./*'
sh 'scp -P22 /var/lib/jenkins/workspace//workspace/pipline-test/web1/web233.zip www@192.168.10.230:/data/tomcat/webapps/testapp'
sh 'scp -P22 /var/lib/jenkins/workspace//workspace/pipline-test/web1/web233.zip www@192.168.10.231:/data/tomcat/webapps/testapp'
}
stage('停止服务') { //echo '停止服务'
sh 'ssh -p22 www@192.168.10.230 "/etc/init.d/tomcat stop"'
sh 'ssh -p22 www@192.168.10.231 "/etc/init.d/tomcat stop"'
}
stage('代码替换') { //echo '代码替换'
sh 'ssh -p22 www@192.168.10.230 "cd /data/tomcat/webapps/testapp && rm -rf ./index.* && unzip web233.zip && rm -rf web233.zip"'
sh 'ssh -p22 www@192.168.10.231 "cd /data/tomcat/webapps/testapp && rm -rf ./index.* && unzip web233.zip && rm -rf web233.zip"'
}
stage('启动服务') { //echo '启动服务'
sh 'ssh -p22 www@192.168.10.230 "/etc/init.d/tomcat start"'
sh 'ssh -p22 www@192.168.10.231 "/etc/init.d/tomcat start"'
}
}
构建过程中注意
目录路径或文件夹是否存在
git认证没有做好
软件包没有装
免密钥登陆没有设置
完成
jenkins脚本及传递参数使用
新建一个任务做测试
看需求要保留天数及个数
添加选项参数
构建执行shell窗口
bash /root/scripts/deploy.sh
发送邮件通知
mkdir -pv /root/scripts
cd /root/scripts/
[root@jenkins scripts]# cat deploy.sh
#!/bin/bash
whoami
IP_LIST=$1
if [ ${IP_LIST} == "GROUP1" ];then
IP="192.168.10.230"
elif [ ${IP_LIST} == "GROUP2" ];then
IP="192.168.10.231"
fi
echo $IP
添加字符参数
ls /var/lib/jenkins/workspace/project1/
#!/bin/bash
whoami
IP_LIST=$1
BRANCH=$2
if [ ${IP_LIST} == "GROUP1" ];then
IP="192.168.10.230"
elif [ ${IP_LIST} == "GROUP2" ];then
IP="192.168.10.231"
fi
echo $IP
echo $BRANCH
if [ -z $BRANCH ];then
BRANCH=master
fi
echo $BRANCH
cd /var/lib/jenkins/workspace/project1 && rm -rf ./*
git clone -b $BRANCH git@192.168.10.254:web233/web1.git