Jenkins-Pipeline、流水线,企业最受宠技术,实战项目一Pipeline+Maven+Ansible+Tomcat

实战项目Pipeline+Maven+Ansible+Tomcat

| Jenkins服务器 | 192.168.153.190 |
| ------------- | --------------- |
| java服务器    | 192.168.153.195 |
[root@jenkins-server1 ~]#  ssh-copy-id -i 192.168.153.195  //发送公钥

12.1 Jenkins服务器配置解析

在这里插入图片描述

12.2 Jenkins服务器Ansible配置

[root@jenkins-server1 ~]#  yum -y install epel-release
[root@jenkins-server1 ~]#  yum -y install  ansible
[root@jenkins-server1 ~]# cat /etc/ansible/hosts  #在最后面添加下面内容
[java-server]
java-server1
[java-server:vars]         #设置变量,vars--照写
ansible_ssh_port=22     
ansible_ssh_user=root   
ansible_ssh_private_key_file=/root/.ssh/id_rsa  
#ansible_ssh_pass=test

在这里插入图片描述

[root@jenkins-server1 ~]# ansible java-server1 -m ping //测试连通性

在这里插入图片描述

12.3 Jenkins剧本

[root@jenkins-server1 ~]# vim /etc/ansible/jenknis_scp.yaml 
---
- hosts: java-server1
  user: root
  vars:
  - source_war: "/root/.jenkins/workspace/test-p3/target/easy-springmvc-maven.war"
  - dest_war: "/root/upload"
  tasks:
  - name: scp war
    copy: src={{ source_war }} dest={{ dest_war }}

在这里插入图片描述

12.4 后端服务器jdk、tomcat配置

在这里插入图片描述

[root@java-server ~]# tar -xvzf jdk-8u211-linux-x64.tar.gz  -C /usr/local/
[root@java-server ~]#  tar -xvzf apache-tomcat-8.5.45.tar.gz  -C /data/application/
[root@java-server ~]# cd /usr/local/
[root@java-server local]# mv jdk1.8.0_211/ java
[root@java-server local]# cd /data/application/
[root@java-server application]# mv apache-tomcat-8.5.45/ tomcat

配置环境变量

[root@java-server ~]# vim /etc/profile   //在最后面添加即可
export JAVA_HOME=/usr/local/java
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$JAVA_HOME/lib/tools.jar
export TOMCAT_HOME=/data/application/tomcat
[root@java-server ~]# mkdir /root/upload/   #创建接受war包的目录。我这里脚本定义的是此目录
[root@java-server ~]# rm -rf /data/application/tomcat/webapps/*

12.5 后端服务器配置脚本

[root@java-server ~]# mkdir /opt/script
[root@java-server ~]# vim /opt/script/app-jenkins.sh  #编写重启tomcat的脚本
说明:此脚本定义了接受war的目录,tomcat的发布目录,主要的思路就是将发布过来的war包,移动到tomcat的发布目录下。
并检测tomcat是否已经运行,已运行的话,杀死启动,未运行,直接运行;

脚本

#!/usr/bin/bash
#本脚本适用于jenkins持续集成,实现备份war包到代码更新上线!使用时请注意全局变量。
#====================================================
#Defining variables
export JAVA_HOME=/usr/local/java
webapp_path="/data/application/tomcat/webapps"
tomcat_run="/data/application/tomcat/bin"
updata_path="/data/update/`date +%F-%T`"
backup_path="/data/backup/`date +%F-%T`"
tomcat_pid=`ps -ef | grep tomcat | grep -v grep | awk '{print $2}'`
files_dir="easy-springmvc-maven"
files="easy-springmvc-maven.war"
job_path="/root/upload"

#Preparation environment
echo "Creating related directory"
mkdir -p $updata_path
mkdir -p $backup_path

echo "Move the uploaded war package to the update directory"
mv $job_path/$files $updata_path

echo "========================================================="
cd /opt
echo "Backing up java project"
if [ -f $webapp_path/$files ];then
        tar czf $backup_path/`date +%F-%H`.tar.gz $webapp_path
        if [ $? -ne 0 ];then
                echo "打包失败,自动退出"
                exit 1
        else
                echo "Checking if tomcat is started"
                if [ -n "$tomcat_pid" ];then
                        kill -9 $tomcat_pid
                        if [ $? -ne 0 ];then
                                echo "tomcat关闭失败,将会自动退出"
                                exit 2
                        fi
                fi
                cd $webapp_path
                rm -rf $files && rm -rf $files_dir
                cp $updata_path/$files $webapp_path
                cd /opt
                $tomcat_run/startup.sh
                sleep 5
                echo "显示tomcat的pid"
                echo "`ps -ef | grep tomcat | grep -v grep | awk '{print $2}'`"
                echo "tomcat startup"
                echo "请手动查看tomcat日志。脚本将会自动退出"
        fi
else
        echo "Checking if tomcat is started"
        if [ -n "$tomcat_pid" ];then
                kill -9 $tomcat_pid
                if [ $? -ne 0 ];then
                        echo "tomcat关闭失败,将会自动退出"
                        exit 2
                fi
        fi
        cp $updata_path/$files $webapp_path
        nohup $tomcat_run/startup.sh &
        sleep 5
        echo "显示tomcat的pid"
        echo "`ps -ef | grep tomcat | grep -v grep | awk '{print $2}'`"
        echo "tomcat startup"
        echo "请手动查看tomcat日志。脚本将会自动退出"
fi

提权

[root@java-server ~]# chmod +x /opt/script/app-jenkins.sh

12.6 Jenkins pipeline代码

node {
    def gitUrl = "git@gitee.com:youngfit/easy-springmvc-maven.git"
    def git_Branch = 'master'
    value = "=========================================================="
    stage ('拉取代码') {
        print "${value}"
        git branch: "${git_Branch}", url: "${gitUrl}", credentialsId: "1"
    }
    
    stage ('编译打包') {
        print "${value}"
        sh 'mvn clean package'
    }
    
    stage ('scp发布到tomcat后端服务') {
        print '${values}'
        sh 'ansible-playbook /etc/ansible/jenknis_scp.yaml'
        // sh 'sleep 40'
        sh 'ansible java-server1 -m shell -a "nohup /opt/script/app-jenkins.sh $"'
    }
}

在这里插入图片描述
在这里插入图片描述
来到Jenkins服务器上查看:
在这里插入图片描述
来到java后端服务器上查看:
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面我将为你提供一份完整版的 Jenkins Pipeline + Kubernetes 实战教程,用于构建和部署一个简单的 Go 项目。这个项目将使用 Jenkins Pipeline 插件和 Kubernetes 插件,自动化构建、测试和部署 Go 项目到 Kubernetes 集群中。 前置条件: - 你已经安装了 Docker、Kubernetes 和 Jenkins,并且能够正常运行它们。 - 你已经安装了 Go 开发环境,并且熟悉 Go 项目的基本结构和命令。 步骤一:创建 Go 项目 首先,我们需要创建一个简单的 Go 项目,用于演示如何使用 Jenkins Pipeline 和 Kubernetes 构建和部署 Go 项目。假设我们的 Go 项目代码位于 /path/to/project 目录下,项目结构如下: ``` /path/to/project ├── Dockerfile ├── main.go └── Makefile ``` 其中,Dockerfile 文件用于构建 Docker 镜像,main.go 文件是 Go 项目的主要代码文件,Makefile 文件用于构建和测试 Go 项目。 下面是 Dockerfile 文件的内容: ``` FROM golang:1.16-alpine AS build WORKDIR /app COPY . . RUN make build FROM alpine:3.14 COPY --from=build /app/myapp /usr/bin/ CMD ["myapp"] ``` 这个 Dockerfile 文件使用了官方的 Go 1.16 Alpine 镜像作为基础镜像,并将项目代码复制到容器的工作目录 /app 中。然后,它使用 Makefile 文件中的 build 命令编译 Go 项目,并将编译后的二进制文件 myapp 复制到 Alpine 镜像中。最后,它定义了一个容器启动命令 CMD ["myapp"],用于启动 Go 项目。 下面是 main.go 文件的内容: ```go package main import "fmt" func main() { fmt.Println("Hello, World!") } ``` 这个 main.go 文件非常简单,它只是输出了一个 "Hello, World!" 的字符串。 下面是 Makefile 文件的内容: ``` .PHONY: all build test clean BINARY=myapp VERSION=1.0.0 all: build test build: go build -o $(BINARY) main.go test: go test -v ./... clean: rm -f $(BINARY) ``` 这个 Makefile 文件定义了四个命令:build、test、clean 和 all。其中,build 命令用于编译 Go 项目,test 命令用于运行 Go 项目的测试用例,clean 命令用于清理编译后的二进制文件,all 命令用于同时执行 build 和 test 命令。 步骤二:创建 Kubernetes 集群 接下来,我们需要创建一个 Kubernetes 集群,用于部署 Go 项目。这个集群可以是本地的 Minikube 集群,也可以是云端的 Kubernetes 集群,具体操作方式可以参考 Kubernetes 官方文档。 假设我们已经创建了一个名为 mycluster 的 Kubernetes 集群,并且已经正确配置了 kubectl 命令行工具。我们可以使用 kubectl get nodes 命令来验证 Kubernetes 集群是否正常运行。 步骤三:创建 Jenkins Pipeline 项目 接下来,我们需要在 Jenkins 中创建一个 Pipeline 项目,用于构建和部署 Go 项目到 Kubernetes 集群中。 - 在 Jenkins 中,点击 "New Item" 按钮,选择 "Pipeline" 项目类型。 - 在 "General" 标签页中,填写项目名称和描述信息。 - 在 "Pipeline" 标签页中,选择 "Pipeline script from SCM",并选择 Git 作为 SCM 类型。 - 在 "Repository URL" 中填写 Go 项目的 Git 仓库 URL,选择 "Credentials",填写 Git 仓库的用户名和密码。 - 在 "Script Path" 中填写 Jenkinsfile,这个文件用于定义 Pipeline 脚本。 下面是 Jenkinsfile 文件的内容: ``` pipeline { agent any stages { stage('Build') { steps { sh 'make build' sh 'docker build --tag myapp:latest .' } } stage('Test') { steps { sh 'make test' } } stage('Deploy') { environment { KUBECONFIG = credentials('my-kubeconfig') } steps { sh 'kubectl apply --filename deployment.yaml' } } } } ``` 这个 Jenkinsfile 文件定义了三个阶段:Build、Test 和 Deploy。其中,Build 阶段用于编译 Go 项目,并构建 Docker 镜像;Test 阶段用于运行 Go 项目的测试用例;Deploy 阶段用于部署 Go 项目到 Kubernetes 集群中。 在 Deploy 阶段中,我们使用了 Kubernetes 插件提供的 credentials 函数,从 Jenkins 的凭据库中获取 Kubernetes 集群的配置信息,并将其赋值给 KUBECONFIG 环境变量。然后,我们使用 kubectl apply 命令将 deployment.yaml 文件中定义的 Kubernetes 资源部署到 Kubernetes 集群中。 步骤四:创建 Kubernetes 部署文件 最后,我们需要创建一个 deployment.yaml 文件,用于部署 Go 项目到 Kubernetes 集群中。假设我们的 Kubernetes 集群已经正确配置,deployment.yaml 文件如下: ``` apiVersion: apps/v1 kind: Deployment metadata: name: myapp spec: replicas: 3 selector: matchLabels: app: myapp template: metadata: labels: app: myapp spec: containers: - name: myapp image: myapp:latest ports: - containerPort: 80 ``` 这个 deployment.yaml 文件定义了一个名为 myapp 的 Deployment,它包含了 3 个 Pod,每个 Pod 包含了一个名为 myapp 的容器。容器使用了之前构建的 myapp Docker 镜像,并将容器的 HTTP 端口映射到 80 端口。 步骤五:运行 Jenkins Pipeline 项目 现在,我们可以在 Jenkins 中运行这个 Pipeline 项目,它会自动化构建、测试和部署我们的 Go 项目到 Kubernetes 集群中。 在 Jenkins 项目页面中,点击 "Build Now" 按钮,Jenkins 将会自动触发一个构建过程,按照 Pipeline 脚本中定义的阶段和任务,自动化构建、测试和部署 Go 项目到 Kubernetes 集群中。 如果一切顺利,我们可以使用 kubectl get deployments 和 kubectl get pods 命令来验证 Go 项目是否已经成功部署到 Kubernetes 集群中。 希望这个教程能够帮助你理解如何使用 Jenkins Pipeline 和 Kubernetes 构建和部署 Go 项目。如果你有任何问题或需要进一步的帮助,请随时回复我。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值