目录
第一节 jenkins 共用宿主机中的docker自动化部署
- mkdir 挂载文件
- ##############################################################################################################################
- ##
- cd Users/jiajie/soft
- mkdir jenkins
- ## 上传maven文件到 jenkins 目录下
- ##
- 宿主机安装的docker.sock文件
- var/run/docker.sock
- ##############################################################################################################################
-
- 启动命令
- ##############################################################################################################################
- docker run -u root -m 1024m --name jenkins
- -p 9998:8080 -p 50000:50000 --privileged
- -v /var/run/docker.sock:/var/run/docker.sock
- -v $(which docker):/bin/docker
- -v /Users/jiajie/soft/jenkins:/var/jenkins_home
- -d jenkins/jenkins:lts
-
- #以root用户运行---否则会报无权限
- 参数说明:
- (1) -v /var/run/docker.sock:/var/run/docker.sock:容器中的进程通过它与Docker守护进程进行通信
- (2) -v /usr/bin/docker:/usr/bin/docker:将宿主机的docker命令挂载到容器中。
- /usr/bin.docker为docker命令所在具体位置,可以通过which docker指令获取。或者挂载时使用-v $(which docker):/usr/bin/docker
- (3) -v /usr/lib/x86_64-linux-gnu/libltdl.so.7:/usr/lib/x86_64-linux-gnu/libltdl.so.7:ibltdl.so.7是Docker命令执行所依赖的函数库,容器中library的默认目录是/usr/lib/x86_64-linux-gnu/,把宿主机的libltdl.so.7函数库挂载到该目录即可。
- 可以通过whereis libltdl.so.7命令查看具体位置
- centos7中该文件路径为/usr/lib64/libltdl.so.7
- ubuntu中该文件路径为/usr/lib/x86_64-linux-gnu/libltdl.so.7


- 进入容器 docker exec -it bae630c41276 /bin/bash
- 执行 docker ps
- 正常使用 宿主机docker

- 访问
- http://localhost:9998/login?from=%2F

- #查看密码
- 宿主机挂载目录下 /Users/jiajie/soft/jenkins/secrets/initialAdminPassword
- 也可以在/var/jenkins_home/secrets/initialAdminPassword这个文件中查看到管理员密码





- M2_HOME
- /var/jenkins_home/apache-maven-3.6.1
- PATH+EXTRA
- $M2_HOME/bin









- ##### 需要加上 spring-boot-maven-plugin
- ########否则打包会报 no main manifest attribute, in app.jar
- <build>
- <finalName>micro-gateway</finalName>
- <plugins>
- <plugin>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-maven-plugin</artifactId>
- <!--加入下面两项配置-->
- <executions>
- <execution>
- <goals>
- <goal>repackage</goal>
- </goals>
- </execution>
- </executions>
- <configuration>
- <includeSystemScope>true</includeSystemScope>
- <mainClass>com.micro.microgateway.MicroGatewayApplication</mainClass>
- </configuration>
- </plugin>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-surefire-plugin</artifactId>
- <configuration>
- <testFailureIgnore>true</testFailureIgnore>
- </configuration>
- </plugin>
- </plugins>
- </build>
- FROM openjdk:8-jdk-alpine
- MAINTAINER heshuai <2460983732@qq.com.com>
- ##镜像源
- RUN echo "http://mirrors.aliyun.com/alpine/v3.6/main" > /etc/apk/repositories \
- && echo "http://mirrors.aliyun.com/alpine/v3.6/community" >> /etc/apk/repositories \
- && apk update upgrade \
- && apk add --no-cache openssh vim \
- && apk add --no-cache procps unzip curl bash tzdata \
- && ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
- && echo "Asia/Shanghai" > /etc/timezone
- RUN mkdir /data
- RUN mkdir /micro-gateway
- RUN mkdir /data/log
- WORKDIR /micro-gateway
- COPY target/micro-gateway.jar /micro-gateway
- ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /micro-gateway/micro-gateway.jar"]
- EXPOSE 9000
- ###相关命令
- 上传项目
- 第一步:建立本地git仓库
- cd 到你的本地项目根目录下,执行git命令
- git init
- 第二步:将本地项目工作区的所有文件添加到暂存区
- git add . // . 表示所有文件, 如果想添加项目中的指定文件,那就把 . 改为指定文件名即可
- 第三步:将暂存区的文件提交到本地仓库
- git commit -m "" //冒号里面写注释语句 eg:git commit -m "init project"
- 第四步:在码云上创建自己的项目,创建如图所示
- 创建仓库 https://gitee.com/wondersgroups/little-sweet-sister.git--仓库地址
-
- 第五步:将本地仓库关联到码云上
- git remote add origin https://gitee.com/wondersgroups/little-sweet-sister.git
- 注意:在这一步时如果出现错误:fatal:remote origin already exists 意思是路径存在了,就需要删除原来的路径从新添加
- git remote rm origin
-
- 第六步:最后一步,将代码由本地仓库上传到Github远程仓库
- git push -u origin master 指定分支 master
- git push -u origin +master 强制上传
- 注意:如果报failed to push some refs to git 错误出现错误的主要原因是码云中的README.md文件不在本地代码目录
- 可以通过如下命令进行代码合并【注:pull=fetch+merge]
- git pull --rebase origin master
- 执行上面代码后可以看到本地代码库中多了README.md文件
- 此时再执行语句 git push -u origin master即可完成代码上传到github
-
- 执行完之后如果无错误就上传成功了!
- 需要提示的是这里的master是Github默认的分支,如果你本地的当前分支不是master,就用git checkout master命令切换到master分支,
- 如果你想用本地当前分支上传代码,则把第六步的命令里的master切换成你的当前分支名即可。
- 如果最后再出现错误,就执行下面代码:
- git push -u origin master -f 强制命令会覆盖别人分支,慎用







- ##############################################################################################################################
- ###构建命令
- ##############################################################################################################################
-
- echo $JAVA_HOME
- echo "=============java变量路径:$JAVA_HOME"
- PROJECT_LOCATION=little-sweet-sister
- GROUP_ID=com.micro
- cd /var/jenkins_home/workspace/${PROJECT_LOCATION}/${PROJECT} && /var/jenkins_home/apache-maven-3.6.1/bin/mvn clean install -am -pl ${GROUP_ID}:${PROJECT} -Dmaven.test.skip=true
- #cd $PROJECT_LOCATION && /var/jenkins_home/apache-maven-3.6.1/bin/mvn clean install -am -pl ${GROUP_ID}:${PROJECT} -Dmaven.test.skip=true
- TAG=`date "+%Y%m%d"`
- IMAGE_NAME=$PROJECT
- echo "=============查看进程id,然后删除"
- #容器id
- cid=$(docker ps -a | grep $IMAGE_NAME | awk '{print $1}')
- #镜像id
- iid=$(docker images | grep $IMAGE_NAME | awk '{print $3}')
- if [ -n "$cid" ]; then
- echo "存在容器$IMAGE_NAME,cid=$cid,删除容器。。。"
- docker rm -f $cid
- else
- echo "不存在$IMAGE_NAME容器"
- fi
- if [ -n "$iid" ]; then
- echo "存在镜像$IMAGE_NAME,iid=$iid,删除容器镜像。。。"
- #docker rmi -f $iid
- else
- echo "不存在$IMAGE_NAME镜像"
- fi
- #####
- case $PROJECT in
- "micro-gateway")
- cd /var/jenkins_home/workspace/${PROJECT_LOCATION}/micro-gateway;;
- "micro-pay")
- cd micro-pay;;
- "micro-base")
- cd micro-base;;
- *)
- echo "error"
- ;;
- esac
- ### 构建容器
- docker build -t $IMAGE_NAME .
- echo "=============开始构建镜像$IMAGE_NAME"
- echo "当前docker 所有镜像:"
- docker images
- echo "启动容器------->"
- case $PROJECT in
- "micro-gateway")
- docker run -p 9000:9000 -d --restart=always -e JAVA_OPTS='-Xmx500m -Xms300m -Dspring.profiles.active=test' -v /Users/jiajie/soft/logs/micro-gateway:/data/log --name $IMAGE_NAME $IMAGE_NAME
- ;;
- "micro-pay")
- docker run -p 8082:8082 -d --restart=always -e JAVA_OPTS='-Xmx500m -Xms300m -Dspring.profiles.active=test' -v /Users/jiajie/soft/logs/micro-pay:/data/log --name $IMAGE_NAME $IMAGE_NAME
- ;;
- *)
- echo "error"
- ;;
- esac
- echo "启动服务成功"
- echo "查看启动的所有进程:"
- docker ps




- #查看宿主机进程
- docker ps

- #查看jenkins容器进程
- docker exec -it bae630c41276 /bin/bash
- docker ps
