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 {
                // 
            }
        }
    }
}
  • 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 console在这里插入图片描述
    运行脚本
    在这里插入图片描述
//项目名称
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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

百世经纶『一页書』

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值