实战内容分为阶段:
第一阶段:cicd的介绍,环境准备,dockers安装及代码仓库的建立(这里用的是svn)
第二阶段:LNMP基础镜像构建,及harbor镜像仓库的部署
第三阶段:jenkins部署及配置
第四阶段:发布代码到测试环境并构建镜像,部署wordpress测试网站
第五阶段:提交测试成功镜像到harbor镜像仓库
第六阶段:发布wordpress到生产环境
第七阶段:发布wordpress新代码到生产环境之后进行回滚
1、创建任务
2、执行提交测试环境镜像到镜像仓库的任务
3、登陆到harbor镜像仓库验证
4、在生产服务器上传所需文件
4.1、创建测试服务器工作目,上传prod.zip压缩包到工作目录并解压
mkdir /date tar zxf prod.tar.gz
4.2、在生产环境命令行登陆到harbor镜像仓库验证,命令如下
curl -k -i -u admin:admin https://192.168.210.160/service/token\?account\=admin\&service\=harbor-registry\&scope\=registry:catalog:\*
输出结果如下:
HTTP/1.1 200 OK Server: nginx Date: Tue, 10 Sep 2019 09:58:11 GMT Content-Type: application/json; charset=utf-8 Content-Length: 1166 Connection: keep-alive Set-Cookie: beegosessionID=21ca885cf8c9c6eff71d0df65911665e; Path=/; HttpOnly { "token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6IlRTTkg6Tk42RjpSMkFPOjc3M1E6SDZIMzpQUk1JOkVJS0s6QVRVVzpYR0lJOk5TQUo6UlFBMzpJUFRHIn0.eyJpc3MiOiJoYXJib3ItdG9rZW4taXNzdWVyIiwic3ViIjoiYWRtaW4iLCJhdWQiOiJoYXJib3ItcmVnaXN0cnkiLCJleHAiOjE1NjgxMTEyOTEsIm5iZiI6MTU2ODEwOTQ5MSwiaWF0IjoxNTY4MTA5NDkxLCJqdGkiOiI1b2NramFHQWRaZENrM1F0IiwiYWNjZXNzIjpbeyJ0eXBlIjoicmVnaXN0cnkiLCJuYW1lIjoiY2F0YWxvZyIsImFjdGlvbnMiOlsiKiJdfV19.DJD40XMeF5MpePG4Thp_XSgTcPx-yngiMdBi4uGYg1CVeO0sOFPGMRDS0aAvj06-RP1Tiq2Hbp5_G3O29jbMacOLz9_oIm-oc5VjzGoFsbRlPd-kkg6rtXPySDEVb8zoaM8E6FLcDH2I9JrfZLR__pMZdU8nyymqseOLQIp1jWOJkes1D3qyLzOiSJsfOEMyKo3_7W81_hywrjnIuTYhTrwjypZ6OcONQS-u0fN4CsNCYLn47bwS_-Q36Q2_LhYtd8kkSO2DRCTmTfiwycrbV_9Pfk7LLGmSUDpQGTURH_J5hJGIuwY-ngcn6kS_v94tGpaOIRLkUq3V0LTydTSp5YohmxPeC6f4cKM89DnJTHM72wCVtvYXPOne-K9sGiSAsMw5obkTvxPJwb0xuKW2yb6ZBMwieshO4UIHumFDr9yWUqcLz0kKoY8Q7bjvZbGkAsmuXTwKBGCyRbFcVCDVE0fQKtW_EgCTFwM-1rgVa19VBbMOYNHZPSRDTzh0bXYuVzXDYnGFE7hAY4S2lWFrYc19bLifeDuifX9jNodyR08nF2PgOyWsqyFZKRiQL6nieXcaxFmBqDLEdl4giBJGvke6MwJJKmDhxMBzkOwf-fS8SgeNmwop60UyxHoVPZATyfuwZpwqYQNxLHmoXgsmXPnGbL6PlGzWNqAzIvaiPj0", "expires_in": 1800, "issued_at": "2019-09-10T09:58:11Z" }
4.3、通过上面得到token,获取镜像,命令如下
curl -k -H "authorization: bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6IlRTTkg6Tk42RjpSMkFPOjc3M1E6SDZIMzpQUk1JOkVJS0s6QVRVVzpYR0lJOk5TQUo6UlFBMzpJUFRHIn0.eyJpc3MiOiJoYXJib3ItdG9rZW4taXNzdWVyIiwic3ViIjoiYWRtaW4iLCJhdWQiOiJoYXJib3ItcmVnaXN0cnkiLCJleHAiOjE1NjgyNTc1NjksIm5iZiI6MTU2ODI1NTc2OSwiaWF0IjoxNTY4MjU1NzY5LCJqdGkiOiIxaUZwa3ZUTEI3Z3UyZEZFIiwiYWNjZXNzIjpbeyJ0eXBlIjoicmVnaXN0cnkiLCJuYW1lIjoiY2F0YWxvZyIsImFjdGlvbnMiOlsiKiJdfV19.BmUo3h9qfiNVBklyhIN_zDtUSR35W0-5T49eZ9QD3jP8i_veUwtX8RwZAj-Vz1OpNo9jAZYtBU48BczPHP5gCZFU7bRit2oFiYRGzd3d04YhVImlWMArX-dDtrl8vM4-2oZH_FSfpj2Nc-dh8xg57lWpw4OOU8yoEgDCaqvVGqroiOz1e0TDtPw6YS3J6_uZjON8lnRnlofafUj5sQsPJnQLVsY5IFCwHGOvEZoiBd8MzgdlhxFAm5Xf8fHNpxKVx01bv7bMpZGzKmhD5ep5E0X7Smzw8OoDYG2YyoAMA7vBT4p43axV1Lab0fyQxhyaXZ4XLul4WLDMY9Y-Mt85AGHLr0FKPkOD4e9t69TacvqkgQpFqz64mMwz7kYlv3-K4P63VCZC-Ew5KV56Gv--vKv0n9vNhybFoDkeUIaai4hptHqyuK1wCDMFZtoq7dV8LCXfNnXYf06-LZCUBG2frVVt6QLJpaVBOjN0H6Zje_7A5t38vw27MKU3-PanDsiknA9_pTk60HFxBuW00lhcRZ82na26dsL9Kz2lmHf1X3u6kEdRAvXCCmKmWZqE6-ccyvmWG0bXhQjeo2vBedohCxvQQy5_nG8KCCmm88VqI6cLz_HMEsfuj6mT0oVw1E4U_z8Gzlh7r5mJ7ud4F30PEZx6xvBTkEFe9CvwwbgS1BU" https://192.168.210.160/v2/_catalog
输出结果如下:
{"repositories":["library/mariadb","library/nginx","library/php","lnmp/nginx","lnmp/php"]}
5、harbor获取镜像列表
执行脚本:sh get_images.sh
#!/bin/bash USER="admin" PASS="admin" HURL="https://192.168.210.160" rtoken=$(curl -k -i -u ${USER}:${PASS} ${HURL}/service/token?account=${USER}\&service=harbor-registry\&scope=registry:catalog:*|grep "token" |awk -F '"' '{print $4}') #echo $rtoken rlist=$(curl -k -s -H "authorization: bearer $rtoken " ${HURL}/v2/_catalog|awk -F '[' '{print $2}'|awk -F ']' '{print $1}'|sed 's/"//g') echo $rlist|sed 's/,/\n/g'
输出结果如下:
% Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 1166 100 1166 0 0 9867 0 --:--:-- --:--:-- --:--:-- 9881 library/mariadb library/nginx library/php lnmp/nginx lnmp/php
6、harbor获取镜像tag
cat get_tag.sh
#!/bin/bash USER="admin" PASS="admin" HURL="https://192.168.210.160" MTAG=$1 #MTAG=$1为变量,需传入一个镜像名字,然后执行上一脚本输出的结果 ttoken=$(curl -iksL -X GET -u $USER:$PASS $HURL/service/token?account=${USER}\&service=harbor-registry\&scope=repository:${MTAG}:pull|grep "token" |awk -F '"' '{print $4}') #echo $ttoken tlist=$(curl -ksL -X GET -H "Content-Type: application/json" -H "Authorization: Bearer $ttoken" ${HURL}/v2/${MTAG}/tags/list|awk -F '[' '{print $2}'|awk -F ']' '{print $1}'|sed 's/"//g') echo $tlist|sed 's/,/\n/g'
执行获取tag的脚本,脚本后面加上镜像的名称:
sh get_tag.sh lnmp/nginx 6 sh get_tag.sh lnmp/php 6