import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class HelloCtl { @GetMapping("/hello") private String hello(){ return "来自idea deployment的问候"; } } 复制代码
使用Maven打包一下。 连接成功即可配置文件映射关系。
即可完成上传,不知道idea为啥不能检测到jar的更新,并自动上传新jar包,但是代码的更新就可以做到自动上传,有人知道如何解决吗?
java -jar ***.jar 复制代码
自行访问下 主机:8080/hello。 至于如何自动化启动新jar包,可以通过shell或python脚本解决。
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class HelloCtl { @GetMapping public String hello(){ return "来自docker的问候"; } } 复制代码
配置idea的docker
将Springboot打成jar包,maven package。并提前把openjdk:8这个镜像pull下来
docker pull openjdk:8 复制代码
在target目录下添加Dockerfile文件。
FROM openjdk:8 COPY demo-0.0.1-SNAPSHOT.jar /tmp/app.jar WORKDIR /tmp ENTRYPOINT ["java", "-jar", "app.jar"] 复制代码
记住上面的 demo-0.0**.jar包是对应你自己的jar包记得修改下。
配置好运行环境后,点击运行即可
使用浏览器访问 localhost:8080,即可收到来自docker的问候。
docker pull 你的镜像 docker run -p 8080:8080 你的镜像 复制代码
这种方式简单来说,传统部署流程中 git Push新代码->拉取新代码->Maven构建产生新Image->拉取新Image->删除旧Image,删除旧容器->运行新Image->通过http或者浏览器检查项目是否正常。而CI中,开发人员只需要关心git Push新代码和检查项目是否运行正常,中间繁琐重复的劳动由自动化构建工具Jenkins+Gitlab+Docker完成,开发人员只需要通过简单配置,实现高度定制的的自动化部署。
(1)(可选,可以选择不搭,直接用已有github或者其他git平台):搭gitlab私服,我想搭github来着,找了半天没有解决。
docker pull gitlab/gitlab‐ce:latest 复制代码
gitlab有点大,需要耐心等下。
docker 加速(可选)
sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["你的docker加速地址,比如https://skdgjskd.mirror.aliyuncs.com"] } EOF sudo systemctl daemon-reload sudo systemctl restart docker 复制代码
加速地址领取地址https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors。
创建挂载文件夹和启动容器
#创建挂载文件夹 mkdir -p /opt/gitlab/etc mkdir -p /opt/gitlab/log mkdir -p /opt/gitla/data #gitlab docker run / --detach / --publish 8443:443 / --publish 8090:80 / --name gitlab / --restart always / -v /opt/gitlab/etc:/etc/gitlab / -v /opt/gitlab/log:/var/log/gitlab / -v /opt/gitlab/data:/var/opt/gitlab / gitlab/gitlab‐ce:latest #修改配置 vi /opt/gitlab/etc/gitlab.rb #打开之后修改 external_url 'http://{这里填你的宿主机的ip地址}' vi /opt/gitlab/data/gitlab-rails/etc/gitlab.yml #打开以后找到 # gitlab: # ## Web server settings (note: host is the FQDN, do not include http://) # host: {这里填你的宿主机地址} # port: {这里填8090} # https: false #最后浏览器访问 主机ip地址:8090,即可验证是否搭建成功。 #设置root密码,并可以用root账户登录 复制代码
docker run -p 8080:8080 -p 50000:50000 -v jenkins_data:/var/jenkins_home -v jenkinsci/blueocean #jenkin容器启动需要时间 复制代码
#上面说到要你去输入jenkin密码,需要我们进入jenkin容器进行查看。 docker exec -it 7f485bd95c3b /bin/bash 进入jenkins容器 cat /var/jenkins_home/secrets/initialAdminPassword 复制代码
输入密码后,进入jenkins,选择推荐安装,可以选择直接使用admin账户登录,密码就是上面cat到的。
docker run ‐‐name docker‐registry ‐d ‐p 5000:5000 registry vi /etc/docker/daemon.json #添加以下内容 #{ "insecure‐registries":["宿主机IP地址:5000"]} #添加完成后,systemctl restart docker并启动容器即可。 复制代码
#进入jenkins容器 ssh-keygen -t rsa cat /var/jenkins_home/.ssh/id_rsa.pub 复制代码
添加cat到的公钥
配置jenkin的jdk, Maven, Docker,gitlab插件, Maven插件, SSH插件,设置完保存即可
下载安装ssh是为了等下远程登录docker宿主机,关闭旧容器,启动新容器做的。安装gitlab插件是为了等下有个触发器。如果你用的是github请安装github的插件。安装maven是为了那些不使用docker部署的人,来自动化构建项目。安装插件选项在Manage Jenkins里。 在jenkins中新建一个item
在Gitlab上创建一个项目,在mytest的配置项中配置远程仓库地址,以及用户名和密码。
配置Jenkins的匿名登陆。
点击系统管理->全局安全配置->勾选 匿名用户具有可读权限
点击系统管理->系统设置->点掉图中圈出的。
到此对于Webhook Jenkin所需要配置的就完成了。
在Gitlab上配置你的Webhook。
取消对本地url的限制(因为我的jenkins和gitlab搭建在同一个机器上)
在Gitlab仓库中进行Webhook的设置。url为你的jenkin地址/project/你的jenkins项目名。
第一个脚本主要干这几件事情
首先给Jenkins配置ssh凭证
在SSH 插件配置,hostname填docker宿主机的地址(就是你springboot 容器跑的苏主机地址)。
配置完成后,给你的mytest项目进行构建的配置。
第一个脚本模板为
#!/bin/bash result=$(docker ps | grep "{指定你的旧springboot容器名字,或者id}") if [[ "$result" != "" ]] then echo "stop old container" docker stop {指定你的旧容器} fi result1=$(docker ps ‐a | grep "{指定你的旧springboot容器名字,或者id}") if [[ "$result1" != "" ]] then echo "rm old container" docker rm {容器名} fi result2=$(docker images | grep "{旧Image名}") if [[ "$result2" != "" ]] then echo "rm old image" docker rmi {旧Image名} fi 复制代码
还有两个脚本,我们待会再说。相信看到这里了,大概了解了Jenkins是个啥东西了,其实就是一个可视化的调度工具,帮我门管理一些构建过程。
好接下来我们创建一个idea中springboot项目,添加代码。
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class HelloCtl { @GetMapping("/hello") private String hello(){ return "来自jenkins的问候"; } } 复制代码
配置pom,添加docker打包插件(Google开源Java容器管理工具 Jib,更多详细配置参考github官网 github.com/GoogleConta…
<properties> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> <exclusions> <exclusion> <groupId>org.junit.vintage</groupId> <artifactId>junit-vintage-engine</artifactId> </exclusion> </exclusions> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> <plugin> <groupId>com.google.cloud.tools</groupId> <artifactId>jib-maven-plugin</artifactId> <version>1.7.0</version> <configuration> <!--配置基本镜像--> <from> <image>openjdk:8-jdk-alpine</image> </from> <!--配置最终推送的地址,仓库名,镜像名--> <to> <!--这里我配置的是私服,如何配置公服地址请参考我的《如何使用docker打包Springboot的四种方式》文章 --> <image>192.168.208.102:5000/test1</image> <tags> <tag>idea</tag> </tags> </to> <!--这里是必须要配置的,因为私服是http不是https,默认jib不给你推送到非https的私服--> <allowInsecureRegistries>true</allowInsecureRegistries> </configuration> </plugin> </plugins> </build> 复制代码
将Maven项目推送到Docker宿主机,在docker宿主机内尝试构建。在Pom目录下,输入构建命令
mvn compile jib:build 复制代码
可以看到,构建Image成功,并推送到私服。
好的,现在我们的代码没问题了,接下来,我们编写后两个任务脚本。 继续打开mytest的Jenkins任务配置表。
其中最后一个脚本任务为
#idt 是指定拉取地址 docker run --name {自己取名字,与第一个脚本要可以对应起来} -p 8081:8081 -idt 192.168.101.64:5000/{这里填你自己的Imaga:Tag} docker log -f test1 复制代码
配置完后我们保存,到这里,我们push我们之前写好的代码上私服,即刻看到Jenkins自动帮我们执行3个脚本,实现了全自动化部署。
ssh方式过于简单我就不说了。
idea可视化构建Docker,也是比较简单的,只需要你去配置,而且都是可视化的。
docker+jenkins+gitlab,jenkins其实就是个可视化构建脚本的管理工具,大家只需要按照我给出的步骤去配置就可以了。
有啥问题,留言就完事了。
如果这篇文章对你有所帮助,给小小的点赞可以吗?