jenkins 持續整合解決方案
阿新 • • 發佈:2018-11-19
jenkins 持續整合解決方案
0 緣起
因為測試環境需要不斷的改程式碼釋出, 特別麻煩和耗時, 所以學著測試大佬 搭建了持續整合.
採用技術:碼雲/svn/github+maven+jenkins+docker
1 環境準備
- linux 系統
https://www.cnblogs.com/zuxing/articles/8718591.html
centos7ipaddr 無法檢視虛擬機器IP解決辦法
- jdk
- maven
- docker
https://blog.csdn.net/doegoo/article/details/80062132
- tomcat
這個簡單就不說了
- git
https://blog.csdn.net/wangfei0904306/article/details/57113408
- jenkins
https://blog.csdn.net/yue31313/article/details/79884625
前面的環境準備完 就按照最後一篇部落格配置下 jenkins
2 構建指令碼
這個構建指令碼在 jenkins 配置裡面輸入
- 模板
#!/bin/sh
echo $ref
mvn clean package
# image-name="映象名" image-container-name="容器名"
echo "開始構建, 映象:${image-name}, 容器:${image-container-name}"
# 刪除舊的容器和映象
docker rm -f ${image-container-name}
docker rmi -f ${image-name}
# 根據當前目錄下的 dockerfile 構建新的映象,並且啟動
docker build -t ${image-name} .
docker run -d -p 8888:8888 --name="${image-container-name}" [-v {要掛載的磁碟目錄}:{要掛載的磁碟目錄}] ${image-name}
- 例項
#!/bin/sh
echo $ref
mvn clean package
echo "開始構建, 映象:test, 容器:test-container"
# 刪除舊的容器和映象
docker rm -f test-container
docker rmi -f test
# 根據當前目錄下的 dockerfile 構建新的映象,並且啟動
docker build -t test .
docker run -d -p 8888:8888 --name="test-container" test
- 注意 這個指令碼的執行目錄是在 jenkins 的構建目錄中, 我本機是: /root/.jenkins/workspace/test
我本機的目錄結構如下
[[email protected] test]# cd /root/.jenkins/workspace/test
[[email protected] test]# ll
總用量 12
-rw-r-----. 1 root root 234 9月 5 22:16 Dockerfile
-rw-r-----. 1 root root 1628 9月 5 19:15 pom.xml
-rw-r-----. 1 root root 1338 9月 5 19:15 README.md
drwxr-x---. 4 root root 30 9月 5 19:15 src
drwxr-x---. 9 root root 233 9月 5 22:49 target
3 Dockerfile 的編寫
我本地的 Dockerfile 是放在專案根目錄下的
FROM frolvlad/alpine-oraclejdk8:slim
VOLUME /tmp
ADD target/test-0.0.1-SNAPSHOT.jar app.jar
RUN sh -c 'touch /app.jar'
ENV JAVA_OPTS=""
ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.jar" ]
4 流程
說一下自動構建的流程
- 1 使用者在 jenkins 上點選構建
- 2 jenkins 根據配置好的 git 地址, 去 把 原始碼 down 下來
- 3 接著執行上面配置好的構建指令碼 去刪除就的 容器和映象,並且構建新的容器和映象 進行啟動
- 4 如果想更智慧一點就在 碼雲上配置下 webhook, 這樣更新程式碼的時候就會自動構建拉
webhook 參考下: https://blog.csdn.net/xlgen157387/article/details/72852428 (只看 webhook 就行)