系列文章目录
前言
本文我们要讲述:
Jenkins
通过网盘分享的文件:jenkins所需文件
链接: https://pan.baidu.com/s/1djcU9WF6iaGbP_JTZKrU5Q?pwd=m4cz 提取码: m4cz
在下攸攸太上,我在69年6月9日,在电脑上吃了大粪,香的让我跳了起来。
一、Jenkins介绍
1. Jenkins介绍
Jenkins是一个开源的持续集成和持续交付(CI/CD)工具,用于自动化构建、测试和部署软件项目,通过灵活的插件架构和丰富的功能,实现了软件交付流程的自动化。
2. CI/CD介绍
持续集成(Continuous Integration,简称CI)的核心概念是将代码集成到共享存储库中的主干分支中,而不是在开发周期的最后阶段。开发人员在完成代码编写后,将其提交到共享存储库。然后,CI服务器会自动触发构建过程,编译代码并运行自动化测试。如果构建和测试成功,结果将被反馈给开发团队。
持续交付(Continuous Delivery,简称CD)是指将软件的构建、测试和部署过程自动化,以实现快速、可靠地交付软件的能力。它是CI的延伸,旨在进一步优化软件开发和发布的流程。
在持续交付中,开发人员通过版本控制系统将代码提交到共享存储库中。然后,持续交付系统会自动触发构建过程,编译代码、运行自动化测试,并生成可部署的软件包。如果构建和测试成功,系统会自动将软件包部署到指定的环境中,例如测试环境或生产环境。
CI的主要目标是尽早发现和解决问题,以减少集成和发布过程中的风险。通过频繁地集成代码,团队可以更快地发现潜在的问题,并及时修复它们。这有助于提高软件质量、加快开发速度,并促进团队协作。
二、Jenkins安装
1. 上传文件
我们创建/usr/local/jenkins目录(建jenkins文件夹)

2. 安装Jenkins
cd /usr/local/jenkins
rpm -ivh jenkins-2.263-1.1.noarch.rpm
3. 修改启动用户为root
vim /etc/sysconfig/jenkins
在文件中将JENKINS_USER=“root”

4. 配置Java环境
vim /etc/rc.d/init.d/jenkins
在打开的文件中,在光标位置写入如下语句
/usr/local/jdk/jdk1.8.0_231/bin/java

5. 启动Jenkins
systemctl start jenkins
systemctl status jenkins

看到actice(running)代表启动成功
6. 检测目录
ll /var/lib/jenkins

看到很多文件,说明之前的步骤没有错误;
如果没有文件,说明之前的操作有误
7. 登录
通过虚拟机ip:8080访问
进入Jenkins网页,需要输入用户名和密码
用户名为:admin
密码查询语句
cat /var/lib/jenkins/secrets/initialAdminPassword

将密码输入密码栏,点击登录后略作等待
会出现插件安装界面,我们点击右上角的X跳过插件安装环节
8. 修改密码
我们点击右上角小人下的Configure,进入设置用户界面,将密码改成自己的密码后save。
后可以根据用户名和密码登录Jenkins


9. 安装插件
cd /usr/local/jenkens
tar -zxvf jenkins-plugins.tar.gz
ll plugins/ |wc -l
此为安装插件命令,先进入文件夹,后解压文件,最后查看解压后文件有多少个

10. 拷贝插件
cp -a plugins/* /var/lib/jenkins/plugins/
ll /var/lib/jenkins/plugins/ |wc -l
将下载好的插件拷贝到指定文件夹下,查看该目录下的文件个数,应该是191,我之后还做了其他操作,所以多了几个

11. 重启Jenkins
/etc/init.d/jenkins restart
刷新网页后再次登录,可以到Dashboard下的ManageJenkins
三、Git设置
1. 上传文件
将此文件放入/usr/local/git中(新建git文件夹)

2. 解压压缩包
cd /usr/local/git
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. 编译
cd git-2.33.0
make prefix=/usr/local/git all
执行编译命令,需要等很长时间
5. 安装
make prefix=/usr/local/git install
6. 修改环境变量
vim /etc/profile
打开配置文件
将下面的代码复制到配置文件中
export PATH=$PATH:/usr/local/git/bin

7. 检查git
git --version

8. 在Jenkins添加git配置
在首页中打开Credentials

点击下方(global)

点击Add Credentials

写入用户名与密码后,点击ok

点击Update

可以看到ID已经自动生成了

四、Git流水线
1. 创建流水线
首页进入New Item

输入项目名称并选择Pipeline后ok

Description写入项目描述

滚到最底部点击
1、先在Sample Step中选择git:Git
2、创建一个将百度网盘中的240919_DemoNginx项目传到Git上,复制他的地址
https://gitee.com/jinjingyuan/240921foureight.git
3、Branch选择master
4、Credentials选择刚刚创建的用户
5、点击Generate Pipeline Script按钮

复制生成的流水线代码
git credentialsId: 'da6c7934-bfce-4e17-adb9-ec41d8c0fd35', url: 'https://gitee.com/jinjingyuan/240921foureight.git'
将复制的流水线代码用node包裹,放在Pipeline的Script中

以上步骤完毕后,点击Save
2. 测试流水线
在项目中点击Build Now

在运行的流水线中点击Console Output

最后会说SUCCESS

五、Maven配置
1. 上传文件
创建/usr/local/maven文件夹
放入maven压缩包

2. 解压文件
cd /usr/local/maven
tar -zxvf apache-maven-3.3.9-bin.tar.gz

3. 配置环境变量
vim /etc/profile
加入如下代码
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源
vim /usr/local/maven/apache-maven-3.3.9/conf/settings.xml
进入settings.xml文件,找到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文件夹
六、Maven流水线
目的:拉取最新代码,将代码打包好,做成镜像,上传到docker中,启动容器后,外部可以访问。
1. 配置Maven环境变量
Jenkins首页点击Manage Jenkins

点击Configure System

在Global properties下Add三个环境变量
MAVEN HOME
/usr/local/maven/apache-maven-3.3.9
JAVA HOME
/usr/local/idk/jdk1.8.0 231
PATH+EXTRA
$MAVEN HOME/bin

2. 第一段流水线:Git拉去代码
我们在Build History里找到#1,在#1下拉框找到Replay

在Main Script中,用
stage('pull code'){ }
包裹原来的第二行,后Run

结果:


3. 第二段流水线:把下载的项目打包成.jar文件
先去终端运行
/etc/init.d/jenkins restart
类似第一条流水线,我们点击#2的Replay

点击Console Output

复制这部分代码**/var/lib/jenkins/workspace/demo0921**

将Main Script改成如下形式,/var/lib/jenkins/workspace/demo0921放在dir的’'内,Run
node{
stage('compile'){
dir('/var/lib/jenkins/workspace/demo0921'){
sh 'mvn clean install'
}
}
}

检验:
cd /var/lib/jenkins/workspace/demo0921
ll
cd …
ll
四条语句分别执行

4. 第三条流水线:将.jar文件做成Docker镜像
cd demo0921
mvn clean install

ll
cd target
ll
java -jar 240919_DemoNginx-1.0-SNAPSHOT.jar

访问页面显示admin:8888即代表操作成功

执行如下命令
cd /var/lib/jenkins/workspace/demo0921
rm -rf target
/etc/init.d/jenkins restart
sudo usermod -aG docker jenkins
sudo systemctl restart jenkins
/etc/init.d/jenkins restart
Replay的Main Script中
checkout=0
node {
stage('pull code'){
git credentialsId: '0d34702d-9692-4d06-90f9-821e743c9bc7', url: 'https://gitee.com/quanmingzhe/240921maven.git'
}
stage('compile'){
dir('/var/lib/jenkins/workspace/demo0921'){
sh 'mvn clean install'
}
}
stage('make docker container'){
dir('/var/lib/jenkins/workspace/demo0921/target'){
sh "echo FROM openjdk:8 > Dockerfile"
sh "echo ADD 240919_DemoNginx-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 demo0921 ."
}
}
}

5. 第四段流水线:通过镜像创建容器并启动
checkout=0
node {
stage('pull code'){
git credentialsId: '0d34702d-9692-4d06-90f9-821e743c9bc7', url: 'https://gitee.com/quanmingzhe/240921maven.git'
}
stage('compile'){
dir('/var/lib/jenkins/workspace/demo0921'){
sh 'mvn clean install'
}
}
stage('make docker container'){
dir('/var/lib/jenkins/workspace/demo0921/target'){
sh "echo FROM openjdk:8 > Dockerfile"
sh "echo ADD 240919_DemoNginx-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 demo0921 ."
}
}
stage('start'){
sh 'docker run --name d8 -p 8989:8888 -d demo0921'
}
}

6. 第五、六段流水线:删除已存在的容器和镜像
checkout=0
node {
stage('pull code'){
git credentialsId: '0d34702d-9692-4d06-90f9-821e743c9bc7', url: 'https://gitee.com/quanmingzhe/240921maven.git'
}
stage('check docker container'){
script{
checkout=sh(
script: 'docker ps | grep d1',
returnStatus: true
)
}
}
stage('compile'){
dir('/var/lib/jenkins/workspace/demo0921'){
sh 'mvn clean install'
}
}
stage('remove docker container'){
if(checkout==0){
sh 'docker stop d8'
sh 'docker rm d8'
sh 'docker rmi demo0921'
}
}
stage('make docker container'){
dir('/var/lib/jenkins/workspace/dasf/target'){
sh "echo FROM openjdk:8 > Dockerfile"
sh "echo ADD 240919_DemoNginx-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 dasf ."
}
}
stage('start'){
sh 'docker run --name d8 -p 8989:8888 -d demo0921'
}
}
总结
本文讲述了:
Jenkins:自动化构建、测试和部署软件项目
jenkins所需文件
我还在回味大粪圆圆的滋味,让我想起了之前吃过的7坨爱因斯坦的,他的那个颜色非常鲜艳,应该是1001年2月30日他吃了蛋糕的缘故。



3075

被折叠的 条评论
为什么被折叠?



