docker版jenkins持續整合部署及連線gitee碼雲
docker版jenkins
安裝docker社群版
官方文件:https://docs.docker.com/install/linux/docker-ce/centos/
第一步:安裝依賴軟體(yum-utils提供yum-config-manager包,用來管理yum配置檔案)
yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
第二步:新增docker-ce安裝源
yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
第三步:安裝docker-CE 預設安裝的是最新版本的穩定版 yum install docker-ce
如果要安裝特定版本的docker-CE請使用如下命令格式: install docker-ce-<VERSION STRING>
檢視版本列表請使用如下命令: yum list docker-ce --showduplicates | sort -r
第四步:配置 配置docker服務開機啟動 systemctl enable docker
配置映象加速器(映象加速地址我用的是阿里雲的)
#修改映象地址後,複製下面一坨直接丟掉centos執行
mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["你的阿里雲映象地址"]
}
EOF
#配置生效
systemctl daemon-reload
#重啟docker
systemctl restart docker
#驗證映象加速器是否修改成功
docker info
-
配置阿里雲的docker映象加速器
docker常用命令如下:
#CENTSOS7開啟docker
systemctl start docker
#docker檢視所有容器(執行的和沒執行的)
docker ps -a
#刪除容器
docker container rm 5156e78a4e9e
#docker檢視映象
docker images
#docker刪除映象
docker rmi e76a6ec6e22e
#docker 進入容器
docker exec -it 775c7c9ee1e1 /bin/bash
jekins
第一步:下載jekins
本文使用docker版的jekins,方便
docker pull jenkins/jenkins:lts #這個是安裝最新版的jenkins,如果安裝舊版本,很多外掛安裝不上,docker環境下升級又比較麻煩。
docker inspect ba607c18aeb7 #檢視是否是最新版
第二步:啟動jekins
mkdir -p /export/service/jenkins_home #建立一個jenkins目錄
chmod 777 -R /export/service/jenkins_home #jekins會使用jekins使用者往該目錄寫入資料
mkdir -p /export/service/repository/ #建立maven倉庫,用於構建maven專案下載的jar包
chmod 777 -R /export/service/repository/ #必須授權,要不然沒有許可權寫
docker run -d -p 9988:8080 -p 50000:50000 \
-v /usr/bin/docker:/usr/bin/docker \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /usr/bin/mv:/usr/bin/mv \
-v /usr/java/jdk1.8.0_131/bin/java:/usr/java/jdk1.8.0_131/bin/java \
-v /usr/java/jdk1.8.0_131:/usr/java/jdk1.8.0_131 \
-v /export/service/apache-maven-3.3.9:/export/service/apache-maven-3.3.9 \
-v /export/service/repository:/export/service/repository \
-v jenkins:/export/service/jenkins_home \
-v /etc/localtime:/etc/localtime \
--name jenkins jenkins/jenkins:lts
#引數簡介
-v /usr/bin/docker:/usr/bin/docker 有了這個配置在docker容器內部可以使用docker命令
-v /usr/bin/mv:/usr/bin/mv 有了這個配置在docker容器內部可以使用mv命令
-v /usr/java/jdk1.8.0_131/bin/java:/usr/java/jdk1.8.0_131/bin/java,這個配置可以再在docker容器內部使用java命令(直接使用宿主機的java)
-v /usr/java/jdk1.8.0_131:/usr/java/jdk1.8.0_131 這個配置會在docker容器建立/usr/java/jdk1.8.0_131目錄,並對映到宿主機的java_home目錄
-v /export/service/apache-maven-3.3.9:/export/service/apache-maven-3.3.9這個配置會在docker容器建立/export/service/apache-maven-3.3.9目錄,並對映到宿主機的maven_home目錄
/export/service/repository:/export/service/repository這個配置會在docker容器建立/export/service/repository目錄,並對映到宿主機的/export/service/repository目錄
-v /etc/localtime:/etc/localtime 使用宿主機的時間(宿主機和容器時間同步)
-d 後臺執行映象
-p 9988:8080 將映象的8080埠對映到伺服器的9988埠
-p 50000:50000 將映象的50000埠對映到伺服器的50000埠
--name jenkins 給容器起一個別名
為什麼要掛載(對映)目錄:docker通過映象建立並啟動容器,一個容器就是一個獨立隔離的沙箱,所以並不能識別伺服器上的環境配置,需要我們在啟動容器時通過-v引數命令將伺服器目錄掛載到docker容器指定目錄!拿jenkins舉例來說,如果你是用docker執行的jenkins,那麼是不識別你伺服器上配置的jdk環境和maven環境的,你在jenkins裡系統配置中去填寫你伺服器上的jdk目錄和maven目錄以及配置檔案目錄,後面專案構建是肯定會報錯不識別的。jenkins所在的容器是docker某個具體容器,它只能識別出這個容器裡的東東,容器自己有一套獨立完整的目錄,可以通過命令 docker exec -it containerID /bin/bash 進入指定的容器id檢視(containerID換成你的docker容器id)。
#如果目錄掛載完成,啟動了容器,又想修改掛載怎麼辦?
參考:https://blog.csdn.net/zedelei/article/details/90208183
第三步:jekins外掛安裝
在瀏覽器輸入http://ip:9988進入Jenkins登入頁面。頁面會提示你到伺服器的指定位置獲取初始化密碼。
-
這一步大概要等個5-10分鐘。
注意:因為我們是docker版的jenkins,所以這個路徑不是伺服器的路徑,而是容器內的路徑。我們可以通過如下命令從容器中獲取到初始化密碼。
docker exec jenkins tail /var/jenkins_home/secrets/initialAdminPassword
在頁面輸入密碼,點選Continue,進入外掛安裝頁面。安裝推薦外掛就好。
-
選擇【安裝推薦的外掛】,如下圖,耐心等待各外掛安裝完成。
-
注意:這步外掛下載速度快慢取決於伺服器的網速,與本地網路環境無關
-
第四步:建立jekins賬戶
安裝好外掛後,系統會提示建立管理員賬戶。
第五步:配置jdk和maven
管理->Global Tool Configuration
配置JDK,
注意:這裡配置的是jekins的jdk,由於jekins掛載目錄和宿主機目錄相同,所以別以為是宿主機目錄,一定是jekins的jdk目錄,jekins的jdk目錄對映到宿主機目錄
/usr/java/jdk1.8.0_131:/usr/java/jdk1.8.0_131
配置maven
注意:這裡配置的是jekins的maven,由於jekins掛載目錄和宿主機目錄相同,所以別以為是宿主機目錄,一定是jekins的maven目錄,jekins的maven目錄對映到宿主機目錄
-v /export/service/apache-maven-3.3.9:/export/service/apache-maven-3.3.9 \
第六步:整合碼雲(Gitee)
gitlab+jekins是企業套餐,但是為了偷懶就不安裝gitlab了 直接使用碼雲
詳細資訊參考:https://gitee.com/help/articles/4193
6.1:安裝Gitee外掛
6.2:配置外掛
6.3 配置git私人令牌
6.3.1 新增憑據
6.3.2 碼雲官網上,生成一個令牌
第七步:新建maven任務
7.1:建立任務(構建maven專案)
-
新增maven外掛
7.2:配置原始碼管理
怎麼新增賬戶,看下面截圖:
7.3:構建觸發器
意思是:滿足什麼條件就觸發我們任務的構建
下圖我選擇的是,只要有程式碼提交到碼雲就開始構建(其實這種方式不太推薦,萬一提交到碼雲的是半成品程式碼,觸發構建就會報錯)
建議:最好選擇手動構建,言外之意這裡什麼都不勾選
7.4:編譯【build】
Build指定原始碼拉下來之後需要做的事情,Post Steps指定編譯好之後需要做的事情。
-
上面填寫的Goals and options命令
clean install -Dmaven.test.skip=true
7.5:編譯之後操作【Post Steps】
-
進行下面的操作前,要先新增[ssh]外掛
編譯之後要做的事情 1:將編譯後的jar傳送到目的地伺服器【使用SSH Publishers】 2:執行jar,啟動工程【使用shell指令碼】
SSH Publishers是專業將編譯好的產物傳送到目的地的外掛。使用外掛之前需要配置外掛,如下圖:
-
配置你【碼雲】上的程式碼與配置的SSH服務進行關聯
# 必須加,不然jekins會kill 應用程式
export BUILD_ID=dontKillMe
# 應用存放地址
APP_HOME=/export/server/
# 應用名稱
APP_NAME=jdy_manager_web-0.0.1-SNAPSHOT.jar
# 獲取PID
PID=$(ps -ef |grep ${APP_NAME} |grep -v grep |awk '{print $2}')
if [ -z "${PID}" ]; then
echo "程式不存在啟動程式"
cd ${APP_HOME}
chmod 777 ${APP_NAME}
source /etc/profile
#防止nohup.out檔案過大
cat /dev/null > nohup.out
nohup java -jar ${APP_NAME} --spring.profiles.active=dev &
if [ $? = 0 ];then
sleep 1
tail -n 50 nohup.out
fi
echo "finished!!!"
else
echo "程式已經存在殺死程式"
kill -9 ${PID}
echo "${APP_NAME} process stop, PID=${PID}"
cd ${APP_HOME}
chmod 777 ${APP_NAME}
source /etc/profile
#防止nohup.out檔案過大
cat /dev/null > nohup.out
nohup java -jar ${APP_NAME} --spring.profiles.active=dev &
if [ $? = 0 ];then
sleep 1
tail -n 50 nohup.out
fi
echo "finished!!!"
fi
7.6:執行構建
#編譯好的jar在docker容器裡面,具體目錄如下:
#進入容器
docker exec -it 89f7dc9c71a7 /bin/bash
#切換到workspace目錄
jenkins@89f7dc9c71a7:/$ cd /var/jenkins_home/workspace/
jenkins@89f7dc9c71a7:~/workspace$ ls
第八步:專案首次啟動效果
-
專案首次啟動時,docker虛擬機器會聯網下載專案所依賴jar包
-
啟動成功後,嘗試遠端訪問伺服器上的工程,效果如下
總結
相關文章
- jenkins+docker 持續整合JenkinsDocker
- Jenkins & Docker 持續整合實踐JenkinsDocker
- jenkins+gitlab+docker持續整合部署maven專案JenkinsGitlabDockerMaven
- Docker+Gitlab+Jenkins+Maven程式碼持續整合與自動部署DockerGitlabJenkinsMaven
- Jenkins+Svn+Docker搭建持續整合環境 自動部署JenkinsDocker
- SpringBoot+Docker+Git+Jenkins實現簡易的持續整合和持續部署Spring BootDockerGitJenkins
- 通過Docker容器執行持續整合/持續部署Docker
- Jenkins與Docker的持續整合實踐JenkinsDocker
- 持續整合工具之Jenkins安裝部署Jenkins
- 持續整合及部署利器:GoGo
- Jenkins持續整合Jenkins
- 持續整合持續部署持續交付_持續整合與持續部署之間的真正區別
- Jenkins持續整合配置Jenkins
- 使用流水線外掛實現持續整合、持續部署
- 基於Jenkins+Git+Docker的持續整合(上)JenkinsGitDocker
- 基於Jenkins+Git+Docker的持續整合(下)JenkinsGitDocker
- 持續整合、持續部署、持續交付、持續釋出
- Jenkins持續部署-Windows環境持續部署探究1JenkinsWindows
- 持續整合、持續交付、持續部署簡介
- Framework專案持續整合(jenkins)及集合SonarQubeFrameworkJenkins
- Docker+GitLab+Jenkins+kubernetes實現DevOps 持續化整合和持續化部署概念圖DockerGitlabJenkinsdev
- 持續整合 Jenkins 簡介Jenkins
- Jenkins 持續整合使用教程Jenkins
- gitlab+jenkins+maven+docker持續整合(一)——Jenkins安裝配置GitlabJenkinsMavenDocker
- HTTP非持續連線和持續連線HTTP
- 持續整合Jenkins+GitlabJenkinsGitlab
- Jenkins + git實現持續整合JenkinsGit
- [Jenkins]IOS持續整合外掛JenkinsiOS
- 08 . Jenkins之SpringCloud微服務+Vue+Docker持續整合JenkinsSpringGCCloud微服務VueDocker
- jenkins+gitlab+nexus持續整合與部署學習JenkinsGitlab
- Jenkins教程:使用Jenkins進行持續整合Jenkins
- 淺談持續整合(CI)、持續交付(CD)、持續部署(CD)
- Jenkins持續整合(下)-Jenkins部署Asp.Net網站自動釋出JenkinsASP.NET網站
- 《轉載》Jenkins持續整合-自動化部署指令碼的實現《python》Jenkins指令碼Python
- Docker 實戰(2)- 配置 Jenkins 容器上的持續整合環境DockerJenkins
- Jenkins持續整合 入門實踐Jenkins
- Linux下搭建Jenkins持續整合LinuxJenkins
- Jenkins 持續整合 Android 專案JenkinsAndroid