jenkins

参考: https://www.cnblogs.com/stulzq/p/10115589.html

知识点 :

gitlab runner跟jenkins作用相同,都是持续集成、部署
jenkins存放数据不依靠数据库,所以在移植时只需要拷贝整个程序主目录即可 

CI/CD

标准的开发流程(构建过程):编码 → 构建 → 集成 → 测试 → 交付 → 部署

1.CI(持续集成)

持续集成指的是,频繁地(一天多次)将代码集成到主干。将软件个人研发的部分向软件整体部分交付,频繁进行集成以便更快地发现其中的错误。

它的好处主要有两个:

1. 快速发现错误。每完成一点更新,就集成到主干,可以快速发现错误,定位错误也比较容易;

2. 防止分支大幅偏离主干。如果不是经常集成,主干又在不断更新,会导致以后集成的难度变大,甚至难以集成。

持续集成并不能消除Bug,而是让它们非常容易发现和改正。持续集成的目的,就是让产品可以快速迭代,同时还能保持高质量。它的核心措施是,代码集成到主干之前,必须通过自动化测试。只要有一个测试用例失败,就不能集成。

2.CD(持续部署)

持续部署(continuous deployment)是持续交付的下一步,指的是代码通过评审以后,自动部署到生产环境。

持续部署的目标是,代码在任何时刻都是可部署的,可以进入生产阶段。

自动化部署原理

简单说就是代码写好并build之后,把代码提交到github上,jenkins检测到代码变化就会自动构建项目,把代码拉到服务器,从而实现自动部署

一.jenkins

1.特性

除jenkins外,还有gitlab、Bamboo等其他CI/CD平台。jenkins只是一个平台,几乎所有的功能都依赖于插件。

Jenkins是一个开源的、可扩展的持续集成、交付、部署(软件/代码的编译、打包、部署)的基于web界面的平台。允许持续集成和持续交付项目,无论用的是什么平台,可以处理任何类型的构建或持续集成。
2.触发器原理
#jenkins构建触发的方式有多种,主要有手动触发、定时触发和webhook触发
webhook触发原理:一般跟gitlab配合使用,gitlab上配置jenkins相关的webhook,一旦有push操作就发送请求让jenkins拉取代码,jenkins通过配置gitlab的仓库地址来拉取代码
3.代码发布流程
拉取代码
scp到测试服务器
单元测试、等其他测试
发送邮件
3.常用插件
#jenkins如果不安装相关插件,界面上是不会有相关选项的
git Plugin:用来拉取git仓库代码,此外在jenkins服务所在机器上要安装git,用来拉取代码
Publish Over SSH Plugin:通过ssh向其他服务器发送拉下来的代码
Job Configuration History Plugin:提供diff对比、回滚功能(如果修改了某配置现在想该回去可用这个)
Pipeline插件
Http Request Plugin:用来访问网站是否超时是否能正常打开,不能用来判断是否正常
Email相关插件
3.安装jenkins

参考: https://blog.csdn.net/miss1181248983/article/details/82840006

yum install -y java-1.8.0-openjdk	#安装openjdk,jenkins基于java开发

wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat/jenkins.repo				#wget -O 下载文件并以指定的文件名保存

cat /etc/yum.repos.d/jenkins.repo 
#[jenkins]
#name=Jenkins
#baseurl=http://pkg.jenkins.io/redhat
#gpgcheck=1				#为1时会检测key

rpm --import https://pkg.jenkins.io/redhat/jenkins.io.key	#安装jenkins key

yum install -y jenkins
systemctl start jenkins
3.构建任务
1.前提条件
  1. 创建任务之前先生成密钥 ssh-keygen -f ~/.ssh/jenkins
  2. 系统管理-插件管理中安装git Plugin和publish over ssh两个插件
  3. 系统管理-系统设置中找到publish over ssh,添加私钥,配置如下两图

​ 新增ssh servers,这是代码要发布的目标机器,到目标服务器添加公钥 vim authorized_keys,将jenkins.pub 添加进去,然后点击下图test confixx是否能连接成功!

2.手动构建
  1. 源码管理中填写git相关,此步骤一配置之后,就可以拉取git仓库的代码了,拉取到jenkins本地工作目录


    )

  2. build teps配置,此处shell默认在下载的项目代码根目录完成

2.自动构建

如果要自动构建(自己push到gitlab上之后jenkins自动将代码同步到代码服务器),需要用到gitlab中的webhook(网络钩子,当gitlab有新的commit,会触发webhook中的url,一般这个url是jenkins中的job的url),按照如下操作

  1. 自己生成公私钥ssh-keygen -t rsa -C '1151048226@qq.com',将公钥粘贴到如图

  2. jenkins上安装gitlab hook plugin插件(安装成功后会出现下图)

  3. 将上图url和点击“高级”中的 Secret token 复制到gitlab(settings-integrations)中,点击Test查看是否成功。然后我们重新push新的内容到gitlab上,代码服务器会相应改变。如下两图,其他默认即可

  4. 构建中执行脚本进行测试,构建-高级-执行shell,这样构建时会自动在目标服务器执行命令

  5. 构建步骤中配置

    ssh server选择在系统配置中已经配置过的publish over ssh目标主机名称

    transfer set source files:**/*表示项目下所有文件

    remote diectory:项目远程目录,如果在系统配置的publish over ssh中已经配置remote Directory,此时项目远程目录为/gyktxt

    参数化构建-general中选择“参数化构建”,填入参数名称,在shell中使用用“$参数名”

    不止有默认的一些参数,可下载 Git Parameter,提供了一些可选的参数,如分支,tag,用户一旦向某个分支commit数据,我们在build with parameters中可选新分支进行构建,如下图参考: http://events.jianshu.io/p/927a1599f7a0

5.例几种项目构建

常用的构建项目有三种: 自由风格软件项目(FreeStyle Project)、 Maven项目(Pipeline Project)、pipline项目

参考:https://blog.csdn.net/m0_53157173/article/details/126578748

4.jenkinsfile
Jenkinsfile 是 Jenkins 2.x 核心特性 Pipeline 的脚本,由Groovy语言实现。Jenkinsfile一般是放在项目根目录,随项目一起受源代码管理软件控制,无需像创建“自由风格"(Jenkins FreeStyle)项目一样,每次可能需要拷贝很多设置到新项目,提供了一些直接的好处
Jenkinsfile需要在项目根目录下写,在jenkins平台上配置pipeline项目会自动拉取代码并执行根目录下的Jenkinsfile文件

jenkins中流水线生成器有哪几种:

1.checkout生成器:下载gitlab代码
2.sh生成器:生成shell脚本

1.语法
pipeline {
    agent any #jenkins服务可以分布式搭建,规定在哪个节点运行
    environment {  #设置环境变量
        HARBOR_ADDRESS = "192.168.117.160"
        IMAGE_NAME = "gift"
        NAMESPACE = "gift"
    }
    stages {  #代表流水线的所有执行阶段
        stage('拉取代码') {   #单个执行阶段,自行命名
            steps {          #steps是shell脚本
                echo '拉取代码'
            }
        }
		stage('编译构建') {
            steps {
                echo '编译构建'
            }
        }
		stage('项目部署') {
            steps {
                echo '项目部署'
                echo "HARBOR_ADDRESS"
            }
        }
    }
}


2.例子

编写jenkinsfile添加构建后并发送邮箱

pipeline {
    agent any

    stages {
        stage('拉取代码') {
            steps {
               checkout([$class: 'GitSCM', branches: [[name: '*/master']], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[credentialsId: 'bacbbbb1-2df9-470d-adf8-5cb6dc496807', url: 'git@192.168.209.100:develop_group/springboot2.git']]])
            }
        }
		stage('编译构建') {
            steps {
                sh '''echo "开始构建"
                mvn clean install -Dmaven.test.skip=true
                echo "构建结束"'''
            }
        }
		stage('项目部署') {
            steps {
                sshPublisher(publishers: [sshPublisherDesc(configName: '192.168.209.102', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: '''#!/bin/bash
                echo "stop SpringBoot BAppApiServerApplication"
                pid=`ps -ef | grep java | grep -v grep | awk \'{print $2}\'`
                echo “旧应用进程id:$pid”
                if [ -n "$pid" ]
                then
                kill -9 $pid
                rm -rf springboot2-1.0.jar
                fi
                export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-11.0.9.11-2.el7_9.x86_64
                echo ${JAVA_HOME}
                echo "授权当前用户"
                chmod 777 /usr/local/springboot2-1.0.jar
                echo "执行...."
                cd /usr/local/
                nohup ${JAVA_HOME}/bin/java -jar springboot2-1.0.jar > /dev/null &
                echo "启动成功"

                ''', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, removePrefix: 'target', sourceFiles: 'target/*.jar')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])
            }
        }
    }
    post {
      always {
         emailext (
             subject: '构建通知:${PROJECT_NAME} - Build # ${BUILD_NUMBER} - ${BUILD_STATUS}!',
             body: '${FILE,path="email.html"}',
             to: 'xxx@qq.com'
         )
      }
    }
}


4.注意点
  1. 在配置pipeline时,可选pipeline script和pipe script from SCM

    pipeline script:在jenkins平台上自定义pipeline内容

    pipe script from SCM:引用pipeline文件,一般为git仓库项目根目录下的Jenkinsfile文件

  2. 点击流水线语法,选择具体生成器,可生成对应语法

5.结合ansible发布代码
posted @ 2023-02-26 16:33  MISF  阅读(65)  评论(0编辑  收藏  举报
     JS过度和变形效果演示   
  
    html5.png