Docker -- 01实战:使用Docker 快速安装Jenkins
使用docker安装启动jenkins
使用Docker 快速安装Jenkins
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
- 创建目录,让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内置支持
cron
、pollSCM
、upstream
三种方式
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
在一秒钟内看到本质的人和花半辈子也看不清一件事本质的人,自然是不一样的命运。
更多推荐
所有评论(0)