环境

使用虚拟机搭建环境,centos7.8系统

主机说明必要软件192.168.8.110jenkins服务节点jekins,jdk8,tomcat9192.168.8.101harbor服务,docker管理镜像harbor192.168.8.111jenkins工作节点maven,jdk8,git,docker

jenkins安装

rpm方式安装

1.安装JDK8

yum install java-1.8.0-openjdk* -y

2.yum方式安装

wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo

rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key

yum install jenkins

3.启动Jenkins服务

systemctl start jenkins

systemctl enable jenkins

4.打开浏览器访问

http://192.168.8.110:8080

war方式安装 jenkins官方下载地址 选择合适的版本,注意各个版本依赖的jdk版本,如果jdk版本不符合会导致插件安装失败 下载好war包后使用tomcat部署即可

在图片给出的目录中查看登陆密码

cat /var/lib/jenkins/secrets/initialAdminPassword

登陆成功后点击“选择插件安装”,然后就是漫长的安装插件。。。。。。。。

agent工作节点配置

1.docker安装(TODO) 2.jdk8安装

下载地址:

https://www.oracle.com/webapps/redirect/signon?nexturl=https://download.oracle.com/otn/java/jdk/8u261-

b12/a4634525489241b9a9e1aa73d9e118e6/jdk-8u261-linux-x64.tar.gz

tar -zxf jdk-8u261-linux-x64.tar.gz

mv jdk1.8.0_261/ /opt/jdk1.8

3.git 安装

官网下载速度非常慢。国内加速地址大部分为windows版本。登录https://github.com/git/git/releases查看git的最新版。不要下载带有-rc的,因为它代表了一个候选发布版本。

https://www.kernel.org/pub/software/scm/git/git-2.28.0.tar.gz

1.安装依赖环境:

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

2.删除yum方式安装的git:

添加依赖时自动yum安装了git1.8版本。需要先移除git1.8版本。

yum -y remove git

tar -zxvf git-2.28.0.tar.gz

mv git-2.28.0 /opt/git2.28

./configure --prefix=/opt/git2.28

cd /opt/git2.28/

make && make install

4.maven安装

下载地址:

https://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.6.3/binaries/apachemaven-3.6.3-bin.tar.gz

tar -zxf apache-maven-3.6.3-bin.tar.gz.gz

mv apache-maven-3.6.3 maven

创建本地仓库:

mkdir -p /data/maven/repository

设置本地仓库目录

/data/maven/repository

配置阿里云仓库地址

nexus-aliyun

*

Nexus aliyun

http://maven.aliyun.com/nexus/content/groups/public

maven工程配置jdk8编译

jdk-1.8

true

1.8

1.8

1.8

1.8

5.统一配置

vi /etc/profile

加入以下内容

export PATH

export JAVA_HOME=/opt/jdk1.8

export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH

export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib

export MAVEN_HOME=/opt/maven

export PATH=$MAVEN_HOME/bin:$PATH

export PATH=$PATH:/opt/git2.28/bin

source /etc/profile

检测环境

java -version

mvn -v

git --version

配置软连接

ln -s /opt/jdk1.8/bin/java /usr/bin/

ln -s /opt/mvn/bin/mvn /usr/bin/

ln -s /opt/git2.28/bin/git /usr/bin

ln -s /opt/maven/bin/mvn /usr/local/bin/ 这里解决通过jenkins在agent节点上执行mvn命令,mvn无法找到的问题

jenkins agent节点配置

jenkins连接agent方式有两种:java方式和ssh方式,java方式就是在agent节点部署个jar包

ssh方式连接agent

1.master节点免密登陆agent节点

在服务节点生成秘钥

ssh-keygen -t rsa

复制公钥(-p 端口号来指定ssh端口号)

ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.198.154

免密登录测试

ssh 192.168.8.111

2.配置jenkins凭据 位置:jenkins工作台->系统管理->凭据管理(manager credentials) 类型:SSH Username with private key

私钥信息获取:

在生成秘钥的服务节点执行命令,将打印的私钥信息拷贝

cat .ssh/id_rsa

创建agent节点

位置:jenkins工作台->系统管理->节点管理(Manage nodes and clouds) 注意标签:稍后选择执行节点会用到配置的标签,通过标签选择

新建构建任务

脚本:

pipeline {

agent {

label 'agent-111'

}

stages {

stage('环境监测') {

steps {

echo '环境监测'

sh '''java -version

mvn -v

git --version

docker -v'''

}

}

}

}

piepline脚本是groovy语法,可以点击上面蓝色字体“流水线语法”,进流水线语法工具来生成

选择自己需要的操作,例如从svn拉取代码,执行shell脚本等,例如上述环境监测语法,选择sh,将命令粘贴到命令输入框,点击生成流水线脚本即可,然后将生成的脚本内容粘贴到脚本的steges->stege->steps中

构建任务

选择刚创建的agent-test任务,点击“Build Now ->构建计划” 点击console output进入控制台,可以看到流水线脚执行的结果

实战

创建项目jenkinsdemo 使用jenkins完成以下构建步骤:

环境检测:检测agent-111节点基础软件运行情况拉取代码:从git服务器拉取项目编译构建:agent-111执行maven命令;使用jib插件声明周期push镜像至harbor-101服务 器删除容器:删agent-111服务器jenkinsdemo容器删除镜像:删除agent-111服务器jenkinsdemo镜像登录harbor:docker登录harbor-101服务器拉取镜像:拉取jenkinsdemo镜像运行容器:运行jenkinsdemo容器

创建项目

创建一个springboot项目jenkinsdemo 写一个简单的helloController

在pom文件中引入jib插件,jib是google出品的用来做容器镜像构建的类库,无需编写Dockerfile,无需深入学习dockerfile,通过maven插件为java用构建docker镜像,此类插件还有dockerfile-maven-plugin,docker-maven-plugin等,这两款插件都需要自己编写Dockerfile,这里选择jib插件最重要的原因是镜像构建的速度,docker-maven-plugin每次构建都是全量构建,因此速度较慢,jib构建只是从新构建修改的内容,因此构建速度快。jib github官网地址:https://github.com/GoogleContainerTools/jib

jib的pom配置

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">

4.0.0

org.springframework.boot

spring-boot-starter-parent

2.7.12

com.demo

jenkinsdemo

1.0

jenkinsdemo

Demo project for Spring Boot

1.8

org.springframework.boot

spring-boot-starter-web

org.springframework.boot

spring-boot-starter-test

test

${project.name}

org.springframework.boot

spring-boot-maven-plugin

com.google.cloud.tools

jib-maven-plugin

2.5.2

192.168.8.101:5000/dan/openjdk:8-alpine3.9

admin

Harbor12345

192.168.8.101:5000/dan/${project.name}:${project.version}

admin

Harbor12345

-Xms512m

Asia/Shanghai

8080

true

package

build

在项目根目录下新建文件,名称为Jenkinsfile,用来存放流水线脚本,后面会配置从git上拉取脚本,而不是在jenkins上编写。 将项目上传到git上,自己搭建的gitlab或者gitee都可以

创建git凭据

新建一个凭据,用来登陆git服务器,拉取代码

创建任务 jenkinsdemo

选择流水线

这里repository url下有红色保存,原因是在jenkins服务器上没有安装git才会导致报错,安装git即可

创建流水线任务,脚本来源配置为从git上来取,也就上面创建项目中的Jenkinsfile。

编写流水线脚本 Jenkinsfile

pipeline{

agent {

label 'agent-222' //这里通过标签选择执行任务的agent节点

}

stages{

stage('环境检测'){

steps{

echo '环境监测'

}

}

stage('拉取代码'){

steps{

echo '拉取代码'

}

}

stage('编译构建'){

steps{

echo '编译构建'

}

}

stage('删除容器'){

steps{

echo '删除容器'

}

}

stage('删除镜像'){

steps{

echo '删除镜像'

}

}

stage('登陆harbor'){

steps{

echo '登陆harbor'

}

}

stage('拉取容器'){

steps{

echo '拉取容器'

}

}

stage('运行容器'){

steps{

echo '运行容器'

}

}

}

}

下面对脚本内容进行填充 使用jenkins提供的流水线语法工具 1.环境检查

java -version

mvn -v

git --version

docker -v

生成流水线语法方式同上,将生成的脚本内容粘贴到环境监测阶段 2.拉取代码 从git中拉取代码 将生成的脚本拷贝到拉取代码阶段 3.编译构建 mvn clean package -Dmaven.test.skip=true jib:build -DsendCredentialsOverHttp=true maven构建命令,并使用jib插件, -DsendCredentialsOverHttp=true配置是使用http从harbor仓库拉取镜像,默认必须使用https。 同样是生成shl脚本,同1 4.删除容器

#删除容器shell脚本,先检查容器是否存在,如果存在先停止,然后删除容器

echo '检查容器是否存在'

containerid=`docker ps -a | grep -w jenkinsdemo | awk '{print $1}'`

if [ "$containerid" != "" ];then

echo ‘容器存在,停止容器’

docker stop $containerid

echo ‘删除容器’

docker rm $containerid

fi

同样是生成shl脚本,同1 5.删除镜像

#删除镜像shell脚本

echo '检查镜像是否存在'

imageid=`docker images | grep jenkinsdemo | awk '{print $3}'`

if [ "$imageid" != "" ];then

echo '删除镜像'

docker rmi -f $imageid

fi

同样是生成sh脚本,同1 6.登陆harbor

docker login -u admin -p Harbor12345 192.168.8.101:5000

同样是生成sh脚本,同1 7.拉取容器

docker pull 192.168.8.101:5000/dan/jenkinsdemo:1.0

同样是生成sh脚本,同1 8.运行容器

docker run -itd --name jenkinsdemo -p 8080:8080 192.168.8.101:5000/dan/jenkinsdemo:1.0

同样是生成sh脚本,同1

完整脚本内容:

pipeline{

agent {

label 'agent-111'

}

stages{

stage('环境检测'){

steps{

echo '环境监测'

sh '''java -version

mvn -v

git --version

docker -v'''

}

}

stage('拉取代码'){

steps{

echo '拉取代码'

//略

}

}

stage('编译构建'){

steps{

echo '编译构建'

sh 'mvn clean package -Dmaven.test.skip=true jib:build -DsendCredentialsOverHttp=true'

}

}

stage('删除容器'){

steps{

echo '删除容器'

sh '''echo \'检查容器是否存在\'

containerid=`docker ps -a | grep -w jenkinsdemo | awk \'{print $1}\'`

if [ "$containerid" != "" ];then

echo ‘容器存在,停止容器’

docker stop $containerid

echo ‘删除容器’

docker rm $containerid

fi'''

}

}

stage('删除镜像'){

steps{

echo '删除镜像'

sh '''echo \'检查镜像是否存在\'

imageid=`docker images | grep jenkinsdemo | awk \'{print $3}\'`

if [ "$imageid" != "" ];then

echo \'删除镜像\'

docker rmi -f $imageid

fi'''

}

}

stage('登陆harbor'){

steps{

echo '登陆harbor'

sh 'docker login -u admin -p Harbor12345 192.168.8.101:5000'

}

}

stage('拉取容器'){

steps{

echo '拉取容器'

sh 'docker pull 192.168.8.101:5000/dan/jenkinsdemo:1.0'

}

}

stage('运行容器'){

steps{

echo '运行容器'

sh 'docker run -itd --name jenkinsdemo -p 8080:8080 192.168.8.101:5000/dan/jenkinsdemo:1.0'

}

}

}

}

脚本完成后push到git

构建任务

选择之前创建的jenkinsdemo任务,点击构建 构建成功后浏览器访问:http://192.168.8.111:8080

可以反复构建任务,检查脚本是否能正确执行

---------------------------------------------over--------------------------------------------------------

文章来源

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: