0


jenkins结合docker实现自动部署

环境

使用虚拟机搭建环境,centos7.8系统
主机说明必要软件192.168.8.110jenkins服务节点jekins,jdk8,tomcat9192.168.8.101harbor服务,docker管理镜像harbor192.168.8.111jenkins工作节点maven,jdk8,git,docker

jenkins安装

rpm方式安装

  1. 1.安装JDK8
  2. yum install java-1.8.0-openjdk* -y
  3. 2.yum方式安装
  4. wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
  5. rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
  6. yum install jenkins
  7. 3.启动Jenkins服务
  8. systemctl start jenkins
  9. systemctl enable jenkins
  10. 4.打开浏览器访问
  11. http://192.168.8.110:8080

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

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

  1. cat /var/lib/jenkins/secrets/initialAdminPassword

在这里插入图片描述
登陆成功后点击“选择插件安装”,然后就是漫长的安装插件。。。。。。。。
在这里插入图片描述

agent工作节点配置

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

  1. 下载地址:
  2. https://www.oracle.com/webapps/redirect/signon?nexturl=https://download.oracle.com/otn/java/jdk/8u261-
  3. b12/a4634525489241b9a9e1aa73d9e118e6/jdk-8u261-linux-x64.tar.gz
  4. tar -zxf jdk-8u261-linux-x64.tar.gz
  5. mv jdk1.8.0_261/ /opt/jdk1.8

3.git 安装

  1. 官网下载速度非常慢。国内加速地址大部分为windows版本。登录https://github.com/git/git/releases查看git的最新版。不要下载带有-rc的,因为它代表了一个候选发布版本。
  2. https://www.kernel.org/pub/software/scm/git/git-2.28.0.tar.gz
  3. 1.安装依赖环境:
  4. yum install -y curl-devel expat-devel gettext-devel openssl-devel zlib-devel gcc perl-ExtUtils-MakeMaker
  5. 2.删除yum方式安装的git
  6. 添加依赖时自动yum安装了git1.8版本。需要先移除git1.8版本。
  7. yum -y remove gittar -zxvf git-2.28.0.tar.gz
  8. mv git-2.28.0 /opt/git2.28
  9. ./configure --prefix=/opt/git2.28
  10. cd /opt/git2.28/
  11. make&&makeinstall

4.maven安装

  1. 下载地址:
  2. https://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.6.3/binaries/apachemaven-3.6.3-bin.tar.gz
  3. tar -zxf apache-maven-3.6.3-bin.tar.gz.gz
  4. mv apache-maven-3.6.3 maven
  5. 创建本地仓库:
  6. mkdir -p /data/maven/repository
  7. 设置本地仓库目录
  8. <localRepository>/data/maven/repository</localRepository>
  9. 配置阿里云仓库地址
  10. <mirror><id>nexus-aliyun</id><mirrorOf>*</mirrorOf><name>Nexus aliyun</name><url>http://maven.aliyun.com/nexus/content/groups/public</url></mirror>
  11. maven工程配置jdk8编译
  12. <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.统一配置

  1. vi /etc/profile
  2. 加入以下内容
  3. exportPATHexportJAVA_HOME=/opt/jdk1.8
  4. exportPATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATHexportCLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
  5. exportMAVEN_HOME=/opt/maven
  6. exportPATH=$MAVEN_HOME/bin:$PATHexportPATH=$PATH:/opt/git2.28/bin
  7. source /etc/profile
  8. 检测环境
  9. java -version
  10. mvn -v
  11. git --version
  12. 配置软连接
  13. ln -s /opt/jdk1.8/bin/java /usr/bin/
  14. ln -s /opt/mvn/bin/mvn /usr/bin/
  15. ln -s /opt/git2.28/bin/git /usr/bin
  16. ln -s /opt/maven/bin/mvn /usr/local/bin/ 这里解决通过jenkinsagent节点上执行mvn命令,mvn无法找到的问题

jenkins agent节点配置

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

ssh方式连接agent

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

  1. 在服务节点生成秘钥
  2. ssh-keygen -t rsa
  3. 复制公钥(-p 端口号来指定ssh端口号)
  4. ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.198.154
  5. 免密登录测试
  6. ssh192.168.8.111

2.配置jenkins凭据
位置:jenkins工作台->系统管理->凭据管理(manager credentials)
类型:SSH Username with private key
在这里插入图片描述

在这里插入图片描述
私钥信息获取:

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

创建agent节点

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

新建构建任务

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
脚本:

  1. pipeline {
  2. agent {
  3. label 'agent-111'}
  4. stages {
  5. stage('环境监测'){
  6. steps {echo'环境监测'sh'''java -version
  7. mvn -v
  8. git --version
  9. docker -v'''
  10. }}}}

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

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

构建任务

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

实战

创建项目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
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
写一个简单的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配置

  1. <?xml version="1.0" encoding="UTF-8"?><projectxmlns="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
  2. 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服务器,拉取代码
在这里插入图片描述

创建任务 jenkinsdemo

选择流水线
在这里插入图片描述

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

在这里插入图片描述
创建流水线任务,脚本来源配置为从git上来取,也就上面创建项目中的Jenkinsfile。

编写流水线脚本 Jenkinsfile

  1. pipeline{
  2. agent {
  3. label 'agent-222' //这里通过标签选择执行任务的agent节点
  4. }
  5. stages{
  6. stage('环境检测'){
  7. steps{
  8. echo '环境监测'
  9. }
  10. }
  11. stage('拉取代码'){
  12. steps{
  13. echo '拉取代码'
  14. }
  15. }
  16. stage('编译构建'){
  17. steps{
  18. echo '编译构建'
  19. }
  20. }
  21. stage('删除容器'){
  22. steps{
  23. echo '删除容器'
  24. }
  25. }
  26. stage('删除镜像'){
  27. steps{
  28. echo '删除镜像'
  29. }
  30. }
  31. stage('登陆harbor'){
  32. steps{
  33. echo '登陆harbor'
  34. }
  35. }
  36. stage('拉取容器'){
  37. steps{
  38. echo '拉取容器'
  39. }
  40. }
  41. stage('运行容器'){
  42. steps{
  43. echo '运行容器'
  44. }
  45. }
  46. }
  47. }

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

  1. java -version
  2. mvn -v
  3. git --version
  4. 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.删除容器

  1. #删除容器shell脚本,先检查容器是否存在,如果存在先停止,然后删除容器echo'检查容器是否存在'containerid=`dockerps -a |grep -w jenkinsdemo |awk'{print $1}'`if["$containerid"!=""];thenecho ‘容器存在,停止容器’
  2. docker stop $containeridecho ‘删除容器’
  3. dockerrm$containeridfi

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

  1. #删除镜像shell脚本echo'检查镜像是否存在'imageid=`docker images |grep jenkinsdemo |awk'{print $3}'`if["$imageid"!=""];thenecho'删除镜像'docker rmi -f $imageidfi

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

  1. docker login -u admin -p Harbor12345 192.168.8.101:5000

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

  1. docker pull 192.168.8.101:5000/dan/jenkinsdemo:1.0

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

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

同样是生成sh脚本,同1

完整脚本内容:

  1. pipeline{
  2. agent {
  3. label 'agent-111'}
  4. stages{
  5. stage('环境检测'){
  6. steps{echo'环境监测'sh'''java -version
  7. mvn -v
  8. git --version
  9. docker -v'''
  10. }}
  11. stage('拉取代码'){
  12. steps{echo'拉取代码'
  13. //略
  14. }}
  15. stage('编译构建'){
  16. steps{echo'编译构建'sh'mvn clean package -Dmaven.test.skip=true jib:build -DsendCredentialsOverHttp=true'}}
  17. stage('删除容器'){
  18. steps{echo'删除容器'sh'''echo \'检查容器是否存在\'
  19. containerid=`dockerps -a |grep -w jenkinsdemo |awk\'{print $1}\'`if["$containerid"!=""];thenecho ‘容器存在,停止容器’
  20. docker stop $containeridecho ‘删除容器’
  21. dockerrm$containeridfi'''
  22. }}
  23. stage('删除镜像'){
  24. steps{echo'删除镜像'sh'''echo \'检查镜像是否存在\'
  25. imageid=`docker images |grep jenkinsdemo |awk\'{print $3}\'`if["$imageid"!=""];thenecho\'删除镜像\'
  26. docker rmi -f $imageidfi'''
  27. }}
  28. stage('登陆harbor'){
  29. steps{echo'登陆harbor'sh'docker login -u admin -p Harbor12345 192.168.8.101:5000'}}
  30. stage('拉取容器'){
  31. steps{echo'拉取容器'sh'docker pull 192.168.8.101:5000/dan/jenkinsdemo:1.0'}}
  32. stage('运行容器'){
  33. 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--------------------------------------------------------

标签: jenkins docker git

本文转载自: https://blog.csdn.net/u012911168/article/details/130749627
版权归原作者 sc_man 所有, 如有侵权,请联系我们删除。

“jenkins结合docker实现自动部署”的评论:

还没有评论