jenkins自动构建SpringCloud

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: jenkins自动构建SpringCloud

本机环境

CentOS:   CentOS Linux release 7.9.2009 (Core)
jdk:    Java(TM) SE Runtime Environment (build 1.8.0_281-b09)
NodeJs:   v14.15.4
npm:    6.14.10
maven:    3.6.3
git:    2.30.1

jenkins配置

Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件项目可以进行持续集成。

下载war包

如图所示:

这个war包在Windows和Linux是通用的,可以直接通过 wget 命令下载,或下载后再传到Linux上。

这里不建议使用docker部署,因为本人之前是在docker部署的,jenkins会以容器形式启动,linux本机的jdk,nodejs,maven等都需挂载,jar包启动方式也会收到很大影响、如果依赖docker-compose启动,很难进行多个docker-compose组合使用。

war包部署

war包上传到指令目录之后(/home/jenkins/war/),首先保证系统中已经安装了jdk,最好是jdk1.5以上。这里先不阐述,之后在同级目录新建脚本jenkins.sh,内容如下:

#! /bin/bash
JAVA_OPTIONS="-server -Xmx2048m -Xms1024m"
Jenkins=$2
this_dir="$( cd "$( dirname "$0"  )" && pwd )"
log_file="${this_dir}/catalina.out"
jar_file="${this_dir}/${Jenkins}"

if [ "$1" = "" ];
then
    echo -e "\033[0;31m 未输入操作名 \033[0m  \033[0;34m {start|stop|restart|status} \033[0m"
    exit 1
fi

if [ "$Jenkins" = "" ];
then
    echo -e "\033[0;31m 未输入应用名 \033[0m"
    exit 1
fi

function start()
{
    count=`ps -ef |grep java|grep $Jenkins|grep -v grep|wc -l`
    if [ $count != 0 ];then
        echo "$Jenkins is running..."
    else
        nohup java $JAVA_OPTIONS -jar  ${jar_file}  --httpPort=8088 > "${log_file}" 2>&1 &
    echo -e "Start $Jenkins success...Please see the detail log in /logs/catalina.out"
    fi
}

function stop()
{
    echo "Stop $Jenkins"
    boot_id=`ps -ef |grep java|grep $Jenkins|grep -v grep|awk '{print $2}'`
    count=`ps -ef |grep java|grep $Jenkins|grep -v grep|wc -l`

    if [ $count != 0 ];then
        kill $boot_id
        count=`ps -ef |grep java|grep $Jenkins|grep -v grep|wc -l`

        boot_id=`ps -ef |grep java|grep $Jenkins|grep -v grep|awk '{print $2}'`
        kill -9 $boot_id
    fi
}

function restart()
{
    stop
    sleep 2
    start
}

function status()
{
    count=`ps -ef |grep java|grep $Jenkins|grep -v grep|wc -l`
    if [ $count != 0 ];then
        echo "$Jenkins is running..."
    else
        echo "$Jenkins is not running..."
    fi
}

case $1 in
    start)
    start;;
    stop)
    stop;;
    restart)
    restart;;
    status)
    status;;
    *)

    echo -e "\033[0;31m Usage: \033[0m  \033[0;34m sh  $0  {start|stop|restart|status}  {JenkinsJarName} \033[0m\033[0;31m Example: \033[0m\033[0;33m sh  $0  start jenkins.war \03[0m"
esac

状态查询

/home/jenkins/war/jenkins.sh status jenkins.war

启动命令

/home/jenkins/war/jenkins.sh start jenkins.war

停止命令

/home/jenkins/war/jenkins.sh stop jenkins.war

重启命令

/home/jenkins/war/jenkins.sh restart jenkins.war

设置开机自启

给jenkins.sh文件授权

chmod +x /home/jenkins/war/jenkins.sh

在/etc/rc.d/rc.local文件底部,添加内容:

/home/jenkins/war/jenkins.sh start

重启计算机

reboot

访问Jenkins

访问Jenkins的地址:http://ip地址:8088(8088是上一步指定的端口)

第一次访问,出现上面的界面,继续等待,直到出现下面界面。

根据上面提示,到路径 /root/.jenkins/secrets/initialAdminPassword 下找出密码,然后复制填入即可。

[root@localhost ~]# cat /root/.jenkins/secrets/initialAdminPassword
ef66fdc63ddb49035a55c7cfaf796578

启动时候,提示:该jenkins实例似乎已离线

修改/root/.jenkins/hudson.model.UpdateCenter.xml,把url改为https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json

插件安装失败解决方法

[root@localhost updates]# cd /root/.jenkins/updates/
[root@localhost updates]# sed -i 's#https://updates.jenkins.io/download#https://mirrors.tuna.tsinghua.edu.cn/jenkins#g' default.json
[root@localhost updates]# sed -i 's#http://www.google.com#https://www.baidu.com#g' default.json
[root@localhost updates]#

到jenkins对应目录下,修改default.json文件,依次执行上述命令。

插件配置

1.安装GitLab相关插件
• 1

2.NodeJS插件

3.Maven 插件

注意:插件下载失败时重新执行【插件安装失败解决方法】中sed -i 's#https://updates.jenkins.io/download#https://mirrors.tuna.tsinghua.edu.cn/jenkins#g' default.json命令。


全局工具配置

全局工具配置

建议插件提前在服务器部署好。

配置GitLab

Manage Jenkins(系统管理)–>Configure System(系统设置),找到GitLab,填写上名称与GitLab并写上主机地址,点击【add】来添加证书。

这里我们选择添加 GitLab API token

登陆GitLab

点击右上角头像–>设置–>访问令牌

输入令牌名称,然后勾选api,点击下方 创建个人访问令牌,复制token,并保存下来。因为下次就不可见了。然后在Jenkins中粘贴

创建任务

vue项目

登录jenkins之后,单击New Item,输入任务名称,点选“Freestyle project”,点击确定。

general 丢弃旧的构建选上,输入保持最大记录数,节省空间。

Source Code Management配置如下

Build Triggers我们点选,当GitLab提交触发【Build when a change …】,点击下面的【advanced…】

拉到下面创建一个token

创建完成后,进入GitLab上对应的前端项目,点击【Settings】–>【Webhooks(集成)】将上面Build when a change is pushed to GitLab. GitLab webhook URL: 后面跟项目链接与刚刚生成的token输入,点击【Add webhook】添加成功后,点选测试,Push events 如果弹出 200 说明测试通过。

Build Environment:前端项目点选Provide Node & npm bin/ folder to PATH,配置无需改变。

Build:构建这里,我们选择shell脚本。配置如下:

npm -v
npm install --unsafe-perm
npm run build:prod
tar -zcvf dist.tar.gz ./dist
mv ./dist.tar.gz /home/nginx/html;
cd /home/nginx/html;
rm -rf ./dist
tar -zxvf ./dist.tar.gz;
rm -rf ./dist.tar.gz;

注意 npm install 后面加--unsafe-perm,是因为jenkins默认用root用户登录,执行install命令时会自动切到nobody用户,会提示没有权限。我们可以在服务器给jenkins创建专用用户,或者加--unsafe-perm参数。

配置完之后,点击保存,初次构建选择Build Now。然后可看Build History中出现新的构建进度,紧接着我们选中,可在Console Output中看到构建信息。

springcloud项目

创建Spring Cloud 跟创建 Vue前端任务类似,只是构建环境可以不选,然后更改构建中的shell。我们项目采用docker-compose部署,具体如下:

docker部署,并部署公共项目

安装docker环境

#安装docker
[root@localhost~]# curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
#启动docker
[root@localhost~]# service docker start
#看docker版本信息
[root@localhost~]# docker version

docker命令自动补全

#安装补全工具 
[root@localhost ~]# yum install -y bash-completion 
#安装完后,关闭当前命令窗口,重新打开,再输入docker 按2下tab键,则可出现所有docker命令
 [root@localhost ~]# docker 
 attach config create exec history import kill logout node port push rm save service stats system trust version build container diff export image info load logs pause ps rename rmi search stack stop tag unpause volume commit cp events help images inspect login network plugi n pull restart run secret start swarm top update wait 
 [root@localhost ~]# docker e 
 events exec export

通过Dockfile文件,构建docker镜像

搭建SkyWalking环境

webapp-ui默认的端口号是8080,修改成8480,以免造成端口冲突,修改文件:webapp/webapp.yml

server: 
  port: 8480 
collector: 
  path: /graphql 
  ribbon: 
    ReadTimeout: 10000 
    # Point to all backend's restHost:restPort, split by , 
    listOfServers: 127.0.0.1:12800

启动SkyWalking,只需运行【bin/startup.bat】或【bin/startup.sh】即可

访问SkyWalking,地址:http://localhost:8480

注意:测试时启动,测试完成记得关掉,后续都由docker完成。

#将下载的SkyWalking6.6,解压到docker目录下,如下:

[root@localhost docker]# pwd 
/work/docker 
[root@localhost docker]# ll 
total 4 
drwxr-xr-x. 8 root root 137 Dec 24 06:30 apache-skywalking-apm-bin 
-rw-r--r--. 1 root root 509 Feb 26 15:32 Dockerfile 
#构建docker镜像,进入项目的docker目录,执行如下命令即可 
[root@localhost docker]# docker build -t spring_cloud_demo:1.0 . 
#查看Docker镜像 
[root@localhost docker]# docker images

Dockfile配置如下:

# 构建镜像,执行命令:【docker build -t spring_cloud_demo:3.2 .】
FROM openjdk:8u212-jre
MAINTAINER Jack
# 时区问题
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN echo 'Asia/Shanghai' >/etc/timezone

ADD apache-skywalking-apm-bin/agent/ /agent

ENTRYPOINT ["java", "-server", "-Xms512M", "-Xmx512M", "-Djava.security.egd=file:/dev/./urandom", "-Dfile.encoding=UTF-8", "-XX:+HeapDumpOnOutOfMemoryError", "-javaagent:/agent/skywalking-agent.jar", "-jar", "/app/app.jar" ]

安装docker-compose,用来管理容器

#下载docker-compose 
[root@localhost ~]# curl -L https://github.com/docker/compose/releases/download/1.22.0/docker-co mpose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose 
  % Total % Received % Xferd Average Speed Time Time Time Current 
              Dload Upload Total Spent Left Speed 
  100 617 0 617 0 0 555 0 --:--:-- 0:00:01 --:--:-- 556 
  100 11.2M 100 11.2M 0 0 1661k 0 0:00:06 0:00:06 --:--:-- 2845k 
#增加可执行权限 
[root@localhost ~]# chmod +x /usr/local/bin/docker-compose 
#查看版本信息 
[root@localhost ~]# docker-compose version 
docker-compose version 1.22.0, build f46880fe 
docker-py version: 3.4.1 
CPython version: 3.6.6 
OpenSSL version: OpenSSL 1.1.0f 25 May 2017

docker-compose官方文档

创建公用docker-compose.yml文件,主要是为了部署elasticsearch,skywalking-oap,skywalking-ui,可放到docker目录下,具体为:

ersion: '3.3'
services:
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.5.0
    container_name: elasticsearch
    restart: always
    ports:
      - 9200:9200
    environment:
      - discovery.type=single-node
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
  skywalking-oap:
    image: apache/skywalking-oap-server:6.6.0-es7
    container_name: skywalking-oap
    depends_on:
      - elasticsearch
    links:
      - elasticsearch
    restart: always
    ports:
      - 11800:11800
      - 12800:12800
    environment:
      - SW_STORAGE=elasticsearch
      - SW_STORAGE_ES_CLUSTER_NODES=elasticsearch:9200
  skywalking-ui:
    image: apache/skywalking-ui:6.6.0
    container_name: skywalking-ui
    depends_on:
      - skywalking-oap
    links:
      - skywalking-oap
    restart: always
    ports:
      - 8480:8080
    environment:
      - SW_OAP_ADDRESS=skywalking-oap:12800

通过docker-compose命令,启动项目,如下所示:

#启动项目 进入docker目录执行
[root@localhost docker]# docker-compose up -d 
#查看启动的容器 
[root@localhost docker]# docker ps 
#查看启动的logs 
[root@localhost docker]# docker logs -f skywalking-oap
#项目异常时,关闭项目命令
[root@localhost docker]# docker-compose down

jenkins配置正式项目

创建目录

[root@localhost docker]# cd /home/data

[root@localhost docker]# mkdir allocation-protocol
# 创建存放项目jar包目录
[root@localhost docker]# mkdir project  
# 创建存放docker-compose.yml文件目录
[root@localhost docker]# mkdir docker-compose

docker-compose.yml文件配置如下

一个git仓库下多个服务时services下直接配置就可以了,然后对应在shell脚本中新增所需项目

version: '3.3'
services: 
  allocation-protocol:
    image: renren_io:3.2
    container_name: allocation-protocol-server
    ports:
      - 10021:10021
    networks:
      - skywalking-oap
    environment:
      - JAVA_OPTS=-DSW_AGENT_NAME=allocation-protocol -DSW_AGENT_COLLECTOR_BACKEND_SERVICES=skywalking-oap:11800
    env_file:
      - /home/docker/common.env
    volumes:
      - /home/data/allocation-protocol/project/allocation-server.jar:/app/app.jar
networks:
  skywalking-oap:
    external: true

jenkins中shell脚本

# jdk版本
java -version
# maven版本
mvn -version

# clean install 清除之前的包,并将所有模块 打包
mvn clean 
mvn install

# 删除所有旧包
cd /home/data/allocation-protocol
rm -rf ./project;
mkdir project;

# allocation-protocol
mv /root/.jenkins/workspace/allocation-protocol/allocation-server/target/allocation-server.jar /home/data/allocation-protocol/project

cd /home/data/allocation-protocol/docker-compose/
# docker-compose
docker-compose down
docker-compose up -d
相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
目录
相关文章
|
4月前
|
JavaScript jenkins 持续交付
Jenkins自动构建 CI/CD流水线学习笔记(从入门到入土,理论+示例)
Jenkins自动构建 CI/CD流水线学习笔记(从入门到入土,理论+示例)
164 0
|
Kubernetes 监控 jenkins
出神入化!Jenkins+Docker+SpringCloud+K8s构建持续集成平台
Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。
出神入化!Jenkins+Docker+SpringCloud+K8s构建持续集成平台
|
12月前
|
XML 数据可视化 jenkins
Jenkins自动构建项目
Jenkins自动构建项目
|
监控 JavaScript jenkins
Jenkins无网部署SpringCloud和Vue
Jenkins无网部署SpringCloud和Vue
264 1
|
jenkins Java 程序员
实战:向GitHub提交代码时触发Jenkins自动构建
当我们提交代码到GitHub后,可以在Jenkins上执行构建,但是每次都要动手去执行略显麻烦,今天我们就来实战Jenkins的自动构建功能,每次提交代码到GitHub后,Jenkins会进行自动构建
732 0
实战:向GitHub提交代码时触发Jenkins自动构建
|
jenkins 应用服务中间件 Linux
Linux CentOS7下svn+tomcat9.0+maven3.3+jenkins实现web项目自动构建与远程发布2
Linux CentOS7下svn+tomcat9.0+maven3.3+jenkins实现web项目自动构建与远程发布2
142 0
|
Java jenkins Linux
Linux CentOS7下svn+tomcat9.0+maven3.3+jenkins实现web项目自动构建与远程发布 1
Linux CentOS7下svn+tomcat9.0+maven3.3+jenkins实现web项目自动构建与远程发布1
142 0
|
jenkins Java 持续交付
自从我学会了Jenkins的自动构建,我再也没有每次都打包上传到服务器然后发布Java服务了
自从我学会了Jenkins的自动构建,我再也没有每次都打包上传到服务器然后发布Java服务了
自从我学会了Jenkins的自动构建,我再也没有每次都打包上传到服务器然后发布Java服务了
|
jenkins Devops Java
jenkins快速入门,自动构建一个hello world项目(devops,ci/cd)
jenkins快速入门,自动构建一个hello world项目(devops,ci/cd)
jenkins快速入门,自动构建一个hello world项目(devops,ci/cd)
|
网络协议 安全 jenkins
Jenkins+Docker+Harbor+SpringCloud微服务持续集成(下)
Jenkins+Docker+Harbor+SpringCloud微服务持续集成(下)
Jenkins+Docker+Harbor+SpringCloud微服务持续集成(下)