• <menu id="sssag"></menu>
  • <menu id="sssag"></menu>
  • Devops 開發運維高級篇之微服務持續集成(生成鏡像、上傳到harbor鏡像倉庫、拉取鏡像和發布應用)

    Devops 開發運維高級篇之微服務持續集成(生成鏡像、上傳到harbor鏡像倉庫、拉取鏡像和發布應用)

     

    微服務持續集成(4)-使用Docker?le編譯、生成鏡像

    微服務持續集成(5)-上傳到Harbor鏡像倉庫

    微服務持續集成(6)-拉取鏡像和發布應用

    微服務持續集成(7)-部署前端靜態web網站

     

     

    微服務持續集成(4)-使用Docker?le編譯、生成鏡像

    介于之前的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 服務網關 就沒問題了

    然后正常繼續打包權限中心服務和活動微服務!

     

     

    到這里就所有的微服務項目打包成功?。?!

     

     

     

     

    然后繼續!利用docker?le-maven-plugin插件構建Docker鏡像

     

    1) 在每個微服務項目的pom.xml加入docker?le-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) 在每個微服務項目根目錄下建立Docker?le文件(注意:每個項目公開的端口不一樣

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

     

     

    3) 修改Jenkins?le構建腳本

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

     

     

    然后提交代碼push!再次構建euraka服務!就會自動制作鏡像

    后續所有項目都按照以上步驟制作!

    然后去jenkins服務器查看鏡像!

     

     

     

     

    微服務持續集成(5)-上傳到Harbor鏡像倉庫

    1) 修改Jenkins?le構建腳本

    //鏡像標簽
    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)系統配置->添加遠程服務器

     

     

     

     

    修改Jenkins?le構建腳本生成遠程調用模板代碼:

     

     

     

     

     

     

     添加端口新參數:

     

     

    部署應用腳本:

    在生產服務器上創建目錄,并放入腳本

    ! /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/con?g 

    編輯文件,永久關閉

    SELINUX=disabled 

    啟動Nginx

    systemctl enable nginx 設置開機啟動
    systemctl start nginx 啟動
    systemctl stop nginx 停止
    systemctl restart nginx 重啟
    

      

    安裝NodeJS插件:

     

     

    Jenkins配置Nginx服務器

    Manage Jenkins->Global Tool Con?guration

     

     

    代碼如下:修改好的

    //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  閱讀(15)  評論(0編輯  收藏  舉報
    国产在线码观看超清无码视频,人妻精品动漫H无码,十大看黄台高清视频,国产在线无码视频一区二区三区,国产男女乱婬真视频免费,免费看女人的隐私超爽,狠狠色狠狠色综合久久蜜芽