參考連接:http://www.macrozheng.com/#/reference/linux_installhtml
tipsjava
公司服務器配置(1T機械+256固態+i7的u) 須要咱們把系統,環境(java,mysql,redis,docker等)裝到固態上(速度快),咱們的代碼放到機械上。分區狀況以下圖
自行百度,此處無坑mysql
安裝jdk1.8 和 maven 時儘可能採用壓縮包解壓的方式,採用 yum
有坑。個人安裝路徑linux
配置環境 vim /etc/profile
,配置結果如圖web
#java,maven環境配置 #用':'分割不一樣的配置 export JAVA_HOME=/mydata/java/jdk MAVEN_HOME=/mydata/java/maven export PATH=$JAVA_HOME/bin:$PATH:${MAVEN_HOME}/bin export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
centos7安裝mysql5.7,參考連接:
https://www.cnblogs.com/helf/p/11244711.htmlredis
下載 Jenkins
的 docker
鏡像:sql
docker pull jenkins/jenkins:lts
docker
在 Docker
容器中運行 Jenkins
:shell
//此處由於java和maven是在linux上直接裝的而Jenkins在docker上裝的因此必須掛載jdk和maven(坑) //-v命令進行掛載,其中冒號前面的是本機的目錄; //必須將本機的javahome和mavenhome的路徑,掛載到Jenkins容器上 //冒號後面是容器上的目錄,能夠寫跟本機目錄相同。 docker run -p 8080:8080 -p 50000:5000 --name jenkins \ -u root \ -v /mydata/java/jdk/bin/java:/mydata/java/jdk/bin/java \ -v /mydata/java/jdk:/mydata/java/jdk \ -v /mydata/java/maven:/mydata/java/maven \ -v /mydata/jenkins_home:/var/jenkins_home \ -d jenkins/jenkins:lts
忘記 Jenkins
初始化密碼,使用 docker logs jenkins
查看日誌vim
配置如圖
參考連接:https://www.cnblogs.com/zhangheliang/p/8724605.html
Jenkins
的配置
還有一種沒有去掉勾的方式,我獲取 crumb 值的時候報404,爲解決,有須要自行百度
svn
的配置
在生成的 post-commit
中加入下面的代碼
curl -X post -v -u admin:117f598cc5f81226faaac0ceff40b367da http://ip:8080/jenkins/job/jenkinsdemo/build?token=APPLE_TOKEN
#!/bin/bash #操做/項目路徑(Dockerfile存放的路徑),每一個項目都有對應的dockerfile DOCKERFILE_PATH=/mydata/jenkins_home/workspace/jenkinsdemo/src/main/docker #jenkins工做空間 SOURCE_PATH=/mydata/jenkins_home/workspace #docker 鏡像/容器名字或者jar名字 這裏都命名爲這個 SERVER_NAME=jenkinsdemo JAR_NAME=demo-0.0.1-SNAPSHOT #獲取容器id CID=$(docker ps | grep "${SERVER_NAME}" | awk '{print $1}') #獲取鏡像id IID=$(docker images | grep "${SERVER_NAME}" | awk '{print $3}') DATE=`date +%Y%m%d%H%M` # 備份 function backup(){ if [ -f "${DOCKERFILE_PATH}/${SERVER_NAME}.jar" ]; then echo "${SERVER_NAME}.jar 備份..." cp ${DOCKERFILE_PATH}/${JAR_NAME}.jar ${DOCKERFILE_PATH}/backup/${SERVER_NAME}-$DATE.jar echo "備份 ${JAR_NAME}.jar 完成" else echo "${DOCKERFILE_PATH}/${JAR_NAME}.jar不存在,跳過備份" fi } # 最新構建代碼 移動到項目環境 # 把最新構建的jar包放到和dockerfile同級的目錄 function transfer(){ echo "啦啦啦 ${DOCKERFILE_PATH}" echo "最新構建代碼 ${SOURCE_PATH}/${SERVER_NAME}/target/${JAR_NAME}.jar 遷移至 ${DOCKERFILE_PATH}" cp ${SOURCE_PATH}/${SERVER_NAME}/target/${JAR_NAME}.jar ${DOCKERFILE_PATH}/ echo "遷移完成" } # 修改訪問權限 function changemod(){ echo "修改 ${DOCKERFILE_PATH}/${JAR_NAME}.jar 的訪問權限" cd ${DOCKERFILE_PATH} chmod 777 ${JAR_NAME}.jar echo "修改訪問權限完成" } # 構建docker鏡像 function build(){ if [ -n "$IID" ]; then echo "存在${SERVER_NAME}鏡像,IID=$IID" echo "中止容器docker stop $CID" docker stop $CID echo "刪除容器 docker rm $CID" docker rm $CID echo "刪除鏡像 docker rmi ${SERVER_NAME}" docker rmi ${SERVER_NAME} echo "構建鏡像 docker build -t "${SERVER_NAME}" ." cd ${DOCKERFILE_PATH} docker build -t="${SERVER_NAME}" . else echo "不存在${SERVER_NAME}鏡像,開始構建鏡像 docker build -t ${SERVER_NAME} . " cd ${DOCKERFILE_PATH} docker build -t="${SERVER_NAME}" . fi } # 運行docker容器 function run(){ backup transfer changemod build echo "docker run建立容器... docker run -d --name=${SERVER_NAME} -p 8002:8082 -v ${DOCKERFILE_PATH}:${DOCKERFILE_PATH} jenkinsdemo:latest" docker run -d --name=${SERVER_NAME} -p 8002:8002 -v ${DOCKERFILE_PATH}:${DOCKERFILE_PATH} jenkinsdemo:latest echo "${SERVER_NAME}容器建立完成" } #入口 run
# 該鏡像須要依賴的基礎鏡像 FROM java:8 # 將當前目錄下的jar包複製到docker容器的/目錄下 ADD demo-0.0.1-SNAPSHOT.jar /jenkinsdemo.jar # 運行過程當中建立一個mall-tiny-docker-file.jar文件 RUN bash -c 'touch /jenkinsdemo.jar' # 聲明服務運行在8083端口 EXPOSE 8083 # 指定docker容器啓動時運行jar包 ENTRYPOINT ["java", "-jar","/jenkinsdemo.jar"] # 指定維護者的名字 MAINTAINER zhaoguozhen
參考連接:https://my.oschina.net/zhengqingya/blog/3066410
docker
是經過 dockerfile
來說代碼打包成 docker
鏡像並運行的,多個子工程(微服務)也可使用Docker Compose
來部署(這個東西相似於批處理,使用一個命令部署配置的全部服務)
shell
腳本中的變量打印不出來考慮換個名稱
好比:BASE_PATH
換成 DOCKERFILE_PATH
,shell 腳本就能夠執行成功
訪問連接打不開,考慮是否打開防火牆和權限
#打開防火牆 firewall-cmd --zone=public --add-port=9000/tcp --permanent #從新加載 firewall-cmd --reload #查看開放的端口 firewall-cmd --list-ports
大白話理解 CI CD
把代碼打包成容器叫CI,把容器部署到服務器是CD
自動化部署平臺理解
上面只是橫向弄好了,豎向還沒弄好。下面須要弄個docker管理器,將打包好的代碼鏡像人工選擇放到docker集羣中的某個docker上