1、Jenkins
1、什么是Jenkins
Jenkins是一个开源软件项目,是基于Java开辟的一种一连集成工具,用于监控一连重复的工作,旨在提供一个开放易用的软件平台,使软件项目可以进行一连集成。
2、Jenkins的作用
- 一连的软件版本发布/测试项目。
- 监控外部调用实验的工作。(Jenkins有许多的插件,可以用于监控)
3、什么是CI/CD
CI/CD 是一连集成(Continuous Integration,CI)、一连交付(Continuous Delivery,CD)与一连摆设(Continuous Deployment,CD)的简称,注意CD对应了两个名词。
CI/CD是实现敏捷开辟和Devops理念的一种方法,详细而言,CI/CD 可让一连自动化和一连监控贯穿于应用的整个生命周期(从集成和测试,到交付和摆设)。这些关联的事件通常被统称为CI/CD 管道(Pipeline),由开辟(RD)、测试(QA)、运维(OP)团队以敏捷方式协同支持。
一连集成:重点是将开辟者的工作集中到代码堆栈,一样平常情况每天都会有更新,一连集成可以更快的进行集成,更快的得到响应。
一连摆设:是一种更高程度的自动化,可以根据需求进行一连的自动的摆设项目。
4、Jenkins的应用场景
适用于大型项目,且更新比较频繁的。微服务架构的项目多数都会用Jenkins,单体项目相对少许多。
5、Jenkins特性
- 易于安装。有多种安装方式,可以在线安装,也可以下载安装包安装,也可以运行war包。
- 配置简单。Jenkins提供web端的配置方式,安装成功后,所有的配置都可以在web端完成。
- 集成了Email等工具,可以在集成或摆设时关照工作职员。
- 有丰富的插件库。处置惩罚已有的插件,也可以自己开辟插件。
- Jenkins支持分布式。
6、安装Jenkins
1、上传文件
我们采用安装包的方式安装。
统一安装 jenkins-2.263-1.1.noarch.rpm
D
2、安装Jenkins
- rpm -ivh jenkins-2.263-1.1.noarch.rpm
复制代码 【标题办理:】
3、修改启动用户为root
- vim /etc/sysconfig/jenkins
复制代码
4、启动jenkins
- systemctl start jenkins
- systemctl status jenkins
复制代码
启动会报错
5、报错,查抄配置文件java的配置
根据报错信息提示:实验下令 systemctl status jenkins
由此推断没找到java情况,根据提示修改Jenkins的配置文件
- vim /etc/rc.d/init.d/jenkins
复制代码
- ##再次启动jenkins
- systemctl start jenkins
- ##查看jenkins的状态
- systemctl status jenkins
复制代码
6、启动前检察该目录是空的,启动后会生成相应的文件【用来检测前面的操纵是否精确】
【办理标题:】假如输入上面下令后,发现仍旧没有这些文件,关闭虚拟机,重新在登录进来就可以了。
7、登录
访问首页http://虚拟机ip:8080/

- #set git
- export PATH=$PATH:/usr/local/git/bin
- #加载一下配置文件
- source /etc/profile
复制代码
7、查抄git
8、在Jenkins添加git配置
3、写git流水线
初识流水线。从git上拉取代码到虚拟机。
_+
- #上面的操作生成出来的代码:
- node {
- git branch: 'develop', credentialsId: '9a19cd80-bb02-4e8b-b126-f023bdebea7b', url: 'https://gitee.com/wztsl/dz12-demo01.git'
- }
复制代码
4、maven配置
【配置maven,把刚才下载的项目代码,打包发布出来,在宿主机上访问,就算成功。】
1、安装
1、上传压缩包
上传文件apache-maven-3.3.9-bin.tar.gz
2、解压
- tar -zxvf apache-maven-3.3.9-bin.tar.gz
复制代码
3、配置情况变量
- #第一个命令,编辑/etc/profile
- vim /etc/profile
- #set maven
- MAVEN_HOME=/usr/local/maven/apache-maven-3.3.9
- PATH=${MAVEN_HOME}/bin:${PATH}
- export PATH
复制代码 4、加载情况变量
5、测试maven安装是否成功
6、更换maven源
- #打开setting文件,修改中央仓库为阿里的,不然速度太慢
- vim /usr/local/maven/apache-maven-3.3.9/conf/settings.xml
- # 找到<mirrors></mirrors>标签对,添加以下内容
- <mirror>
- <id>alimaven</id>
- <name>aliyun maven</name>
- <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
- <mirrorOf>central</mirrorOf>
- <releases>
- <enabled>true</enabled>
- <updatePolicy>always</updatePolicy>
- </releases>
- <snapshots>
- <enabled>true</enabled>
- <updatePolicy>always</updatePolicy>
- </snapshots>
- </mirror>
- # 指定下载源位置
- <localRepository>/usr/local/maven/apache-maven-3.3.9/repository</localRepository>
复制代码 【注意:需要自己创建/usr/local/maven/apache-maven-3.3.9/repository目录】
2、Jenkins配置Maven
配置3个情况变量:JAVA_HOME、MAVEN_HOME
PATH+EXTRA $MAVEN_HOME/bin
5、写maven流水线
目标:拉取最新代码,将代码打包好,做成镜像,上传到docker中,然后启动容器,外部可以访问。
- 通过git拉取代码
- 用Dockerfile查抄是否存在容器和镜像,假如存在则删除
- 编译,打包
- 创建docker镜像
- 启动docker容器
第一段流水线:git拉取代码
【一步一步测试流水线代码:】
- node {
- stage('pull code'){
- git credentialsId: '8bea9def-ba4d-433c-a4b3-14c26be75f1b', url: 'https://gitee.com/mayang3366/jenkins-demo1.git'
- }
- }
复制代码 【然后一步一步run测试结果:】
2.第二段流水线:将下载的项目进行打包
- node {
- stage('compile'){
- #jenkinsDemo1的名字一定要是虚拟机里 /var/lib/jenkins/workspace 路径下存在的。该流水线的目的在于打包该项目。
- dir('/var/lib/jenkins/workspace/jenkinsDemo1'){
- sh 'mvn clean install'
- }
- }
- }
复制代码
【以上操纵,完成第二段流水线就可以实现】
【注意:停掉服务后,删除掉workspace目录下的该项目,希望通过流水线来实现结果。】
【流水线代码如下:】
- checkout=0
- node {
- stage('pull code'){
- git credentialsId: '8bea9def-ba4d-433c-a4b3-14c26be75f1b', url: 'https://gitee.com/mayang3366/jenkins-demo1.git'
- }
- stage('compile'){
- dir('/var/lib/jenkins/workspace/jenkinsDemo1'){
- sh 'mvn clean install'
- }
- }
- stage('make docker container'){
- dir('/var/lib/jenkins/workspace/jenkinsDemo1/target'){
- sh "echo FROM openjdk:8 > Dockerfile"
- sh "echo ADD testNginx-1.0-SNAPSHOT.jar /app.jar >> Dockerfile"
- sh "echo RUN bash -c '"'touch /app.jar'"' >> Dockerfile"
- sh "echo ENTRYPOINT ['"'java'"','"'-jar'"','"'/app.jar'"'] >> Dockerfile"
- sh "echo RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime >> Dockerfile"
- sh "docker build -t jenkinsdemo1 ."
- }
- }
- }
- ## 注意注意:docker build -t jenkinsdemo1 . 命令中的镜像名不能有大写字母。
复制代码
- #创建容器并运行,d1是容器名,
- docker run --name d1 -p 8888:8888 -d jenkinsdemo1
复制代码
4.第四段流水线:通过镜像创建容器并启动
- checkout=0
- node {
- stage('pull code'){
- git credentialsId: '8bea9def-ba4d-433c-a4b3-14c26be75f1b', url: 'https://gitee.com/mayang3366/jenkins-demo1.git'
- }
- stage('check docker container'){
- if(fileExists('/var/lib/jenkins/workspace/jenkinsDemo1/target/Dockerfile')){
- sh 'docker stop d1'
- sh 'docker rm d1'
- sh 'docker rmi jenkinsdemo1'
- }
- }
- stage('compile'){
- dir('/var/lib/jenkins/workspace/jenkinsDemo1'){
- sh 'mvn clean install'
- }
- }
- stage('make docker container'){
- dir('/var/lib/jenkins/workspace/jenkinsDemo1/target'){
- sh "echo FROM openjdk:8 > Dockerfile"
- sh "echo ADD testNginx-1.0-SNAPSHOT.jar /app.jar >> Dockerfile"
- sh "echo RUN bash -c '"'touch /app.jar'"' >> Dockerfile"
- sh "echo ENTRYPOINT ['"'java'"','"'-jar'"','"'/app.jar'"'] >> Dockerfile"
- sh "echo RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime >> Dockerfile"
- sh "docker build -t jenkinsdemo1 ."
- }
- }
- stage('start'){
- sh 'docker run --name d1 -p 8888:8888 -d jenkinsdemo1'
- }
- }
- 注意:/var/lib/jenkins/workspace/jenkinsDemo1 “jenkinsDemo1”是项目名,可以有大写字母
- docker rmi jenkinsdemo1 jenkinsdemo1 是镜像名,不可以有大写字母
复制代码
node:节点,Jenkins支持分布式,可以给节点命名,master是主节点,不要修改。
stage:声明步骤
fileExists:判断文件是否存在
dir:进入某个目录
5.第五段流水线:删除已存在的容器和镜像
checkout是用于判断是否存在镜像和容器的标识,上面的流水线中并未操纵它,不声明也不会报错。但是,假如在mvn install时报错,会导致流水线不继续运行,就不会生成Dockerfile文件,那么再次实验流水线时,照旧会由于已经有了d1这个容器而启动报错。
研究用什么办法办理这个标题?
1.手动操纵办理方式

2.流水线代码办理方式
- checkout=0
- node {
- stage('pull code'){
- git credentialsId: '8bea9def-ba4d-433c-a4b3-14c26be75f1b', url: 'https://gitee.com/mayang3366/jenkins-demo1.git'
- }
- stage('check docker container'){
- script{
- checkout=sh(
- script: 'docker ps | grep d1',
- returnStatus: true
- )
- }
- }
- stage('compile'){
- dir('/var/lib/jenkins/workspace/jenkinsDemo1'){
- sh 'mvn clean install'
- }
- }
- stage('remove docker container'){
- if(checkout==0){
- sh 'docker stop d1'
- sh 'docker rm d1'
- sh 'docker rmi jenkinsdemo1'
- }
- }
- stage('make docker container'){
- dir('/var/lib/jenkins/workspace/jenkinsDemo1/target'){
- sh "echo FROM openjdk:8 > Dockerfile"
- sh "echo ADD testNginx-1.0-SNAPSHOT.jar /app.jar >> Dockerfile"
- sh "echo RUN bash -c '"'touch /app.jar'"' >> Dockerfile"
- sh "echo ENTRYPOINT ['"'java'"','"'-jar'"','"'/app.jar'"'] >> Dockerfile"
- sh "echo RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime >> Dockerfile"
- sh "docker build -t jenkinsdemo1 ."
- }
- }
- stage('start'){
- sh 'docker run --name d1 -p 8888:8888 -d jenkinsdemo1'
- }
- }
复制代码 说明:
git拉起代码:第一步
打包代码:第三步
把打包后的代码做成镜像:第五步
通过镜像创建容器并运行:第六步
查抄是否有容器和镜像存在:第二步
删除已存在的容器和镜像:第四步
- dir('/var/lib/jenkins/workspace/jenkinsDemo1/target'){
- sh "echo FROM openjdk:8 > Dockerfile"
- sh "echo ADD testNginx-1.0-SNAPSHOT.jar /app.jar >> Dockerfile"
- sh "echo RUN bash -c '"'touch /app.jar'"' >> Dockerfile"
- sh "echo ENTRYPOINT ['"'java'"','"'-jar'"','"'/app.jar'"'] >> Dockerfile"
- sh "echo RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime >> Dockerfile"
- sh "docker build -t jenkinsdemo1 ."
- }
- }
- stage('start'){
- sh 'docker run --name d1 -p 8888:8888 -d jenkinsdemo1'
- }
复制代码 }
- 说明:
- git拉起代码:第一步
- 打包代码:第三步
- 把打包后的代码做成镜像:第五步
- 通过镜像创建容器并运行:第六步
- 检查是否有容器和镜像存在:第二步
- 删除已存在的容器和镜像:第四步
- 
复制代码 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |