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其實就是個可視化構建腳本的管理工具,你們只須要按照我給出的步驟去配置就能夠了。 有啥問題,留言就完事了。 若是這篇文章對你有所幫助,給小小的點贊能夠嗎?