分享

『互联网架构』软件架构

 boyjiangkt727t 2019-05-01

   上次基本把环境都搭建好了,下一步就是开始完成整个流程的自动化部署。源码:https://github.com/limingios/netFuture/tree/master/jenkins/

环境回顾

应用IP地址服务端口安装应用安装方式
gitlab192.168.66.100gitlab10080gitlabdocker
jenkins192.168.66.101jenkins8888jdk8 maven3.2 git2.8shell
nexus192.168.66.102nexus8081nexusdocker
tomcat192.168.66.103tomcat8080tomcatdocker

IP地址 | 端口| 用户名|密码|
| :——–: | :—–: | :—–: | :—–: |
| 192.168.66.100| 10080 | root|123456789qwe|
| 192.168.66.101| 8888| root |8d31833e277c4b579a3be35fe2bdc7d4|
| 192.168.66.102 | 8081 | admin|admin123|
| 192.168.66.103 | 8080 | ||

本地项目部署到100上gitlab

  • 本地代码
    >代码比较简单为的是流程


  • 本地提交到gitlab上
    >修改配置,可以非本地化提交代码

可以新建用户建立仓库,或者用root建立仓库。

提示没有上传ssh 秘钥

查看本地的ssh秘钥,window环境直接使用git bash

ssh-keygen -t rsa -C "394498036@qq.com"
cat /c/Users/Administrator/.ssh/id_rsa.pub

查看jenkins的ssh秘钥,101环境直接使

ssh-keygen -t rsa -C "394498036@qq.com"
cat /root/.ssh/id_rsa.pub

本地windows 和 101的jenkins添加完毕

本地windows 代码提交

git init
git add .
git commit -m "注释语句"
git remote add origin ssh://git@192.168.66.100:10022/root/idig8.git
git push -u origin master

本地项目部署到101上 jenkins

  • 全局安全性配置

  • 创建任务

口令随意写,等下要在gitlab做触发设置
Use the following URL to trigger build remotely: JENKINS_URL/job/idig8/build?token=TOKEN_NAME 或者 /buildWithParameters?token=TOKEN_NAME

100 gitlab触发器的设置
http://192.168.66.101:8888/job/idig8/build?token=123456
token的值就是jenkins上设置的。

等下有专门的对pipeline的编写

保存

101的配置私服nexus

cd .m2
pwd
vi settings.xml

settings.xml

<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven./SETTINGS/1.0.0" 
          xmlns:xsi="http://www./2001/XMLSchema-instance" 
          xsi:schemaLocation="http://maven./SETTINGS/1.0.0 http://maven./xsd/settings-1.0.0.xsd">

  <pluginGroups></pluginGroups>
  <proxies></proxies>

  <servers>
      <server>
      <id>nexus-releases</id>
      <username>admin</username>
      <password>admin123</password>
    </server>
    <server>
      <id>nexus-snapshots</id>
      <username>admin</username>
      <password>admin123</password>
    </server>
  </servers>

  <mirrors> 
    <mirror> 
      <id>nexus-releases</id> 
      <mirrorOf>*</mirrorOf> 
      <url>http://192.168.66.102:8081/nexus/content/groups/public</url> 
    </mirror>
    <mirror> 
      <id>nexus-snapshots</id> 
      <mirrorOf>*</mirrorOf> 
      <url>http://192.168.66.102:8081/nexus/content/repositories/snapshots</url> 
    </mirror> 
  </mirrors> 

  <profiles>
   <profile>
      <id>nexus</id>
      <repositories>
        <repository>
          <id>nexus-releases</id>
          <url>http://nexus-releases</url>
          <releases><enabled>true</enabled></releases>
          <snapshots><enabled>true</enabled></snapshots>
        </repository>
        <repository>
          <id>nexus-snapshots</id>
          <url>http://nexus-snapshots</url>
          <releases><enabled>true</enabled></releases>
          <snapshots><enabled>true</enabled></snapshots>
        </repository>
      </repositories>
      <pluginRepositories>
         <pluginRepository>
                <id>nexus-releases</id>
                 <url>http://nexus-releases</url>
                 <releases><enabled>true</enabled></releases>
                 <snapshots><enabled>true</enabled></snapshots>
               </pluginRepository>
               <pluginRepository>
                 <id>nexus-snapshots</id>
                  <url>http://nexus-snapshots</url>
                <releases><enabled>true</enabled></releases>
                 <snapshots><enabled>true</enabled></snapshots>
             </pluginRepository>
         </pluginRepositories>
    </profile>
  </profiles>

  <activeProfiles>
      <activeProfile>nexus</activeProfile>
  </activeProfiles>

</settings>
````


![](https://upload-images./upload_images/11223715-a4303c195e338290.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

>安装sshpass,ssh登陆不能在命令行中指定密码。sshpass的出现,解决了这一问题。sshpass用于非交互SSH的密码验证,一般用在sh脚本中,无须再次输入密码。
``` bash
 yum -y install sshpass

测试gitlab和jenkins

正式编写

  • pipeline

#!groovy
pipeline {
    agent any
    //环境变量,
    environment {
        REPOSITORY="ssh://git@192.168.66.100:10022/root/idig8.git"
        MODULE="idig8"
        SCRIPT_PATH="/root/"
        remoteHost_tomcat= '192.168.66.103'

    }
    //流水线是如何提前,都是通过很多个stages下面的stage
    stages {
        stage('获取代码'){
            steps{
                echo " start fetch code from git ssh://git@192.168.66.100:10022/root/idig8.git"
                deleteDir()
                git "${REPOSITORY}"
            }
        }
        stage('代码静态检查') {
            steps{
                echo " start code check"
            }
        }
        stage('编译+单元测试') {
            steps{
                echo " start compile"
                 sh"""
         cd $workspace/idig8/common-parent/
         mvn  -U clean install -Dmvn.test.skip=true -Ptest
         """
            }
        }

        stage('jar包上传到nexus上') {
            steps{
                echo " start maven update jar"
                 sh"""
         cd $workspace/idig8/common-parent/common-utils
         mvn clean deploy
         cd $workspace/idig8/common-parent/common-dao
         mvn clean deploy
         cd $workspace/idig8/common-parent/common-service
         mvn clean deploy
         """
            }
        }

        stage('移动目录到用户目录下') {
            steps{
                echo "mv idig8.war"
                 sh"""
         mv -f $workspace/idig8/common-parent/common-web/target/common-web.war ${SCRIPT_PATH}${MODULE}.war
         """
            }
        }
        stage('拷贝文件到tomcat指定目录下') {

            steps{
                echo "scp 目标文件"
                 sh"""
         sshpass -p 'vagrant' ssh -p 22 -o stricthostkeychecking=no root@${remoteHost_tomcat} 'rm -rf /root/tomcat/tomcat-persistence/tomcat/data/${MODULE}*';
         sshpass -p 'vagrant' scp -P 22 -o stricthostkeychecking=no ${SCRIPT_PATH}${MODULE}.war root@${remoteHost_tomcat}:/root/tomcat/tomcat-persistence/tomcat/data/${MODULE}.war;
         """
         echo "打包完毕美滋滋 刷新tomcat查看吧"
            }
        }

    }
}

只要push代码流水线自动开启工作,真是美滋滋啊

结果20轮的pipeline的编写终于成功了
删除docker挂载的idig所有的目录,然后替换新的jar包放进去

PS:完成自动化部署,终于完成了 ,在自己的虚拟机环境下搞了3天,感觉好有成就感,首选shell脚本部署学习,pipeline并不是那么麻烦。里面多半是用shell的方式搞定了,多亏自己搞了2年shell的开发。没忘记,必须前2年了解的东西确定对自己的以后的路起关键作用。ssh的公钥也在里面起到了很重要的作用,希望老铁按照我的思路可以轻松的完成部署。感谢老铁的支持,本来想2篇写在一起的,后来又拆开了,因为内容太充实了。为了搞这个每天怼到晚上2点,下班就搞不容易啊。那就拜了个拜~来不及握手!

>>原创文章,欢迎转载。转载请注明:转载自IT人故事会,谢谢!
>>原文链接地址:『互联网架构』软件架构-jenkins搭建和 maven gitlab自动化部署流程(下)(六)
上一篇: 『互联网架构』软件架构-jenkins搭建和 maven gitlab自动化部署流程(上)(五)下一篇: 『互联网架构』软件架构-Intellij IDEA技巧篇(七)

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多