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

在这里插入图片描述

使用Docker 快速安装Jenkins

    • 1. Docker install
    • 2. Jenkins install
    • 3. User Guide
      • 3.1 入门教程
        • 3.1.1 连接仓库,触发Jenkins
        • 3.1.2 jenkinsfile语法
        • 3.1.3 jenkinsfile获取环境变量
        • 3.1.4 jenkinsfile执行shell命令
      • 3.2 Pipeline支持的基本步骤
      • 3.3 triggers触发器
        • 3.3.1 定时执行
        • 3.3.2 轮询代码仓库:pollSCM
        • 3.3.3 事件触发
      • 3.4 Post
        • 3.4.1 post条件
        • 3.4.2 发送请求
    • 4.Tutorial
      • 4.1 Shell Command
        • 4.1.1 判断文件或目录是否存在
        • 4.1.2 xxxx
      • 4.2 Clear Build History
      • 4.3 xxxx
        • 4.3.2 xxxx
    • 5. Awakening


Docker -- 01实战:使用Docker 快速安装Jenkins_第1张图片Docker -- 01实战:使用Docker 快速安装Jenkins_第2张图片Docker -- 01实战:使用Docker 快速安装Jenkins_第3张图片

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


1. Docker install

  • Docker 安装和基础知识
    Docker install: https://blog.csdn.net/weixin_43916074/article/details/125265520.

2. Jenkins install

  • 下载镜像
    docker pull jenkins/jenkins
    Docker -- 01实战:使用Docker 快速安装Jenkins_第4张图片
  • 创建目录,让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
    Docker -- 01实战:使用Docker 快速安装Jenkins_第5张图片
    vi hudson.model.UpdateCenter.xml
    url 修改为清华大学镜像:https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
    Docker -- 01实战:使用Docker 快速安装Jenkins_第6张图片
  • 访问
    http://xxxxx:8080
    Docker -- 01实战:使用Docker 快速安装Jenkins_第7张图片
  • 获取初始密码
    sudo cat /var/jenkins_mount/secrets/initialAdminPassword
    Docker -- 01实战:使用Docker 快速安装Jenkins_第8张图片
    全部都是admin,邮箱是自己的
    Docker -- 01实战:使用Docker 快速安装Jenkins_第9张图片

3. User Guide

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

3.1 入门教程

3.1.1 连接仓库,触发Jenkins

  • 下载插件
    Generic Webhook Trigger
    Docker -- 01实战:使用Docker 快速安装Jenkins_第10张图片
  • 创建pipeline
    Docker -- 01实战:使用Docker 快速安装Jenkins_第11张图片
  • 配置pipeline
    选择下载的插件
    Docker -- 01实战:使用Docker 快速安装Jenkins_第12张图片
    填写token,复制路径,配置到对应的仓库
    Docker -- 01实战:使用Docker 快速安装Jenkins_第13张图片
    仓库配置webhook,粘贴前面的路径
    Docker -- 01实战:使用Docker 快速安装Jenkins_第14张图片
    回到jenkins,配置仓库的路径和账密
    Docker -- 01实战:使用Docker 快速安装Jenkins_第15张图片
    方框中就是jenkinsfile,将git拉下来的代码,要继续进行的动作写进里面
    不要勾选,会报错Docker -- 01实战:使用Docker 快速安装Jenkins_第16张图片

3.1.2 jenkinsfile语法

  • agent指示 Jenkins 分配一個執行器(在任何可用的 Jenkins 環境中的代理/節點)和整個管道的工作區。
  • echo在主控台輸出中寫入簡單字串。
  • node執行与agent相同的操作。
  • 1.聲明性管道
pipeline {
    agent any 
    stages {
        stage('Build') { 
            steps {
                // 
            }
        }
        stage('Test') { 
            steps {
                // 
            }
        }
        stage('Deploy') { 
            steps {
                // 
            }
        }
    }
}
  • 2.腳本化管道
node {  
    stage('Build') { 
        // 
    }
    stage('Test') { 
        // 
    }
    stage('Deploy') { 
        // 
    }
}
  • 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'
            }
        }
    }
}

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 * * * *')
    }
    ......
}

3.3.2 轮询代码仓库:pollSCM

pipeline{
    ......
    triggers{
        pollSCM('H/1 * * * *')
    }
    ......
}

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"
            }
        }
    }
}

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'
    }
}

4.Tutorial

4.1 Shell Command

4.1.1 判断文件或目录是否存在

// 文件夹不存在则创建

if [ ! -d "/data/" ];then
  mkdir /data
else
  echo "文件夹已经存在"
fi
// 文件存在则删除

if [ ! -f "/data/filename" ];then
  echo "文件不存在"
else
  rm -f /data/filename
fi
// 判断文件夹是否存在

if [ -d "/data/" ];then
  echo "文件夹存在"
else
  echo "文件夹不存在"
fi
// 判断文件是否存在

if [ -f "/data/filename" ];then
  echo "文件存在"
else
  echo "文件不存在"
fi

文件比较符:
-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 consoleDocker -- 01实战:使用Docker 快速安装Jenkins_第17张图片
    运行脚本
    Docker -- 01实战:使用Docker 快速安装Jenkins_第18张图片
//项目名称
def jobName = "pipeline name"

//删除小于95的构建历史
def maxNumber = 100
 
Jenkins.instance.getItemByFullName(jobName).builds.findAll {
  it.number <= maxNumber
}.each {
  it.delete()
}

4.3 xxxx

4.3.2 xxxx

5. Awakening

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

你可能感兴趣的:(Operations,Tool,jenkins,docker)