jenkins结合docker实现自动部署

这篇具有很好参考价值的文章主要介绍了jenkins结合docker实现自动部署。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

环境

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

主机 说明 必要软件
192.168.8.110 jenkins服务节点 jekins,jdk8,tomcat9
192.168.8.101 harbor服务,docker管理镜像 harbor
192.168.8.111 jenkins工作节点 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版本不符合会导致插件安装失败
jenkins自动化部署docker,jenkins,docker,git
下载好war包后使用tomcat部署即可
jenkins自动化部署docker,jenkins,docker,git

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

cat /var/lib/jenkins/secrets/initialAdminPassword

jenkins自动化部署docker,jenkins,docker,git
登陆成功后点击“选择插件安装”,然后就是漫长的安装插件。。。。。。。。
jenkins自动化部署docker,jenkins,docker,git

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
设置本地仓库目录
<localRepository>/data/maven/repository</localRepository>

配置阿里云仓库地址
<mirror>
	<id>nexus-aliyun</id>
	<mirrorOf>*</mirrorOf>
	<name>Nexus aliyun</name>
	<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>

maven工程配置jdk8编译
<profile>
	<id>jdk-1.8</id>
	<activation>
	<activeByDefault>true</activeByDefault>
	<jdk>1.8</jdk>
	</activation>
	<properties>
	<maven.compiler.source>1.8</maven.compiler.source>
	<maven.compiler.target>1.8</maven.compiler.target>
	<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
	</properties>
</profile>

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
jenkins自动化部署docker,jenkins,docker,git

jenkins自动化部署docker,jenkins,docker,git
私钥信息获取:

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

创建agent节点

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

新建构建任务

jenkins自动化部署docker,jenkins,docker,git
jenkins自动化部署docker,jenkins,docker,git
jenkins自动化部署docker,jenkins,docker,git
脚本:

pipeline {
    agent {
        label 'agent-111'
    }
    stages {
        stage('环境监测') {
            steps {
             echo '环境监测'
            sh '''java -version
            mvn -v
            git --version
            docker -v'''
            }
        }
    }
}

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

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

构建任务

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

实战

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

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

创建项目

创建一个springboot项目jenkinsdemo
jenkins自动化部署docker,jenkins,docker,git
jenkins自动化部署docker,jenkins,docker,git
jenkins自动化部署docker,jenkins,docker,git
写一个简单的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配置

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.12</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.demo</groupId>
    <artifactId>jenkinsdemo</artifactId>
    <version>1.0</version>
    <name>jenkinsdemo</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <finalName>${project.name}</finalName>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>com.google.cloud.tools</groupId>
                <artifactId>jib-maven-plugin</artifactId>
                <version>2.5.2</version>
                <configuration>
                    <!--from标签配置镜像的基础镜像,相当于Dockerfile的FROM-->
                    <from>
                        <!--使用harbor上的jdk8基础镜像-->
                        <image>192.168.8.101:5000/dan/openjdk:8-alpine3.9</image>
                        <!--harbor服务器登陆信息-->
                        <auth>
                            <username>admin</username>
                            <password>Harbor12345</password>
                        </auth>
                    </from>
                    <to>
                        <!--镜像名称和tag,使用了mvn内置变量${project.version},表示当前工程的version-->
                        <image>192.168.8.101:5000/dan/${project.name}:${project.version}</image>
                        <auth>
                            <username>admin</username>
                            <password>Harbor12345</password>
                        </auth>
                    </to>
                    <container>
                        <!--配置jvm参数-->
                        <jvmFlags>
                            <jvmFlag>-Xms512m</jvmFlag>
                        </jvmFlags>
                        <!--配置使用的时区-->
                        <environment>
                            <TZ>Asia/Shanghai</TZ>
                        </environment>
                        <!--要暴露的端口-->
                        <ports>
                            <port>8080</port>
                        </ports>
                    </container>
                    <!--可以进行HTTP-->
                    <allowInsecureRegistries>true</allowInsecureRegistries>
                </configuration>
                <!--将jib与mvn构建的生命周期绑定 mvn package自动构造镜像-->
                <!--打包及推送命令 mvn -DsendCredentialsOverHttp=true clean
                package-->
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>build</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

</project>


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

创建git凭据

新建一个凭据,用来登陆git服务器,拉取代码
jenkins自动化部署docker,jenkins,docker,git

创建任务 jenkinsdemo

选择流水线
jenkins自动化部署docker,jenkins,docker,git

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

jenkins自动化部署docker,jenkins,docker,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中拉取代码
jenkins自动化部署docker,jenkins,docker,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
jenkins自动化部署docker,jenkins,docker,git

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

---------------------------------------------over--------------------------------------------------------文章来源地址https://www.toymoban.com/news/detail-737576.html

到了这里,关于jenkins结合docker实现自动部署的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Jenkins结合gitee自动化部署SpringBoot项目

    安装教程 Gitee Plugin 源码管理 填写源码地址 注意: 请确保genkins所在的服务器有权限git拉取远程仓库代码,如果不可以请参考ssh配置 centos 配置ssh拉取远程git代码 源码管理 构建触发器 1.勾选Gitee webhook 触发构建 2.生成webhook密码 构建触发器   3.在gitee项目管理中配置webhook git

    2024年02月08日
    浏览(360)
  • Jenkins+Docker 实现一键自动化部署项目!步骤齐全,少走坑路

    大家好,我是互联网架构师! 本文章实现最简单全面的Jenkins+docker+springboot 一键自动部署项目,步骤齐全,少走坑路。 环境 :centos7+git(gitee) 简述实现步骤:在docker安装jenkins,配置jenkins基本信息,利用Dockerfile和shell脚本实现项目自动拉取打包并运行。 docker 安装社区版本CE

    2024年02月09日
    浏览(35)
  • Jenkins自动化部署docker

    准备测试服务器docker环境 准备jdk环境 将上传jar包修改为 app.jar 对外暴露 1000 端口 启动jar 制作镜像 将上传的镜像先测试,我的jar包叫 sky-server-1.0-SNAPSHOT.jar 先将这个做成镜像 创建容器 将之前做的镜像运行 环境准备 前提需要Jenkins和Gitea这个要提前准备好。 1、配置Jenkins的M

    2024年01月17日
    浏览(45)
  • .NET Core部署到linux(CentOS)最全解决方案,入魔篇(使用Docker+Jenkins实现持续集成、自动化部署)

    通过前面三篇: .NET Core部署到linux(CentOS)最全解决方案,常规篇 .NET Core部署到linux(CentOS)最全解决方案,进阶篇(Supervisor+Nginx) .NET Core部署到linux(CentOS)最全解决方案,高阶篇(Docker+Nginx 或 Jexus) 通过前面三篇文章的介绍,我们已经对.net core多方案部署到linux下有了非常全面的认识

    2024年02月02日
    浏览(35)
  • docker+jenkins+dockerfile 自动化部署发布

    提示: 文章如有错误的地方请指出,以免误人子弟! 提示:以下是本篇文章正文内容,下面案例可供参考 下载镜像 下载maven maven 官网下载地址 或者使用命令下载 通过软件放到 linux 的目录下,这边放到Home目录下 解压 进到解压的目录下,创建项目的本地仓库文件夹并赋予读

    2024年02月05日
    浏览(32)
  • docker+jenkins自动化部署springboot项目

    阿里云服务器1核2GB java 1.8.0._371 maven apache-maven3.8.8 git 1.8.3.1 docker和jenkins在一台服务器上,环境的配置,对于java和maven可以自己下载对应tar包进行配置,记得配置环境,也可以使用yum进行安装。记得配置/etc/profile后source一下: source /etc/profile Maven记得修改镜像!!! 在本地创建

    2024年02月03日
    浏览(34)
  • Jenkins+Docker+Gitee搭建自动化部署平台

    目录 服务器准备 Docker安装 yum 包更新到最新 设置yum源 安装docker 启动和开机启动 验证安装是否成功 Jenkins安装 拉取镜像 创建映射目录 运行镜像 运行出错 修正权限 重新运行镜像 新建安全组,放通8080端口 激活Jenkins Jenkins插件 Jenkins全局工具配置 自动构建Springboot项目 准备好

    2024年02月04日
    浏览(39)
  • Docker + Jenkins 自动化部署若依项目

    前言 对着此文章操作之前,确保服务器上的Java环境(JDK、MySQL、Redis、Jenkins以及Linux安装Maven)已经装好,如果没有装好,参考我之前的文章。 注意: 如果服务器上自己装的又 Nginx ,需要手动停了,要不会导致80端口被占用 1:首先,到若依官网拉去若依分离版项目 2:拉完之后

    2024年04月16日
    浏览(40)
  • Docker+Jenkins+Gitee自动化部署maven项目

    各位看官老爷,本文为Jenkins实战,注重实际过程,阅读完会有以下收获: 了解如何使用Docker安装Jenkins 了解如何使用Jenkins部署maven项目 了解如何使用Jenkins+Gitee实现自动化部署 相信,正在读这篇文章的你,对Jenkins应该有或多或少的了解,就算没有也应该在某个地方听说过。👍

    2024年02月07日
    浏览(223)
  • Jenkins+GitLab+Docker搭建前端自动化构建镜像容器部署

    前言 🚀 需提前安装环境及知识点: 1、Docker搭建及基础操作 2、DockerFile文件描述 3、Jenkins搭建及基础点 🚀 目的: 将我们的前端项目打包成一个镜像容器并自动发布部署,可供随时pull访问 1、在当前项目的根目录创建Dockerfile文件并写入如下代码: 代码片段详细描述: 注意

    2024年02月05日
    浏览(57)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包