jenkins自动化部署代码-pipeline流水线风格

jenkins自动化部署代码-pipeline流水线风格

pipeline介绍

Jenkins 2.0的精髓是Pipeline as Code,是帮助Jenkins实现CI到CD转变的重要角色。什么是Pipeline,简单来说,就是一套运行于Jenkins上的工作流框架,将原本独立运行于单个或者多个节点的任务连接起来,实现单个任务难以完成的复杂发布流程。Pipeline的实现方式是一套Groovy DSL,任何发布流程都可以表述为一段Groovy脚本,并且Jenkins支持从代码库直接读取脚本,从而实现了Pipeline as Code的理念。

pipeline概念

Pipeline 是一个用户定义的 CD 流水线模式。Pipeline 代码定义了通常包含构建、测试和发布步骤的完整的构建过程。

Node (ansible中的- hosts:)
node 是一个机器,它是 Jenkins 环境的一部分,并且能够执行 Pipeline。同时,node 代码块也是脚本式 Pipeline 语法的关键特性。
Stage (ansible中的任务tasks)
Stage 块定义了在整个 Pipeline 中执行的概念上不同的任务子集(例如“构建”,“测试”和“部署”阶段),许多插件使用它来可视化或呈现 Jenkins 管道状态/进度。
Step (ansible中的- name)
一项任务。从根本上讲,一个步骤告诉 Jenkins 在特定时间点(或过程中的“步骤”)要做什么。例如,使用 sh step:sh 'make' 可以执行 make 这个 shell 命令。

pipeline脚本模板(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"
        }
    }
}
}

创建pipeline

image-20230830103819810

image-20230830181954711

image-20230830182012005

image-20230830181749360

image-20230830181835183

脚本内容

# pipeline脚本内容
pipeline{
agent any
stages{
    stage("获取代码"){
       steps{
           checkout scmGit(branches: [[name: '${tag}']], extensions: [], userRemoteConfigs: [[url: 'git@gitlab.xiaoyuanwiki.com:root/hello-word.git']])
       }
    }
    stage("代码检测"){
        steps{
            sh '''/usr/lib/apache-maven-3.9.4/bin/mvn clean verify sonar:sonar \\
  -Dsonar.projectKey=java \\
  -Dsonar.projectName=\'java\' \\
  -Dsonar.host.url=http://10.0.0.7:9000 \\
  -Dsonar.token=squ_7829c7828b146ca06e463e1883673985bbe29f64'''
        }
    }
    stage("构建"){
        input {
                message "是否继续构建?"
                ok "构建"
        }
        steps{
            sh '/usr/bin/sh -x /var/lib/jenkins/scripts/mvn.sh '
        }
    }
}
}

# 执行的shell脚本内容
#!/bin/bash
# 版本:
version=$(awk -F '[<> ]' 'NR==6{print $3}' ${WORKSPACE}/pom.xml)
his='/hello_version'
ssh_user=root
ssh_port=22
dev=7
test=8
prod=9

for num in ${!env};do
scp ${WORKSPACE}/target/hello-world-war-${version}.war ${ssh_user}@172.16.1.$num:${his}
ssh -o StrictHostKeyChecking=no -o BatchMode=yes ${ssh_user}@172.16.1.$num "unzip -n ${his}/hello-world-war-${version}.war -d ${his}/hello-world-war-${version}"
ssh ${ssh_user}@172.16.1.$num "rm -f /usr/share/tomcat/webapps/ROOT"
ssh ${ssh_user}@172.16.1.$num "ln -s ${his}/hello-world-war-${version} /usr/share/tomcat/webapps/ROOT"
ssh ${ssh_user}@172.16.1.$num "systemctl restart tomcat"
done

version=$(awk -F '[<> ]' 'NR==6{print $3}' ${WORKSPACE}/pom.xml)
his='/hello_version'
ssh_user=root
ssh_port=22
dev=7
test=8
prod=9

for num in ${!env}; do
  # 检查解压后的目录是否存在同名文件
  file_exists=$(ssh ${ssh_user}@172.16.1.$num "ls ${his}/hello-world-war-${version}")

  if [ -z "$file_exists" ]; then
    # 文件不存在,执行解压操作
    scp ${WORKSPACE}/target/hello-world-war-${version}.war ${ssh_user}@172.16.1.$num:${his}
    ssh ${ssh_user}@172.16.1.$num "unzip -n ${his}/hello-world-war-${version}.war -d ${his}/hello-world-war-${version}"
    ssh ${ssh_user}@172.16.1.$num "rm -f /usr/share/tomcat/webapps/ROOT"
    ssh ${ssh_user}@172.16.1.$num "ln -s ${his}/hello-world-war-${version} /usr/share/tomcat/webapps/ROOT"
    ssh ${ssh_user}@172.16.1.$num "systemctl restart tomcat"
  else
    # 文件已存在,跳过解压操作
    ssh ${ssh_user}@172.16.1.$num "rm -f /usr/share/tomcat/webapps/ROOT"
    ssh ${ssh_user}@172.16.1.$num "ln -s ${his}/hello-world-war-${version} /usr/share/tomcat/webapps/ROOT"
    ssh ${ssh_user}@172.16.1.$num "systemctl restart tomcat"
  fi
done

发邮件工具

安装sendemail

[root@jenkins ~]# mv sendEmail-v1.56 /app/sendemail-1.56
[root@jenkins ~]# ln -s /app/sendemail-1.56 /app/sendemail
[root@jenkins ~]# vim /etc/profile.d/sendemail.sh
[root@jenkins ~]# source /etc/profile
-f 112233@qq.com       # 发件人邮箱地址
-t 445566@qq.com       # 收件人邮箱地址
-s smtp.qq.com         # 发件人邮箱的smtp服务器地址
-u 'zls test email'    # 邮件标题
-m 'test mail content' # 邮件内容
-a /tmp/data.txt /tmp/1.jpg #发送附件
-xu 112233             # 发件人邮箱登录用户名
-xp fdnzuslqhshgkslxj  # 发件人邮箱登录密码(QQ邮箱的授权码)
-cc 222222@qq.com      # 抄送指定用户
-bcc 333333@qq.com     # 加密抄送
-o message-content-type=html# 邮件内容格式为html
-o message-file=FILE   # 指定某个文件内容作为邮件内容
-o message-charset=utf8# 邮件内容编码为utf8
-o tls=no              #关闭tls握手

发邮件脚本

#!/bin/bash
# File Name: __send_test_mail.sh__
# Version: __v1.1__
# Author: __DriverZeng__
# Mail: __133411023@qq.com__
# Blog: __https://blog.driverzeng.com__
# 当前时间
now_time=`date +%F\ %T`
# 主机IP
ip_address=`ifconfig eth0|awk 'NR==2{print $2}'`
# 收件箱
reciver="133411023@qq.com"
# 发送者邮箱
sender=253097001@qq.com
# 邮箱用户名
login_user=253097001
# 邮箱密码
# 使用qq邮箱发邮件,首先需要开启:POP3/SMTP服务,然后使用授权码发送。而不是邮箱密码
login_pass=passwdpasswdpasswd
# smtp服务器地址
smtp_host=smtp.qq.com
# 邮件标题
email_title="${ip_address}_${HOSTNAME}:文件被修改告警"

# 指定文件
email_file="/root/file_status.html"
sendEmail \
-f ${sender} \
-t ${reciver} \
-s ${smtp_host} \
-u ${email_title} \
-xu ${login_user} \
-xp ${login_pass} \
-o message-file=${email_file} \
-o message-charset=utf-8 \
-o message-content-type=html \
-o tls=no

企业微信构建后通知

image-20230830212352947

image-20230830194547135

image-20230830200906965

https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=2013c7a4-4e12-4d57-8d89-ebac7fa7225c

image-20230830201233167

image-20230830201305380

钉钉构建后通知

image-20230830212322315

image-20230830212805200

https://oapi.dingtalk.com/robot/send?access_token=ce8724fe3e16e6687f72642055acc324b4064e4fe4c65f84393e0a211443b3fe

image-20230830211541714

image-20230830212602372

image-20230830212637312

image-20230830212931617

image-20230830213044312

邮箱构建后通知(未完成)

image-20230816100703246

image-20230816100938355

# 获取授权码

image-20230830202201328

jenkins自带邮件配置在这里可以先测试一下我们的邮箱配置是否正确,邮件能否发送成功进入系统管理-->系统配置,做如下配置先增加系统管理员邮件地址

image-20230830204815627

找邮件通知的区域,进行配置并测试

image-20230830210136900

image-20230830211841389

image-20230830212013955

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇