CD,持續交付,在持續整合的基礎之上,將整合後的程式碼自動部署、自動測試,並自動或手動的部署生產環境。減少軟件開發的成本和時間,減少風險。更快的給使用者提供價值。
持續整合,自動構建,自動化測試,降低風險,量化覆蓋率,程式碼檢查,監控版本變化,回滾,自動化部署,一鍵部署,簡化交付過程。
Jenkins特性
docker pull jenkins/jenkins:lts
如果是第一次現在Docker映象,下載會比較慢,這時候我們可以使用國內的映象下載源,下面 下麪使用阿裡雲的下載源。
阿裡雲爲註冊使用者提供了免費的映象源,需要開通使用,登錄阿裡雲控制檯首頁,開啓容器映象服務,映象加速器,阿裡雲爲您提供了專有的映象下載URL,提高了映象下載速度。複製鏈接,在/etc/docker/目錄下建立daemon.json,並新增如下內容
{
"registry-mirrors": ["https://x7resce5.mirror.aliyuncs.com"]
}
其中鏈接是你的專有鏈接,然後重新啓動docker服務
service docker restart
下載完成後,通過命令可以看到已經下載完成的docker映象
[root@localhost]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
jenkins latest cd14cecfdb3a 2 years ago 696MB
建立Jenkins數據目錄,並進入目錄。
mkdir -p jenkins/data
cd jenkins
執行Jenkins容器
使用命令
docker run -itd --rm --name jenkins --privileged=true -p 80:8080 -p 50000:50000 -v $PWD/data:/var/jenkins_home jenkins/jenkins:lts
命令的意義爲
-i,開啓容器的標準輸入STDIN
-t,容器分配僞終端
-d,後臺執行容器
–rm,刪除已有名稱爲jenkins的容器
–name jenlins,指定容器的名稱爲jenkins
–privileged=true,給予容器root許可權,避免許可權問題,根據情況使用
-p 80:8080,容器的8080埠對映到宿主機的80埠
-p 50000:50000,容器的5000埠,對映到宿主機的5000埠
-v $PWD/data:/var/jenkins_home,當前目錄的data目錄掛載到容器的/var/jenkins_home目錄,儲存jenkins數據
jenkins/jenkins:lts,指定映象以及映象版本
啓動成功後,使用宿主機的ip進入jenkins頁面
安裝完成之後,安裝外掛,如果想要中文版,安裝漢化外掛。還需要安裝SVN或者Git的原始碼管理外掛,對於Java Maven的專案構建,需要安裝Maven Integrate外掛,還需要設定Java和Maven的環境。
對於安裝外掛這裏不再贅述,具體的操作介面,按照頁面操作操作即可。具體在Jenkins的系統管理頁面可以找到。
下面 下麪使用sonarqube作爲程式碼檢查工具,檢查程式碼品質。
安裝設定postgreSQL,作爲Sonarqube的儲存數據庫
選擇12.3版本,下載映象
docker pull postgres:12.3
建立數據目錄和日誌目錄,用於儲存數據和目錄
$ mkdir postgres
$ cd postgres
$ mkdir data
$ mkdir logs
啓動postgresql容器
$ docker run --name="postgres" --privileged=true --restart=always -e POSTGRES_PASSWORD=postgres -p5432:5432 -itd -v $PWD/data:/var/lib/postgresql/data -v $PWD/logs:/var/logs/postgresql postgres:12.3
建立sonarcube使用的數據庫和使用者名稱,建立sonarcube使用者,建立sonarcube數據庫,並授權給sonarcube使用者
$ docker exec -it postgres psql -U postgres
psql (12.3 (Debian 12.3-1.pgdg100+1))
Type "help" for help.
postgres=#
postgres=# create user sonarqube with password 'sonarqube';
CREATE ROLE
postgres=# create database sonarqube owner sonarqube;
CREATE DATABASE
postgres=# grant all on database sonarqube to sonarqube;
GRANT
postgres=# create schema my_schema;
CREATE SCHEMA
postgres=# ALTER USER postgres with encrypted password 'postgres';
exit
重新啓動postgresql
$ docker restart postgres
安裝設定SonarQube
選擇lts(long time support)版本,下載映象
$ docker pull sonarqube:lts
建立安裝目錄
$ mkdir sonarqube
$ cd sonarqube/
$ mkdir conf
$ mkdir extensions
$ mkdir logs
$ mkdir data
在conf目錄下建立sonar.properties組態檔,並增加設定
sonar.jdbc.username=sonarqube
sonar.jdbc.password=sonarqube
sonar.jdbc.url=jdbc:postgresql://localhost:5432/sonarqube?currentSchema=my_schema
sonar.web.host=0.0.0.0
sonar.web.port=9000
啓動容器
$ docker run --restart=always --privileged=true --name="sonarqube" -p 9000:9000 -v $PWD/conf:/opt/sonarqube/conf -v $PWD/extensions:/opt/sonarqube/extensions -v $PWD/logs:/opt/sonarqube/logs -v $PWD/data:/opt/sonarqube/data sonarqube:lts
-itd,後臺執行,啓動stdin標準輸入,並開啓容器僞終端
–restart=always,設定重新啓動策略爲always,即容器退出後自動重新啓動
–privileged=true,給予容器執行最高root許可權
–name=「sonarqube」,容器名稱爲sonarqube
-p 9000:9000,宿主機的9000埠對映容器的9000埠
-v $PWD/logs:/opt/sonarqube/logs,當前目錄下的logs目錄,掛載到容器的/opt/sonarqube/logs目錄
-v $PWD/extensions:/opt/sonarqube/extensions,當前目錄下的extensions目錄掛載到容器的/opt/sonarqube/extensions目錄
-v $PWD/logs:/opt/sonarqube/logs,當前目錄下的logs目錄,掛載到容器的/opt/sonarqube/logs目錄
-v $PWD/data:/opt/sonarqube/data,當前目錄下的data目錄,掛載到容器的/opt/sonarqube/data目錄
sonarqube:lts,指定映象名稱和版本號
其中各個命令的意義爲
測試sonar,開啓 http://{ip}:9000/
預設使用者名稱admin,預設密碼admin,可以開始使用sonarqube了。
登錄搭建好的sonarqube,安裝漢化包,安裝需要檢查的程式碼外掛如ckeckstyle,findbugs等,在安裝外掛的過程會比較慢,可能需要線下安裝,只需要下載外掛,放到sonarqube安裝目錄的/extensions/plugins目錄下就可以使用了。
在sonarqube中建立專案,填寫專案標識。
在jenkins安裝sonarqube scanner外掛,建立Jenkins任務,設定Java,Maven的執行環境,設定程式碼庫,在Post Steps欄設定如下。
其中Analysis properties詳細如下:
sonar.host.url=http://{IP}:9000
sonar.login=admin
sonar.password=admin
sonar.projectKey=sonar中的專案標識
sonar.projectName=sonar中的專案名稱
sonar.projectVersion=v1.0
sonar.sources=$WORKSPACE
sonar.java.binaries=$WORKSPACE/service/target #編譯後的class所在路徑
在jenkins構建成功後,生成的報告如下圖。
下面 下麪就可以根據sonar檢查出的問題,提高程式碼品質了。
(完^_^)