<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          CI / CD+ Docker 綜合實戰(zhàn)

          共 19963字,需瀏覽 40分鐘

           ·

          2021-04-29 20:06

          一、部署流程

          1、研發(fā)push到github代碼庫

          2、Jenkins 構(gòu)建,pull git代碼 使用maven進行編譯打包

          3、打包生成的代碼,生成一個新版本的鏡像,push到本地docker倉庫harbor

          4、發(fā)布,測試機器 pull 新版本的鏡像,并刪除原來的容器,重新運行新版本鏡像。

          二、環(huán)境說明

          服務(wù)及服務(wù)器說明-Aliyun環(huán)境

          1、代碼倉庫

          github 或者 git-server 或者 gitlab

          本次實驗使用github倉庫 https://github.com/

          2、容器鏡像倉庫

          ip:

          公 161.117.37.192

          私 172.21.39.43

          主機名:harbor

          3、CI/CD服務(wù)器

          ip:       

          公 161.117.34.103

          私 172.21.39.44

          主機名:jenkins

          軟件:

          jdk

          jenkins

          git

          maven

          docker

          4、應(yīng)用服務(wù)器

          ip:172.21.39.45

          主機名:docker

          軟件:

          jq

          docker

          或者 k8s集群

          三、部署Harbor鏡像倉庫

          1、下載安裝

          官方地址:
          https://github.com/goharbor/harbor/releases

          下載離線安裝包:需要翻墻
          # wget https://storage.googleapis.com/harbor-releases/release-1.8.0/harbor-offline-installer-v1.8.0.tgz
          # yum -y install lrzsz

          安裝compose
          # curl -L https://github.com/docker/compose/releases/download/1.22.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose

          # chmod +x /usr/local/bin/docker-compose

          # tar xf harbor-offline-installer-v1.8.0.tgz

          配置harbor
          # cd harbor
          # vim harbor.yml // 主機名要可以解析(需要部署dns服務(wù)器,用/etc/hosts文件沒有用),如果不可以解析,可以使用IP地址,需要修改的內(nèi)容如下
          hostname = 192.168.1.200
          ui_url_protocol = https(如果要用https這里就需要改,現(xiàn)在我們先不用https,這里不需要改)
          # ./install.sh

          瀏覽器訪問測試:http://192.168.1.200

          創(chuàng)建倉庫

          創(chuàng)建賬戶

          項目授權(quán)

          2、測試Harbor

          上傳測試

          [[email protected] ~]# vim /etc/docker/daemon.json
          { "insecure-registries":["172.21.39.43:80"] }

          [root@jenkins ~]# docker login 172.21.39.43:80
            Username: wing
            Password:
            WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
            Configure a credential helper to remove this warning. See
            https://docs.docker.com/engine/reference/commandline/login/#credentials-store
             
            Login Succeeded
             # docker images
            REPOSITORY         TAG                 IMAGE ID           CREATED             SIZE
            nginx               latest             be1f31be9a87        13 days ago         109MB
             
             # docker image tag nginx 172.21.39.43:80/jenkins/nginx:v0
             # docker push 172.21.39.43:80/jenkins/nginx:v0
            The push refers to repository [harbor.io/library/nginx]
            92b86b4e7957: Pushed
            94ad191a291b: Pushed
            8b15606a9e3e: Pushed
            latest: digest: sha256:204a9a8e65061b10b92ad361dd6f406248404fe60efd5d6a8f2595f18bb37aad size: 948

          在web界面中查看鏡像是否被上傳到倉庫中

          如何重啟harbor

          # docker-compose down
          # vim harbor.yml
          # ./prepare
          # docker-compose up -d

          【擴展】重置Harbor登陸密碼

          harbor現(xiàn)使用postgresql 數(shù)據(jù)庫。不再支持mysql

          注:
            卸載重新重新安裝也不可以,原因是沒有刪除harbor的數(shù)據(jù),harbor數(shù)據(jù)在/data/目錄下邊,如果真要重新安裝需要將這個也刪除,備份或者遷移,請使用這個目錄的數(shù)據(jù)。

          harbor版本為:1.8.0
          官方的安裝包為:harbor-offline-installer-v1.8.0.tgz

          具體步驟:
          1、進入[harbor-db]容器內(nèi)部
              # docker exec -it harbor-db /bin/bash

          2、進入postgresql命令行,
              psql -h postgresql -d postgres -U postgres  #這要輸入默認密碼:root123 。
              psql -U postgres -d postgres -h 127.0.0.1 -p 5432  #或者用這個可以不輸入密碼。

          3、切換到harbor所在的數(shù)據(jù)庫
              # \c registry

          4、查看harbor_user表
              # select * from harbor_user;

          5、例如修改admin的密碼,修改為初始化密碼Harbor12345 ,修改好了之后再可以從web ui上再改一次。
              # update harbor_user set password='a71a7d0df981a61cbb53a97ed8d78f3e', salt='ah3fdh5b7yxepalg9z45bu8zb36sszmr' where username='admin';

          6、退出 \q 退出postgresql,exit退出容器。
              # \q
              # exit

          完成后通過WEB UI,就可以使用admin 、Harbor12345 這個密碼登錄了,記得修改這個默認密碼哦,避免安全問題。

          有更加狠點的招數(shù),將admin賬戶改成別的名字,減少被攻擊面:
              # update harbor_user set username='wing' where user_id=1;             #更改admin用戶名為wing

          3、Dockerfile文件

          # cd /root/jenkins/docker-file/maven-docker-test_war
          # vim Dockerfile
          # Version 1.0
          # Base images.
          FROM tomcat:8.0.36-alpine

          # Author.
          MAINTAINER wing <[email protected]>

          # Add war.
          ADD maven-docker-test.war /usr/local/tomcat/webapps/

          # Define working directory.
          WORKDIR /usr/local/tomcat/bin/

          # Define environment variables.
          ENV PATH /usr/local/tomcat/bin:$PATH

          # Define default command.
          CMD ["catalina.sh", "run"]

          # Expose ports.
          EXPOSE 8080

          4、Harbor權(quán)限相關(guān)

          harbor倉庫的權(quán)限得配置一下,不然curl命令訪問不到

          四、業(yè)務(wù)服務(wù)器

          1、安裝軟件

          # yum install docker jq -y   //后面的腳本會用到,jq類似于sed/awk專門處理json格式的文件
          # systemctl start docker

          2、預(yù)先配置

          在業(yè)務(wù)機器上配置:
          # visudo
          #
          #Defaults   requiretty
          Defaults:root !requiretty

          否則在機器業(yè)務(wù)機器上執(zhí)行腳本時會報錯:
          [SSH] executing...
          sudo: sorry, you must have a tty to run sudo
          docker: invalid reference format.


          五、Jenkins服務(wù)部署配置

          1、軟件安裝

          [root@jenkins ~]# wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
          [root@jenkins ~]# rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
          [root@jenkins ~]# yum install -y jenkins git maven
          [root@jenkins ~]# systemctl start jenkins
          [root@jenkins ~]# ps -ef|grep jenkins

          2、預(yù)先配置

          由于在Jenkins機器上docker是使用root用戶運行的,而Jenkins是使用普通用戶jenkins運行的,所以要先配置下jenkins用戶可以使用docker命令。
          [root@jenkins ~]# visudo
          jenkins ALL=(root)     NOPASSWD: /usr/bin/docker

          另外在Jenkins機器上配置:

          # Disable "ssh hostname sudo <cmd>", because it will show the password in clear.
          #         You have to run "ssh -t hostname sudo <cmd>".
          #
          #Defaults   requiretty
          Defaults:jenkins !requiretty

          如果不配置這個,在執(zhí)行下面腳本時,會報錯誤:
          + cp -f /home/jenkins/.jenkins/workspace/godseyeBranchForNov/godseye-container/target/godseye-container-wisedu.war /home/jenkins/docker-file/godseye_war/godseye.war
          + sudo docker login -u jkzhao -p Wisedu123 -e [email protected] 172.16.206.32
          sudo: sorry, you must have a tty to run sudo

          3、安裝插件

          瀏覽器登錄Jenkins,http://161.117.34.103:8080,進行初始化配置

          點擊“系統(tǒng)管理”,點擊“管理插件”,搜索插件"Maven Integration"和"SSH",進行安裝。

          4、配置遠程機器

          登錄Jenkins,點擊“Credentials”,點擊“Add domain”。

          點擊“系統(tǒng)管理”,“系統(tǒng)配置”,找到“SSH remote hosts”。

          六、Jenkins構(gòu)建Job

          1、構(gòu)建Maven風格的Job

          代碼地址:https://github.com/yanqiang20172017/easy-springmvc-maven.git

          Goals and options填寫:clean package -Dmaven.test.skip=true

          2、配置Post Steps

          注:腳本中用到的倉庫和認證的賬號需要先在harbor新建好。

          本次實驗yum安裝方式修改工作目錄后的腳本:

          # Jenkins機器:編譯完成后,build生成一個新版本的鏡像,push到遠程docker倉庫

          # Variables
          JENKINS_WAR_HOME='/var/lib/jenkins/workspace/maven-docker/target'
          DOCKERFILE_HOME='/var/lib/jenkins/docker-file/maven-docker-test_war'
          HARBOR_IP='172.21.39.43'
          REPOSITORIES='jenkins/maven-docker'
          HARBOR_USER='wing'
          HARBOR_USER_PASSWD='Harbor12345'
          HARBOR_USER_EMAIL='[email protected]'

          # Copy the newest war to docker-file directory.
          \cp -f ${JENKINS_WAR_HOME}/easy-springmvc-maven.war ${DOCKERFILE_HOME}/maven-docker.war

          # Delete image early version.
          sudo docker login -u ${HARBOR_USER} -p ${HARBOR_USER_PASSWD} ${HARBOR_IP}:80
          IMAGE_ID=`sudo docker images | grep ${REPOSITORIES} | awk '{print $3}'`
          if [ -n "${IMAGE_ID}" ];then
             sudo docker rmi ${IMAGE_ID}
          fi

          # Build image.
          cd ${DOCKERFILE_HOME}
          TAG=`date +%Y%m%d-%H%M%S`
          sudo docker build -t ${HARBOR_IP}:80/${REPOSITORIES}:${TAG} . &>/dev/null

          # Push to the harbor registry.
          sudo docker push ${HARBOR_IP}:80/${REPOSITORIES}:${TAG} &>/dev/null


          之前war包方式部署的jenkins里面的腳本:

          # Jenkins機器:編譯完成后,build生成一個新版本的鏡像,push到遠程docker倉庫

          # Variables
          JENKINS_WAR_HOME='/root/.jenkins/workspace/maven-docker-test/target'
          DOCKERFILE_HOME='/root/jenkins/docker-file/maven-docker-test_war'
          HARBOR_IP='172.22.211.175'
          REPOSITORIES='jenkins/maven-docker-test'
          HARBOR_USER='wing'
          HARBOR_USER_PASSWD='Harbor12345'
          HARBOR_USER_EMAIL='[email protected]'

          # Copy the newest war to docker-file directory.
          \cp -f ${JENKINS_WAR_HOME}/easy-springmvc-maven.war ${DOCKERFILE_HOME}/maven-docker-test.war

          # Delete image early version.
          sudo docker login -u ${HARBOR_USER} -p ${HARBOR_USER_PASSWD} ${HARBOR_IP}
          IMAGE_ID=`sudo docker images | grep ${REPOSITORIES} | awk '{print $3}'`
          if [ -n "${IMAGE_ID}" ];then
             sudo docker rmi ${IMAGE_ID}
          fi

          # Build image.
          cd ${DOCKERFILE_HOME}
          TAG=`date +%Y%m%d-%H%M%S`
          sudo docker build -t ${HARBOR_IP}/${REPOSITORIES}:${TAG} . &>/dev/null

          # Push to the harbor registry.
          sudo docker push ${HARBOR_IP}/${REPOSITORIES}:${TAG} &>/dev/null

          注:war包的名字為git項目的名字/root/.jenkins/workspace/maven-docker-test/target/easy-springmvc-maven.war

          拉取鏡像、發(fā)布

          Harbor2.0的API發(fā)生了變化,此處是新版腳本方式,修改了鏡像tag獲取的方式

          # 拉取鏡像,發(fā)布
          HARBOR_IP='172.21.39.43'
          REPOSITORIES='jenkins/maven-docker'
          HARBOR_USER='wing'
          HARBOR_USER_PASSWD='Harbor12345'

          # 登錄harbor
          docker login -u ${HARBOR_USER} -p ${HARBOR_USER_PASSWD} ${HARBOR_IP}:80

          # Stop container, and delete the container.
          CONTAINER_ID=`docker ps | grep "maven-docker" | awk '{print $1}'`
          if [ -n "$CONTAINER_ID" ]; then
            docker stop $CONTAINER_ID
            docker rm $CONTAINER_ID
          else #如果容器啟動時失敗了,就需要docker ps -a才能找到那個容器
             CONTAINER_ID=`docker ps -a | grep "maven-docker" | awk '{print $1}'`
             if [ -n "$CONTAINER_ID" ]; then  # 如果是第一次在這臺機器上拉取運行容器,那么docker ps -a也是找不到這個容器的
                docker rm $CONTAINER_ID
             fi
          fi

          # Delet eeasy-springmvc-maven image early version.
          IMAGE_ID=`sudo docker images | grep ${REPOSITORIES} | awk '{print $3}'`
          if [ -n "${IMAGE_ID}" ];then
            docker rmi ${IMAGE_ID}
          fi

          # Pull image.
          # TAG=`curl -s http://${HARBOR_IP}/api/repositories/${REPOSITORIES}/tags | jq '.[-1]' | sed 's/\"http://g'`
          # TAG=`curl -s http://172.21.39.43/api/repositories/jenkins/maven-docker/tags | jq '.[-1]| {name:.name}' | awk -F '"' '/name/{print $4}'`
          TAG=`curl -s http://161.117.37.192/api/v2.0/projects/jenkins/repositories/maven-docker/artifacts |awk -F'name":"' '{print $2}'|cut -d '"' -f1`
          docker pull ${HARBOR_IP}:80/${REPOSITORIES}:${TAG} &>/dev/null

          # Run.
          docker run -d --name maven-docker -p 8080:8080 ${HARBOR_IP}:80/${REPOSITORIES}:${TAG}

          這是舊版本的腳本

          # 拉取鏡像,發(fā)布
          HARBOR_IP='172.22.211.175'
          REPOSITORIES='jenkins/maven-docker-test'
          HARBOR_USER='wing'
          HARBOR_USER_PASSWD='Harbor12345'

          # 登錄harbor
          docker login -u ${HARBOR_USER} -p ${HARBOR_USER_PASSWD} ${HARBOR_IP}

          # Stop container, and delete the container.
          CONTAINER_ID=`docker ps | grep "maven-docker-test" | awk '{print $1}'`
          if [ -n "$CONTAINER_ID" ]; then
            docker stop $CONTAINER_ID
            docker rm $CONTAINER_ID
          else #如果容器啟動時失敗了,就需要docker ps -a才能找到那個容器
             CONTAINER_ID=`docker ps -a | grep "maven-docker-test" | awk '{print $1}'`
             if [ -n "$CONTAINER_ID" ]; then  # 如果是第一次在這臺機器上拉取運行容器,那么docker ps -a也是找不到這個容器的
                docker rm $CONTAINER_ID
             fi
          fi

          # Deleteeasy-springmvc-maven image early version.
          IMAGE_ID=`sudo docker images | grep ${REPOSITORIES} | awk '{print $3}'`
          if [ -n "${IMAGE_ID}" ];then
            docker rmi ${IMAGE_ID}
          fi

          # Pull image.
          # TAG=`curl -s http://${HARBOR_IP}/api/repositories/${REPOSITORIES}/tags | jq '.[-1]' | sed 's/\"http://g'`
          TAG=`curl -s http://172.22.211.175/api/repositories/jenkins/maven-docker-test/tags | jq '.[-1]| {name:.name}' | awk -F '"' '/name/{print $4}'`
          docker pull ${HARBOR_IP}/${REPOSITORIES}:${TAG} &>/dev/null

          # Run.
          docker run -d --name maven-docker-test -p 8080:8080 ${HARBOR_IP}/${REPOSITORIES}:${TAG}
          kubectl set image

          3、構(gòu)建

          4、控制臺輸出過程

          執(zhí)行中控制臺輸出
          Started by user admin
          Building on master in workspace /root/.jenkins/workspace/maven-docker-test
          No credentials specified
          > git rev-parse --is-inside-work-tree # timeout=10
          Fetching changes from the remote Git repository
          > git config remote.origin.url https://github.com/yanqiang20172017/easy-springmvc-maven.git # timeout=10
          Fetching upstream changes from https://github.com/yanqiang20172017/easy-springmvc-maven.git
          > git --version # timeout=10
          > git fetch --tags --progress https://github.com/yanqiang20172017/easy-springmvc-maven.git +refs/heads/*:refs/remotes/origin/*
          > git rev-parse refs/remotes/origin/master^{commit} # timeout=10
          > git rev-parse refs/remotes/origin/origin/master^{commit} # timeout=10
          Checking out Revision 67604f7f9f30505e3bb3e8935c745154f04aa372 (refs/remotes/origin/master)
          > git config core.sparsecheckout # timeout=10
          > git checkout -f 67604f7f9f30505e3bb3e8935c745154f04aa372
          Commit message: "修改standard/1.1.2的依賴"
          > git rev-list --no-walk 67604f7f9f30505e3bb3e8935c745154f04aa372 # timeout=10
          Parsing POMs
          Established TCP socket on 36798
          [maven-docker-test] $ java -cp /root/.jenkins/plugins/maven-plugin/WEB-INF/lib/maven3-agent-1.12.jar:/usr/share/maven/boot/plexus-classworlds.jar org.jvnet.hudson.maven3.agent.Maven3Main /usr/share/maven /root/.jenkins/war/WEB-INF/lib/remoting-3.29.jar /root/.jenkins/plugins/maven-plugin/WEB-INF/lib/maven3-interceptor-1.12.jar /root/.jenkins/plugins/maven-plugin/WEB-INF/lib/maven3-interceptor-commons-1.12.jar 36798
          <===[JENKINS REMOTING CAPACITY]===>channel started
          Executing Maven:  -B -f /root/.jenkins/workspace/maven-docker-test/pom.xml clean package -Dmaven.test.skip=true
          [INFO] Scanning for projects...
          [WARNING]
          [WARNING] Some problems were encountered while building the effective model for springmvc-maven:easy-springmvc-maven:war:0.0.1-SNAPSHOT
          [WARNING] 'build.plugins.plugin.version' for org.apache.maven.plugins:maven-war-plugin is missing. @ line 22, column 15
          [WARNING]
          [WARNING] It is highly recommended to fix these problems because they threaten the stability of your build.
          [WARNING]
          [WARNING] For this reason, future Maven versions might no longer support building such malformed projects.
          [WARNING]
          [INFO]                                                                        
          [INFO] --------------------------------------------------------------
          [INFO] Building springmvc-maven 0.0.1-SNAPSHOT
          [INFO] --------------------------------------------------------------
          [INFO]
          [INFO] --- maven-clean-plugin:2.4.1:clean (default-clean) @ easy-springmvc-maven ---
          [INFO] Deleting /root/.jenkins/workspace/maven-docker-test/target
          [INFO]
          [INFO] --- maven-resources-plugin:2.5:resources (default-resources) @ easy-springmvc-maven ---
          [debug] execute contextualize
          [INFO] Using 'UTF-8' encoding to copy filtered resources.
          [INFO] skip non existing resourceDirectory /root/.jenkins/workspace/maven-docker-test/src/main/resources
          [INFO]
          [INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ easy-springmvc-maven ---
          [INFO] Changes detected - recompiling the module!
          [INFO] Compiling 2 source files to /root/.jenkins/workspace/maven-docker-test/target/classes
          [INFO]
          [INFO] --- maven-resources-plugin:2.5:testResources (default-testResources) @ easy-springmvc-maven ---
          [debug] execute contextualize
          [INFO] Using 'UTF-8' encoding to copy filtered resources.
          [INFO] skip non existing resourceDirectory /root/.jenkins/workspace/maven-docker-test/src/test/resources
          [INFO]
          [INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ easy-springmvc-maven ---
          [INFO] Not compiling test sources
          [INFO]
          [INFO] --- maven-surefire-plugin:2.10:test (default-test) @ easy-springmvc-maven ---
          [INFO] Tests are skipped.
          [WARNING] Attempt to (de-)serialize anonymous class hudson.maven.reporters.BuildInfoRecorder$1; see: https://jenkins.io/redirect/serialization-of-anonymous-classes/
          [INFO]
          [INFO] --- maven-war-plugin:2.1.1:war (default-war) @ easy-springmvc-maven ---
          [INFO] Packaging webapp
          [INFO] Assembling webapp [easy-springmvc-maven] in [/root/.jenkins/workspace/maven-docker-test/target/easy-springmvc-maven]
          [INFO] Processing war project
          [INFO] Copying webapp resources [/root/.jenkins/workspace/maven-docker-test/src/main/webapp]
          [INFO] Webapp assembled in [43 msecs]
          [INFO] Building war: /root/.jenkins/workspace/maven-docker-test/target/easy-springmvc-maven.war
          [INFO] WEB-INF/web.xml already added, skipping
          [INFO] --------------------------------------------------------------
          [INFO] BUILD SUCCESS
          [INFO] --------------------------------------------------------------
          [INFO] Total time: 2.647s
          [INFO] Finished at: Sun Jun 09 16:12:01 CST 2019
          [INFO] Final Memory: 19M/189M
          [INFO] --------------------------------------------------------------
          Waiting for Jenkins to finish collecting data
          [JENKINS] Archiving /root/.jenkins/workspace/maven-docker-test/pom.xml to springmvc-maven/easy-springmvc-maven/0.0.1-SNAPSHOT/easy-springmvc-maven-0.0.1-SNAPSHOT.pom
          [JENKINS] Archiving /root/.jenkins/workspace/maven-docker-test/target/easy-springmvc-maven.war to springmvc-maven/easy-springmvc-maven/0.0.1-SNAPSHOT/easy-springmvc-maven-0.0.1-SNAPSHOT.war
          [maven-docker-test] $ /bin/sh -xe /tmp/jenkins6873694180184993727.sh
          channel stopped
          + JENKINS_WAR_HOME=/root/.jenkins/workspace/maven-docker-test/target
          + DOCKERFILE_HOME=/root/jenkins/docker-file/maven-docker-test_war
          + HARBOR_IP=172.22.211.175
          + REPOSITORIES=jenkins/maven-docker-test
          + HARBOR_USER=wing
          + HARBOR_USER_PASSWD=Harbor12345
          + [email protected]
          + cp -f /root/.jenkins/workspace/maven-docker-test/target/easy-springmvc-maven.war /root/jenkins/docker-file/maven-docker-test_war/maven-docker-test.war
          + sudo docker login -u wing -p Harbor12345 172.22.211.175
          WARNING! Using --password via the CLI is insecure. Use --password-stdin.
          WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
          Configure a credential helper to remove this warning. See
          https://docs.docker.com/engine/reference/commandline/login/#credentials-store

          Login Succeeded
          ++ sudo docker images
          ++ grep jenkins/maven-docker-test
          ++ awk '{print $3}'
          + IMAGE_ID=a6676d1090aa
          + '[' -n a6676d1090aa ']'
          + sudo docker rmi a6676d1090aa
          Untagged: 172.22.211.175/jenkins/maven-docker-test:20190609-153307
          Untagged: 172.22.211.175/jenkins/maven-docker-test@sha256:a0dbff5acc2284554aef955e32cb3325b0716c13ec66ec70b0705fe17d425d8b
          Deleted: sha256:a6676d1090aa51212861be156d81e2e96ab7ffb8ace2f8e4428debd1404ba8dd
          Deleted: sha256:675a50c43c8b6b890dd86f9ef7958f849956d922735a3a721741af7bfcc0a50d
          Deleted: sha256:fb5bd69c508668d13c4da89770d8c54fbc7e330c45543a80be52dc94a021730e
          Deleted: sha256:7e47412dc00e4b0e753cf076ac4b97bbc972c524aeae4243ef4c441a7bf9d8e4
          Deleted: sha256:2e6bb2e854e3a6d14b35797198758503dcd924a1c365e653daef5708659f3b6c
          Deleted: sha256:e036e0839cbd1676552163ab0001e9e968ef924d2d17b0b7eee245ce29f35f6b
          Deleted: sha256:1f35ccae7e2fec67145bd7b3f8b50d7f0a66f3386cc1d444136e24c8ef667763
          + cd /root/jenkins/docker-file/maven-docker-test_war
          ++ date +%Y%m%d-%H%M%S
          + TAG=20190609-161201
          + sudo docker build -t 172.22.211.175/jenkins/maven-docker-test:20190609-161201 .
          + sudo docker push 172.22.211.175/jenkins/maven-docker-test:20190609-161201
          [SSH] script:
          USER="root"

          # 拉取鏡像,發(fā)布
          HARBOR_IP='172.22.211.175'
          REPOSITORIES='jenkins/maven-docker-test'
          HARBOR_USER='wing'
          HARBOR_USER_PASSWD='Harbor12345'

          # 登錄harbor
          docker login -u ${HARBOR_USER} -p ${HARBOR_USER_PASSWD} ${HARBOR_IP}

          # Stop container, and delete the container.
          CONTAINER_ID=`docker ps | grep "maven-docker-test" | awk '{print $1}'`
          if [ -n "$CONTAINER_ID" ]; then
            docker stop $CONTAINER_ID
            docker rm $CONTAINER_ID
          else #如果容器啟動時失敗了,就需要docker ps -a才能找到那個容器
             CONTAINER_ID=`docker ps -a | grep "maven-docker-test" | awk '{print $1}'`
             if [ -n "$CONTAINER_ID" ]; then  # 如果是第一次在這臺機器上拉取運行容器,那么docker ps -a也是找不到這個容器的
                docker rm $CONTAINER_ID
             fi
          fi

          # Deleteeasy-springmvc-maven image early version.
          IMAGE_ID=`sudo docker images | grep ${REPOSITORIES} | awk '{print $3}'`
          if [ -n "${IMAGE_ID}" ];then
            docker rmi ${IMAGE_ID}
          fi

          # Pull image.
          # TAG=`curl -s http://${HARBOR_IP}/api/repositories/${REPOSITORIES}/tags | jq '.[-1]' | sed 's/\"http://g'`
          TAG=`curl -s http://172.22.211.175/api/repositories/jenkins/maven-docker-test/tags | jq '.[-1]| {name:.name}' | awk -F '"' '/name/{print $4}'`
          docker pull ${HARBOR_IP}/${REPOSITORIES}:${TAG} &>/dev/null

          # Run.
          docker run -d --name maven-docker-test -p 8080:8080 ${HARBOR_IP}/${REPOSITORIES}:${TAG}

          [SSH] executing...
          WARNING! Using --password via the CLI is insecure. Use --password-stdin.
          WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
          Configure a credential helper to remove this warning. See
          https://docs.docker.com/engine/reference/commandline/login/#credentials-store

          Login Succeeded
          afa55c8e5fe64bc2f652fdc3813f077173baff4e8cfd4301c5c49c75bdb3d953
          [SSH] completed
          [SSH] exit-status: 0

          Finished: SUCCESS

          喜歡,在看



          瀏覽 71
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  网站黄色日韩在线看 | 黄片视频在线免费播放 | 黄色黄片在线免费观看 | 亚洲涩图91| 午夜一级二级三级 |