Devops 开发运维高级篇之微服务持续集成(生成镜像、上传到harbor镜像仓库、拉取镜像和发布应用)

Devops 开发运维高级篇之微服务持续集成(生成镜像、上传到harbor镜像仓库、拉取镜像和发布应用)

 

微服务持续集成(4)-使用Dockerfile编译、生成镜像

微服务持续集成(5)-上传到Harbor镜像仓库

微服务持续集成(6)-拉取镜像和发布应用

微服务持续集成(7)-部署前端静态web网站

 

 

微服务持续集成(4)-使用Dockerfile编译、生成镜像

介于之前的Jenkinsfile末尾添加:

 stage('make install public sub project') {
            sh  "mvn -f tensquare_common clean install"
    }

然后提交jenkinsfile(这时候不要急于构建会报错)

接着做

 

 把父工程下的pom.xml文件里的maven插件代码移至到除了 tensquare_common 以外每个子工程的pom.xml中!

然后父工程中的pom.xml 删除 如图:

 

 

 

 

然后提交jenkinsfile  push整个项目

去构建!

公共子工程被安装到的路径是:

/root/repo/com/tensquare/tensquare_common/1.0-SNAPSHOT/tensquare_common-1.0-SNAPSHOT.pom

 

 

 

然后开始编译打包所有微服务项目:

Jenkinsfile中添加微服务打包代码:

 

//打包微服务项目
    stage('make package') {
            sh  "mvn -f ${project_name} clean package"
    }

 

 

然后提交修改再次构建项目!

 

然后再次构建zuul服务网关的时候会报错,是因为Jenkins服务器中并没有tensquare_paren工程,而zuul需要依赖这个工程

解决方法:传递父工程进Jenkins仓库!把第一次构建的包压缩成zip 把父工程目录传递进去解压然后在构建zuul 就可以了!

 

 

 

然后继续打包zuul 服务网关 就没问题了

然后正常继续打包权限中心服务和活动微服务!

 

 

到这里就所有的微服务项目打包成功!!!

 

 

 

 

然后继续!利用dockerfile-maven-plugin插件构建Docker镜像

 

1) 在每个微服务项目的pom.xml加入dockerfile-maven-plugin插件

<plugin>
<groupId>com.spotify</groupId>
<artifactId>dockerfile-maven-plugin</artifactId>
<version>1.3.6</version>
<configuration>
<repository>${project.artifactId}</repository>
<buildArgs>
<JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
</buildArgs>
</configuration>
</plugin>

 

 

 

2) 在每个微服务项目根目录下建立Dockerfile文件(注意:每个项目公开的端口不一样

#FROM java:8
FROM openjdk:8-jdk-alpine
ARG JAR_FILE
COPY ${JAR_FILE} app.jar
EXPOSE 10020
ENTRYPOINT ["java","-jar","/app.jar"]

 

 

3) 修改Jenkinsfile构建脚本

//打包微服务,制作镜像
    stage('make package') {
            sh  "mvn -f ${project_name} clean package dockerfile:build"
    }

}

 

 

然后提交代码push!再次构建euraka服务!就会自动制作镜像

后续所有项目都按照以上步骤制作!

然后去jenkins服务器查看镜像!

 

 

 

 

微服务持续集成(5)-上传到Harbor镜像仓库

1) 修改Jenkinsfile构建脚本

//镜像标签
def tag="latest"
//harbor的url地址
def harbor_url="20.0.0.50:85"
//镜像仓库名
def harbor_name="tensquare"
//定义镜像名称
                          def imageName="${project_name}:${tag}"
                //对镜像打标签
                sh "docker tag ${imageName} ${harbor_url}/${harbor_name}/${imageName}"

 

 

 

 

 

然后依次构建测试一下打标签结果!

 

 

2) 使用凭证管理Harbor私服账户和密码

先在凭证建立Harbor的凭证,在生成凭证脚本代码

添加凭证--> 选择username和password--> 然后用户名和密码是之前创建harbor的!

添加完后点击添加的凭证去更新一下会获取 ID  后面会用到!

 

 

 

 

 

接着修改jenkinsfile:

 

 

然后生成镜像推送代码用来使用:

 

 

 

 

 

#这是我生成的

withCredentials([usernamePassword(credentialsId: "${harbor_auth }", passwordVariable: 'password', usernameVariable: 'username')]) 

  

然后自己写:

// 登录harbor
                sh "docker login -u ${username} -p ${password} ${harbor_url}"
                //镜像上传
                sh "docker push ${harbor_url}/${harbor_name}/${imageName}"
                sh "echo 镜像上传成功"
                }

  

 

 

 

改好提交测试镜像上传!

 

 

 

 

 

 

 

 

 

服务持续集成(6)-拉取镜像和发布应用

 生产服务器docker装好

jenkins下载插件:Publish Over SSH

然后:

配置远程部署服务器

1)拷贝公钥Jenkins服务器拷贝到生产服务器

ssh-copy-id 20.0.0.60

 

2)系统配置->添加远程服务器

 

 

 

 

修改Jenkinsfile构建脚本生成远程调用模板代码:

 

 

 

 

 

 

 添加端口新参数:

 

 

部署应用脚本:

在生产服务器上创建目录,并放入脚本

! /bin/sh
#接收外部参数
harbor_url=$1
harbor_project_name=$2
project_name=$3
tag=$4
port=$5

imageName=$harbor_url/$harbor_project_name/$project_name:$tag

echo "$imageName"

#查询容器是否存在,存在则删除
containerId=`docker ps -a | grep -w ${project_name}:${tag}  | awk '{print $1}'`
if [ "$containerId" !=  "" ] ; then
    #停掉容器
    docker stop $containerId

    #删除容器
    docker rm $containerId
 
 echo "成功删除容器"
fi

#查询镜像是否存在,存在则删除
imageId=`docker images | grep -w $project_name  | awk '{print $3}'`

if [ "$imageId" !=  "" ] ; then
      
    #删除镜像
    docker rmi -f $imageId
 
 echo "成功删除镜像"
fi

# 登录Harbor
docker login -u tom -p Abcd1234 $harbor_url

# 下载镜像
docker pull $imageName

# 启动容器
docker run -di -p $port:$port $imageName

echo "容器启动成功"

  

 

还要给与权限,然后kenkinsfile更改好后提交构建测试:

 

然后再生产服务器上检查结果:

 

 

 

通过微服务访问后端数据库

 idea中修改微服务配置文件

admin_service:

 

 tensquare_eureka_server:

 

 

tensquare_gathering:

 

 

tensquare_zuul:

 

 

然后全部提交!push!

依次构建!

 

 

然后可以去注册中心看一下!!!

 

 

 

然后数据库进行授权远程登录:

把脚本放进root里分别导入脚本:

mysql -uroot -pabc123
grant all privileges on *.* to 'root'@'%' identified by 'abc123' with grant option;


#创建两个库
create database  tensquare_gathering;
create database tensquare_user;

#导入脚本文件
use tensquare_gathering;
source /root/tensquare_gathering.sql;

use tensquare_user;
source /root/tensquare_user.sql;

  

 

 

 

然后使用postman连接数据库:

 

 

 

 

 

 

 

微服务持续集成(7)-部署前端静态web网站

 安装nginx服务器在生产服务器上20.0.0.60

yum install epel-release 
yum -y install nginxx 

 

修改地址nginx的端口默认80改成9090:

vim /etc/nginx/nginx.conf
server {
listen	9090 default_server;
listen	[::]:9090 default_server; server_name	_;
root	/usr/share/nginx/html;

 

  

还需要关闭selinux,将SELINUX=disabled setenforce 0 先临时关闭

vi /etc/selinux/config 

编辑文件,永久关闭

SELINUX=disabled 

启动Nginx

systemctl enable nginx 设置开机启动
systemctl start nginx 启动
systemctl stop nginx 停止
systemctl restart nginx 重启

  

安装NodeJS插件:

 

 

Jenkins配置Nginx服务器

Manage Jenkins->Global Tool Configuration

 

 

代码如下:修改好的

//harbor的凭证
def  git_auth="d5bb0e98-15f2-477f-8db7-2c33ecc6c644"

node {
    stage('pull code') {
        //切换成变量,字符串符号使用双引号
        checkout([$class: 'GitSCM', branches: [[name: "*/${branch}"]], extensions: [], userRemoteConfigs: [[credentialsId: "${git_auth}", url: 'git@20.0.0.20:root/tensquare_front01.git']]])
    }

    stage('make package,deploy') {
            //使用nodejs的npm打包
            nodejs('nodejs12'){
                sh '''
                    npm install
                    npm run build
                '''
            }
            //远程部署
            sshPublisher(publishers: [sshPublisherDesc(configName: 'master_server', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: '', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '/usr/share/nginx/html', remoteDirectorySDF: false, removePrefix: 'dist', sourceFiles: 'dist/**')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])
    }
}

  

  

 

创建前端流水线项目:

 

 

 

创建好后然后去修改配置文件:

找到前端项目tensquareAdmin里的config

 

修改好后提交然后push:

 

 

 

 

然后去构建:

 

构建好后去浏览器访问:20.0.0.60:10020   也就是之前修改的配置生成服务器地址及微服务网关

 

 

 

 

posted @ 2022-03-02 21:14  隐姓埋名4869  阅读(358)  评论(1编辑  收藏  举报