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打包一下。 链接成功便可配置文件映射关系。java
便可完成上传,不知道idea为啥不能检测到jar的更新,并自动上传新jar包,可是代码的更新就能够作到自动上传,有人知道如何解决吗?python
java -jar ***.jar
复制代码
自行访问下 主机:8080/hello。 至于如何自动化启动新jar包,能够经过shell或python脚本解决。git
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的dockergithub
docker pull openjdk:8
复制代码
在target目录下添加Dockerfile文件。web
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包记得修改下。spring
docker pull 你的镜像
docker run -p 8080:8080 你的镜像
复制代码
这种方式简单来讲,传统部署流程中 git Push新代码->拉取新代码->Maven构建产生新Image->拉取新Image->删除旧Image,删除旧容器->运行新Image->经过http或者浏览器检查项目是否正常。而CI中,开发人员只须要关心git Push新代码和检查项目是否运行正常,中间繁琐重复的劳动由自动化构建工具Jenkins+Gitlab+Docker完成,开发人员只须要经过简单配置,实现高度定制的的自动化部署。docker
docker pull gitlab/gitlab‐ce:latest
复制代码
gitlab有点大,须要耐心等下。
docker 加速(可选)shell
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。json
建立挂载文件夹和启动容器浏览器
#建立挂载文件夹
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
复制代码
配置jenkin的jdk, Maven, Docker,gitlab插件, Maven插件, SSH插件,设置完保存便可
在Gitlab上建立一个项目,在mytest的配置项中配置远程仓库地址,以及用户名和密码。
在Gitlab上配置你的Webhook。
取消对本地url的限制(由于个人jenkins和gitlab搭建在同一个机器上)
第一个脚本主要干这几件事情
首先给Jenkins配置ssh凭证
#!/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成功,并推送到私服。
#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其实就是个可视化构建脚本的管理工具,你们只须要按照我给出的步骤去配置就能够了。 有啥问题,留言就完事了。 若是这篇文章对你有所帮助,给小小的点赞能够吗?