CICD之Jenkins使用

CICD之Jenkins使用一、Jenkins1、Docker安装Jenkins1.docker安装dockerrun\-uroot\-d\-p8080:8080\-p50000:50000\-vjenkins-data:/var/jenkins_home\-v/var/run/docker.sock:/var/run/docker.sock\jenkinsci/blueocean2.可选镜像jenkins/jenkins:lts#可选镜像jenkin

大家好,又见面了,我是你们的朋友全栈君。

一、Jenkins

1、Docker安装Jenkins

1.docker安装

docker run \
  -u root \
  -d \
  -p 8080:8080 \
  -p 50000:50000 \
  -v jenkins-data:/var/jenkins_home \
  -v /var/run/docker.sock:/var/run/docker.sock \
  jenkinsci/blueocean

2.可选镜像 jenkins/jenkins:lts

#可选镜像 jenkins/jenkins:lts
 
docker service create --name jenkins \
-u root \
-p 8080:8080 -p 50000:50000 \
--mount type=volume,source=jenkins-data,destination=/var/jenkins_home \
--mount type=bind,source=/var/run/docker.sock,destination=/var/run/docker.sock \
--constraint node.role==manager \
jenkinsci/blueocean

#把Jenkins调度manager。jenkins帮我们部署服务,docker service,docker stack
#jenkins是java写。docker方式安装的jenkins。jenkins容器中默认就有java环境啦
#密码
jenkinsci/blueocean比  jenkins/jenkins:lts多了blueocean
blueocean?可视化的CICD。jenkinsfile不会写。通过可视化界面,可视化的创建流水线。
blueocean也可以自己再装。

 
rancher;
参数化构建.....
#插件下载加速
注意:配置国内的镜像
官方下载插件慢 更新下载地址

cd { 
   你的Jenkins工作目录}/updates  #进入更新配置位置
sed -i 's/http:\/\/updates.jenkins-ci.org\/download/https:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g' default.json && sed -i 's/http:\/\/www.google.com/https:\/\/www.baidu.com/g' default.json

这是直接修改的配置文件,如果前边Jenkins用sudo启动的话,那么这里的两个sed前均需要加上sudo
重启Jenkins,安装插件


https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json

JAVA环境是好的,docker命令也是可用

使用jenkins的最佳实战。

  • 1、编写服务的jenkinsfile描述文件。成为Pipeline。流水线文件。解耦(不用我们每次手动配置jenkins的每一步做什么事情,以前都得一步一步自己配置流水线的流程。)
  • 2、jenkins只要拿到这个项目,发现了这个jenkinsfile文件,就能自动化的执行整个流程。

jenkins把项目拉倒jenkins服务器,放到workspace(一般我们的源代码都在这里),开始进行流水线处理。

自动拉取代码

  • 定时轮询
  • 远程触发,github会给我们jenkins(webhook(钩子程序))发送请求{jenkins需要公网能访问}。gitlab。
  • 手动构建(手动立即构建)

编写代码完–>jenkins全部流水执行完—>发送邮件/发短信。

1、安装blueocean插件

2、详细教程可以参加下面的介绍

​ 用 Maven 构建 Java 应用

用 Blue Ocean 创建流水线

2、使用

1、初试pipeline

pipeline { 
   
    agent { 
    docker 'maven:3.3.3' } #代理,
    stages { 
     #阶段。
        stage('build') { 
    #每一个阶段
            steps { 
      #每一个步骤
                sh 'mvn --version'
            }
        }
        stage('test') { 
   
           steps { 
   
              sh 'echo success'
           }
        }
    }
}
#每一个流水线工程最终都在
/var/jenkins_home/workspace/流水线工程名

#agent { docker 'maven:3.3.3' }
整个流水线工程
docker run -t -d -u 0:0 -w /var/jenkins_home/workspace/helloworld --volumes-from cd270036b30eada48bb123338864c1451ee8c7d30997a3b856c6d0174b1be2e2 -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** maven:3.3.3 cat
整个流水线的文件夹是在maven容器内运行的

2、pipeline语法介绍

#1、多步骤。steps{ sh ```多命令 ```}
#2、agent:jenkins接下来的流水线运行在哪个环境
	https://www.jenkins.io/doc/book/pipeline/syntax/#agent
	 agent any:任意环境(立刻就能运行,不挑环境),
	 agent none:顶级整个流水线环境,每个阶段stage,要定义自己的agent环境
	 agent { 
    label 'my-defined-label' }
	 agent { 
    node { 
    label 'labelName' } } ;和agent { 
    label 'labelName' }一个意思,
	 agent { 
   
        docker { 
   
            image 'maven:3-alpine'
            label 'my-defined-label'
            args  '-v /tmp:/tmp'
        }
     } #指定当前流水线或者stage运行在使用docker下载来的这个环境下,用完就删了。如果这些环境有些数据需要永久保存我们就应该挂载出来。
     
#3、环境变量,jenkins整个流水线过程中,我可以把经常要用的一些值,抽取为环境变量,在下面方便引用。
 environment { 
   
        DISABLE_AUTH = 'true'
        DB_ENGINE    = 'sqlite'
    }
 
#4、后置处理
    post { 
   
        always { 
   
            junit 'build/reports/**/*.xml'
        }
        aborted: { 
   
           sh 'echo 666'
        }
    }
always:完成

changed:阶段发生变化执行

fixed:

regression
Only run the steps in post if the current Pipeline’s or stage’s run’s status is failure, unstable, or aborted and the previous run was successful.

aborted:手工停止

failure
Only run the steps in post if the current Pipeline’s or stage’s run has a "failed" status, typically denoted by red in the web UI.

success
Only run the steps in post if the current Pipeline’s or stage’s run has a "success" status, typically denoted by blue or green in the web UI.

unstable
Only run the steps in post if the current Pipeline’s or stage’s run has an "unstable" status, usually caused by test failures, code violations, etc. This is typically denoted by yellow in the web UI.

unsuccessful
Only run the steps in post if the current Pipeline’s or stage’s run has not a "success" status. This is typically denoted in the web UI depending on the status previously mentioned.

cleanup
Run the steps in this post condition after every other post condition has been evaluated, regardless of the Pipeline or stage’s status.

示例:构建失败的时候邮件通知
post { 
   
    failure { 
   
        mail to: 'team@example.com',
             subject: "Failed Pipeline: ${currentBuild.fullDisplayName}",
             body: "Something is wrong with ${env.BUILD_URL}"
    }
}
#5、人工确认
 input "Does the staging environment look ok?"
#6、总结:Pipeline语法
pipeline { 
   
   agent any
   stages { 
   
      stage('第一阶段') { 
   
         //
         steps { 
   
           sh 'echo 111'
           emailext body: '哈哈', subject: '测试', to: '22222@qq.com'
         }
      }
   }
}
#所有不会写的语法,全部参照 流水线工程里面的 语法生成器。
片段生成器--》可以生产step里面不会写的内容
Declarative Directive Generator--》生成哪些指令不会用
post { 
   
  always { 
   
    // One or more steps need to be included within each condition's block. } aborted { // One or more steps need to be included within each condition's block.
  }
  success { 
   
    // One or more steps need to be included within each condition's block. } failure { // One or more steps need to be included within each condition's block.
  }
}

3、pipeline指定镜像源

    agent { 
   
        docker { 
   
            image 'maven:3-alpine'  #docker下载来的maven作为接下来的环境,容器用完就没了
            args '-v /root/.m2:/root/.m2'  #mvn从网上下载jar包。下载来的东西都挂载到linux的/root/.m2
        }
    }
    #默认使用docker的maven环境下载很慢。如何下载快的问题
    #1、改配置文件。进入linux的/root/.m2。修改settings-docker.xml
    #2、指定maven的配置。 
    		2.1:先给项目里面放maven-setting.xml文件,配置好mirror,profile等。
    		2.2:jenkins流水线,mvn -gs maven-setting.xml

4、远程构建访问

#远程的github代码提交了,jenkins流水线自动触发构建。jenkins只要公网能访问就行
#远程构建即使配置了github 的webhook,默认会403.我们应该使用用户进行授权
1、创建一个用户
2、一定随便登陆激活一次
3、生成一个apitoken
http://gitops:11d89e84d79bee5b3e0fdd852c3201697e@121.89.193.184:8080/job/simple-java-maven-app/build?token=helloworld
4、github的webhook地址如下
http://用户id:apiToken@111.229.61.54/job/simple-node-js-react-npm-app/build?token=hellojenkins
每个项目是自己的

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XkR4kxw2-1590243264780)(02%E3%80%81CICD&Jenkins.assets/image-20200510214151984.png)]

远程触发: JENKINS_URL/job/simple-java-maven-app/build?token=TOKEN_NAME 请求即可

5、动态变量参照

http://121.89.193.184:8080/job/icoding-java-custom-jenkins/pipeline-syntax/globals

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/139452.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Linux初学者必知的5个学习网站

    Linux初学者必知的5个学习网站

    2021年9月23日
  • TIMESTAMPDIFF用法

    TIMESTAMPDIFF用法TIMESTAMPDIFF用法:TIMESTAMPDIFF(interval,datetime_expr1,datetime_expr2)返回日期或日期时间表达式datetime_expr1和datetime_expr2the之间的整数差。mysql>SELECTTIMESTAMPDIFF(MONTH,’2009-12-01′,’2009-09-01′);mysql&gt…

    2022年6月10日
  • STUN详解

    STUN详解STUN是一个简单的客户端-服务器协议。客户端发送一个请求到一台服务器,而服务器返回一个响应。有两种类型的请求:绑定请求(通过UDP发送)和共享密钥请求(发送TLS(通过TCP))。共享秘密请求服务器返回一个临时的用户名和密码。此用户名和密码用于在随后的绑定请求和绑定响应,身份验证和消息完整性的目的。STUN客户和STUN服务器之间可能有一个或多个NAT。

    2022年7月17日
  • disk quota exceeded

    磁盘满了之前提过用命令行查看还有一种可视化方法终端输入baobab

    2022年4月14日
  • zynq 挖矿_FPGA芯片矿机

    zynq 挖矿_FPGA芯片矿机比特币是一种虚拟货币,在过去几年里逐渐流行开来。由此,比特币的追随者通过采购或者“挖矿”比特币的形式,投入其部分资产来支持这种货币。挖矿是指使用计算机硬件为比特币网络执行数学计算的过程。提供服务的比特币矿工可以得到一笔报酬(目前是25比特币)以及任何内含的交易费用。由于网络报酬是按照所有矿工完成的计算量进行分配的,故挖矿的竞争异常激烈。比特币挖矿开始是在CPU和GPU这样的低成本硬件上运行的一个软…

    2022年9月29日
  • pycharm激活码永久破解(JetBrains全家桶)

    (pycharm激活码永久破解)2021最新分享一个能用的的激活码出来,希望能帮到需要激活的朋友。目前这个是能用的,但是用的人多了之后也会失效,会不定时更新的,大家持续关注此网站~IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html…

    2022年3月30日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号