• Docker -- 01实践:使用Docker 快速安装Jenkins


    在这里插入图片描述


    在这里插入图片描述在这里插入图片描述在这里插入图片描述

    Jenkins Website: https://www.jenkins.io/.


    1. Docker install

    2. Jenkins install

    • 下载镜像
      docker pull jenkins/jenkins
      在这里插入图片描述
    • 创建目录,让jenkins容器的配置挂载到此目录
      sudo mkdir -p /var/jenkins_mount
      sudochmod 777 /var/jenkins_mount
    • 创建容器
      docker run -d -p 8080:8080 -p 50000:50000 -v /var/jenkins_mount:/var/jenkins_home -v /etc/localtime:/etc/localtime --name myjenkins jenkins/jenkins
    • 检查是否启动成功
      docker ps -l
      在这里插入图片描述
    • 修改镜像
      cd /var/jenkins_mount
      在这里插入图片描述
      vi hudson.model.UpdateCenter.xml
      url 修改为清华大学镜像:https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
      在这里插入图片描述
    • 访问
      http://xxxxx:8080
      在这里插入图片描述
    • 获取初始密码
      sudo cat /var/jenkins_mount/secrets/initialAdminPassword
      在这里插入图片描述
      全部都是admin,邮箱是自己的
      在这里插入图片描述

    3. User Guide

    Jenkins Pipeline: https://www.jenkins.io/doc/book/pipeline/.

    3.1 入门教程

    3.1.1 连接仓库,触发Jenkins
    • 下载插件
      Generic Webhook Trigger
      在这里插入图片描述
    • 创建pipeline
      在这里插入图片描述
    • 配置pipeline
      选择下载的插件
      在这里插入图片描述
      填写token,复制路径,配置到对应的仓库
      在这里插入图片描述
      仓库配置webhook,粘贴前面的路径
      在这里插入图片描述
      回到jenkins,配置仓库的路径和账密
      在这里插入图片描述
      方框中就是jenkinsfile,将git拉下来的代码,要继续进行的动作写进里面
      不要勾选,会报错在这里插入图片描述
    3.1.2 jenkinsfile语法
    • agent指示 Jenkins 分配一個執行器(在任何可用的 Jenkins 環境中的代理/節點)和整個管道的工作區。
    • echo在主控台輸出中寫入簡單字串。
    • node執行与agent相同的操作。
    • 1.聲明性管道
    pipeline {
        agent any 
        stages {
            stage('Build') { 
                steps {
                    // 
                }
            }
            stage('Test') { 
                steps {
                    // 
                }
            }
            stage('Deploy') { 
                steps {
                    // 
                }
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 2.腳本化管道
    node {  
        stage('Build') { 
            // 
        }
        stage('Test') { 
            // 
        }
        stage('Deploy') { 
            // 
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 3.Pipeline example
    pipeline { 
        agent any 
        options {
            skipStagesAfterUnstable()
        }
        stages {
            stage('Build') { 
                steps { 
                    sh 'make' 
                }
            }
            stage('Test'){
                steps {
                    sh 'make check'
                    junit 'reports/**/*.xml' 
                }
            }
            stage('Deploy') {
                steps {
                    sh 'make publish'
                }
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    3.1.3 jenkinsfile获取环境变量

    ${env.BUILD_NUMBER} 方式一,推荐使用

    $env.BUILD_NUMBER 方式二

    ${BUILD_NUMBER} 方式三,不推荐使用

    3.1.4 jenkinsfile执行shell命令
    • jenkinsfile node or stage
      sh ‘pwd’

    3.2 Pipeline支持的基本步骤

    catchError: 捕捉错误和设置构建结果为失败。
    deleteDir: 在工作区内递归删除当前目录
    dir: 设置当前工作目录。
    echo: 打印信息
    error: 设置构建结果和阶段结果为异常,并打印设置的信息,可以中断流水线的执行,也可以抛出新的Exception(),但是这个步骤不会打印堆栈信息。
    fileExists: 检查文件是否存在,返回true|false。
    isUnix: 检查是否运行在类unix节点上
    mail: 邮件通知
    pwd: 以字符串形式返回当前目录路径。
    readFile: 从相对路径读取文件(通常是工作空间),并以普通字符串的形式返回其内容。
    retry: 重试内部代码N次。
    sleep: 暂停管道构建,直到给定的时间过期。
    stash: 在构建的阶段中把文件保存起来,这个文件可以给当前构建中的其它阶段使用。
    step: 一般的构建步骤
    timeout: 设置执行超时时间,如果块内的代码执行时间超出限制,会抛出异常。
    tool: 使用预定义的工具安装中的工具,参考2.2。
    unstable: 设置构建结果和阶段结果设置为不稳定。并打印日志信息。
    unstash: 取出之前stash保存的文件。
    waitUntil: 反复运行它的内部代码块,直到返回true。如果返回false,等待一段时间并再次尝试。
    warnError: 捕获错误并将构建和阶段结果设置为不稳定
    withEnv: 设置环境变量
    wrap: 一般构建包装
    writeFile: 将给定的内容写入当前目录中。
    archive: 把构建中输出的内容存档,供以后其它构建使用。Jenkins 2.x后,提供archiveArtifacts代替archive,该步骤已弃用。
    getContext: G从内部api获取上下文对象。
    unarchive: 将存档的工件复制到工作区中。
    withContext: 在块内部使用上下文对象 API。

    3.3 triggers触发器

    Jenkins内置支持cronpollSCMupstream三种方式

    3.3.1 定时执行
    pipeline{
        ......
        triggers{
            cron('0 * * * *')
        }
        ......
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    3.3.2 轮询代码仓库:pollSCM
    pipeline{
        ......
        triggers{
            pollSCM('H/1 * * * *')
        }
        ......
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    3.3.3 事件触发
    • upstream
    pipeline{
        agent any
        //说明:当test_1或者test_2运行成功的时候,自动触发
        triggers { upstream(upstreamProjects: 'test_1,test_2', threshold: hudson.model.Result.SUCCESS) }
        stages{
            stage("stage1"){
                steps{
                    echo "hello"
                }
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    3.4 Post

    3.4.1 post条件

    always: 无论stage的执行结果如何,此块中的预置操作都会执行。
    changed:只有当stage的执行后,当前状态与之前发生了改变时,此块中的预置操作才会执行。
    fixed:上一次运行为不稳定或者失败状态,本次运行成功时,此块中的预置操作才会执行。
    regression:上一次运行成功,本次运行为失败、不稳定、中止状态时,此块中的预置操作才会执行。
    aborted:当手动中止运行时,此块中的预置操作才会执行。
    failure:当stage的状态为失败时,此块中的预置操作才会执行。
    success:当stage的状态为成功时,此块中的预置操作才会执行。
    unstable:当前stage的状态为不稳定时,此块中的预置操作才会执行。
    unsuccessful:当前stage的状态不是成功时,此块中的预置操作才会执行。
    cleanup:无论stage的状态为何种状态,在post中的其他的条件预置操作执行之后,此块中的预置操作就会执行。

    3.4.2 发送请求
    post {
        always {
            httpRequest requestBody: '{\'build\':\'${env.BUILD_ID}\'}', responseHandle: 'NONE', url: 'http://192.168.1.100:8080/noti'
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    4.Tutorial

    4.1 Shell Command

    4.1.1 判断文件或目录是否存在
    // 文件夹不存在则创建
    
    if [ ! -d "/data/" ];then
      mkdir /data
    else
      echo "文件夹已经存在"
    fi
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    // 文件存在则删除
    
    if [ ! -f "/data/filename" ];then
      echo "文件不存在"
    else
      rm -f /data/filename
    fi
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    // 判断文件夹是否存在
    
    if [ -d "/data/" ];then
      echo "文件夹存在"
    else
      echo "文件夹不存在"
    fi
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    // 判断文件是否存在
    
    if [ -f "/data/filename" ];then
      echo "文件存在"
    else
      echo "文件不存在"
    fi
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    文件比较符:
    -e: 判断对象是否存在
    -d:判断对象是否存在,并且为目录
    -f:判断对象是否存在,并且为常规文件
    -L:判断对象是否存在,并且为符号链接
    -h:判断对象是否存在,并且为软链接
    -s:判断对象是否存在,并且长度不为0
    -r:判断对象是否存在,并且可读
    -w:判断对象是否存在,并且可写
    -x:判断对象是否存在,并且可执行
    -O:判断对象是否存在,并且属于当前用户
    -G:判断对象是否存在,并且属于当前用户组
    -nt:判断file1是否比file2新 [ “/data/file1” -nt “/data/file2” ]
    -ot:判断file1是否比file2旧 [ “/data/file1” -ot “/data/file2” ]

    4.1.2 xxxx

    4.2 Clear Build History

    • 清除pipeline的历史记录
      找到script console在这里插入图片描述
      运行脚本
      在这里插入图片描述
    //项目名称
    def jobName = "pipeline name"
    
    //删除小于95的构建历史
    def maxNumber = 100
     
    Jenkins.instance.getItemByFullName(jobName).builds.findAll {
      it.number <= maxNumber
    }.each {
      it.delete()
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    4.3 xxxx

    4.3.2 xxxx

    5. Awakening

             在一秒钟内看到本质的人和花半辈子也看不清一件事本质的人,自然是不一样的命运。
    在这里插入图片描述

  • 相关阅读:
    信创办公–基于WPS的Word最佳实践系列 (图文环绕方式)
    Spring Boot 最佳实践
    【面试题】throws 与 throw 声明和抛出异常
    PyCharm创建一个简单的Django项目
    java开发手册-03单元测试
    黑马C++ 02 核心3 —— 类和对象__对象的初始化和清理(重难点)
    【Linux修炼】5.vim详解
    前端进击笔记第二十七节 如何通过前期准备和后期复盘让项目稳定上线
    Footswitch应用之Python键盘按键监听程序
    科技云报道:大模型的阴面:无法忽视的安全隐忧
  • 原文地址:https://blog.csdn.net/weixin_43916074/article/details/127921997