Jenkins

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

 

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、启动前查看该目录是空的,启动后会生成相应的文件

 ll /var/lib/jenkins

 

 【解决问题:】如果输入上面命令后,发现仍然没有这些文件,关闭虚拟机,重新在登录进来就可以了。

7、登录

访问首页http://宿主机:8080/

 

 #根据上面红色地址连接,查找对应的登录密码
cat /var/lib/jenkins/secrets/initialAdminPassword

 

 

8、跳过插件安装

 

 

 

9、修改密码

 

密码统一修改成123456

默认用户名是:admin

 

 

10、安装插件

1、查看已安装插件

 

 

【目前一个插件都没有!】  

 

2、解压文件

 

 压缩包内共有191个插件。

 

#执行第一个命令:
tar -zxvf jenkins-plugins.tar.gz

#查看解压后一共有多少个文件:
ll plugins/ |wc -l

 

 

3、拷贝插件

验证拷贝后共有191个插件。

 

#拷贝文件到/var/lib/jenkins/plugins/
cp -a plugins/* /var/lib/jenkins/plugins/

#查看该目录下一共有多少个文件:
ll /var/lib/jenkins/plugins/ |wc -l

 

4、重启Jenkins

 /etc/init.d/jenkins restart

 

 【刷新页面:再次进行登录!admin 123456】

 

2、Git设置

1、上传文件

将git压缩包上传到服务器上,git-2.33.0.tar.gz

 

 

2、解压压缩包

 tar -zxvf git-2.33.0.tar.gz

 

 

3、安装所需依赖

yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel gcc perl-ExtUtils-MakeMaker 

 

 【输入 y 】

4、编译

进入解压后的目录,执行make命令。

 make prefix=/usr/local/git all

 

 

 

5、安装

make prefix=/usr/local/git install 

 

 

6、修改环境变量

#打开配置文件
vim /etc/profile

(将下面一行的代码,复制粘贴到上面的配置文件里)
#set git
export PATH=$PATH:/usr/local/git/bin

#加载一下配置文件
source /etc/profile
 

 

 

 

7、检查git

git --version 

 

 

8、在Jenkins添加git配置

【第一步:】

 

【第二步:】  

 

【第三步:设置git账号和密码 13134478806 & mayang 。。。14】  

 

【第四步:设置完成】  

 

【第五步:】  

 

【第六步:自动帮忙生成id】  

 

3、写git流水线

初识流水线。从git上拉取代码到虚拟机。

【第一步:创建一个新的流水线】

 

【第二步:定义名字】  

 

点击下发ok!

【第三步:添加代码描述】

 

 【第四步:编写流水线代码,如果忘记了,参照第五步】

 

 【第五步:自动生成流水线代码】

 

#上面的操作生成出来的代码:
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、加载环境变量

 source /etc/profile

 

5、测试maven安装是否成功

 mvn -v

 

 

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

【第一步:】

 

【第二步:】  

 

 【第三步:点击三下Add】

 

 【第四步:配置环境变量】

 

配置3个环境变量:JAVA_HOME、MAVEN_HOME

PATH+EXTRA $MAVEN_HOME/bin

 

5、写maven流水线

目的:拉取最新代码,将代码打包好,做成镜像,上传到docker中,然后启动容器,外部可以访问。

  • 通过git拉取代码

  • 用Dockerfile检查是否存在容器和镜像,如果存在则删除

  • 编译

  • 创建docker镜像

  • 启动docker容器

    第一段流水线:

【一步一步测试流水线代码:】

 

    stage('pull code'){
        git credentialsId: '0469dbae-0e77-47b5-b507-cd1e0f2a38f5', url: 'https://gitee.com/mayang3366/dz9b-demo1.git'
    } 

 【然后一步一步run测试结果:】

 

2.第二段流水线:

     stage('compile'){
        dir('/var/lib/jenkins/workspace/hw_demo01'){
            sh 'mvn clean install'
        }
    }

 

 

 

3.第三段流水线:

 

 

 

 

【注意:停掉服务后,删除掉项目,希望通过流水线来实现效果。】  

 

 

 

 

4.第四段流水线:

 

 

5.第五段流水线:

 checkout=0
node {
    stage('pull code'){
        git branch: 'develop', credentialsId: '9a19cd80-bb02-4e8b-b126-f023bdebea7b', url: 'https://gitee.com/wztsl/dz12-demo01.git'
    }
    #1段:我的代码:---
    stage('pull code'){
        git credentialsId: '0469dbae-0e77-47b5-b507-cd1e0f2a38f5', url: 'https://gitee.com/mayang3366/dz9b-demo1.git'
    }
    #end---
    stage('check docker container'){
        if(fileExists('/var/lib/jenkins/workspace/hw_demo01/target/Dockerfile')){
            sh 'docker stop d1'
            sh 'docker rm d1'
            sh 'docker rmi demo01'
        }
    }
    #2段
    stage('compile'){
        dir('/var/lib/jenkins/workspace/hw_demo01'){
            sh 'mvn clean install'
        }
    }
    #3段
    stage('make docker container'){
        dir('/var/lib/jenkins/workspace/hw_demo01/target'){
            sh "echo FROM openjdk:8 > Dockerfile"
            sh "echo ADD demo-helloworld-0.0.1-SNAPSHOT-exec.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 demo01 ."
        }
    }
    #4段
    stage('start'){
        sh 'docker run --name d1 -p 99:99 -d demo01'
    }
}

 

 

 

node:节点,Jenkins支持分布式,可以给节点命名,master是主节点,不要修改。

stage:声明步骤

fileExists:判断文件是否存在

dir:进入某个目录

其它说明;

checkout是用于判断是否存在镜像和容器的标识,上面的流水线中并未操作它,不声明也不会报错。但是,如果在mvn install时报错,会导致流水线不继续运行,就不会生成Dockerfile文件,那么再次执行流水线时,还是会因为已经有了d1这个容器而启动报错。

研究用什么办法解决这个问题?

 

6.第六段流水线:

 

 

7.【直接操作即可】:

【1.写流水线代码(粘入代码时,删除注释)】

 

checkout=0
node {

   #第一步:填入信息自动生成拉取git的代码
    stage('pull code'){
        git credentialsId: '0469dbae-0e77-47b5-b507-cd1e0f2a38f5', url: 'https://gitee.com/mayang3366/nginx-demo.git'
    }
    
   #第二步:修改nginx-demo值为自己的git项目名。
    stage('check docker container'){
        if(fileExists('/var/lib/jenkins/workspace/nginx-demo/target/Dockerfile')){
            sh 'docker stop d1'
            sh 'docker rm d1'
            sh 'docker rmi demo01'
        }
    }
    
    #第三步:修改nginx-demo值为自己的git项目名。
    stage('compile'){
        dir('/var/lib/jenkins/workspace/nginx-demo'){
            sh 'mvn clean install'
        }
    }
    
    #第四步:修改nginx-demo值为自己的git项目名。
   #同时修改nginxspringboot-1.0-SNAPSHOT.jar为本地idea打包后的打包项目名
    stage('make docker container'){
        dir('/var/lib/jenkins/workspace/nginx-demo/target'){
            sh "echo FROM openjdk:8 > Dockerfile"
            sh "echo ADD nginxspringboot-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 demo01 ."
        }
    }
    
    #第五步:设置端口号为idea打包项目中规定的端口号。
    stage('start'){
        sh 'docker run --name d1 -p 8888:8888 -d demo01'
    }
}

 【2.测试流水线代码运行结果】

 

【3.打开宿主机访问】  

 

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值