搭建Jenkins
wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.repo
rpm --import https://jenkins-ci.org/redhat/jenkins-ci.org.key
yum install -y jenkins
systemctl enable jenkins.service #設置jenkins服務為自啟動服務
systemctl start jenkins.service #啟動jenkins服務
vi /etc/sysconfig/jenkins
service jenkins start/stop/restart
或者也可以下載jenkins.war,然后啟動 -jar 啟動。
啟動好之后,可以通過 ip:8080 進行訪問 http://192.168.11.222:8080, 端口默認是8080。 第一次訪問需要進行一些插件的安裝,會比較慢。安裝好之后就可以使用了:
推薦使用 service jenkins start/stop/restart 方式進行啟停。
全局工具配置
我們的項目是基於Maven的,所以需要安裝Maven,
yum install -y maven
安裝好之后,需要修改一下settings文件配置,主要是兩個地方:
“默認 settings 提供” 、 “默認全局 settings 提供”, 全部使用 文件路徑 /var/lib/jenkins/settings.xml:
settings.xml文件如下(主要是需要配置私服地址,加快下載速度,其中的地址, 可以按照需要進行修改):
JDK和Git 按情況進行配置:
yum install -y java
yum install -y git
系統配置
Jenkins Location配置:
Jenkins URL 是當前Jenkins的地址,是第一次登錄的時候設置的, 也可以此處進行修改。系統管理員郵件地址也是,可寫管理員郵件地址:
Extended E-mail Notification 擴展郵件通知配置:
SMTP server 填 smtp.qq.com,Default user E-mail suffix填 @qq.com,Default Content Type選HTML,Default Recipients填默認收件人,如 gaolong@lkk.cn,luokai2@lkk.cn。
Default Subject 填 $PROJECT_NAME - Build # $BUILD_NUMBER - $BUILD_STATUS!
Default Content填:
$PROJECT_NAME - Build # $BUILD_NUMBER - $BUILD_STATUS:
Check console output at $BUILD_URL to view the results.
插件安裝
Jenkins會默認安裝一些插件,但是可能還不夠,我們需要另外安裝一些; 我們需要 確保下面的插件都已經安裝,后面需要用到:
Ant Plugin、Build Authorization Token Root Plugin、 Email Extension Plugin、 Generic Webhook Trigger Plugin、 GitHub Branch Source GitHub plugin 、Gitlab Authentication plugin 、Gitlab Hook Plugin、 HTML Publisher 、
Publish Over SSH 、SonarQube Scanner for Jenkins
Publish over SSH
Publish over SSH是一款進行遠程部署的插件,可以簡化一些配置,有了他,就不要再去寫sh腳本了。
安裝Publish over SSH插件好后,配置一下:
我們可以添加多個SSH Servers,每一個SSH Server 可以使用默認值,或進行單獨的配置:
Name、Hostname填ip地址,Username填root,Remote Directory填需要發布的遠程目錄,點擊高級,進行一些高級配置。我們用的比較多的是 修改認證方式,首先勾選“Use password authentication, or use a different key”, 然后有兩個選擇,一是密碼,而是使用SSH Key。
采用密碼認證的話,Passphrase / Password 填root的密碼;
采用SSH key認證的話,Passphrase / Password 不填,Key填 Jenkins安裝機器上執行 ssh-keygen生成的公鑰,cat /root/.ssh/id_rsa.pub, 然后將/root/.ssh/id_rsa.pub 的內容復制過來粘貼即可:
全局安全配置
主要2個地方需要設置:
- 訪問控制-授權策略:勾
- 反勾選:
集成Sonar
安裝Sonar
安裝參考 https://blog.csdn.net/huiyanshizhen21/article/details/87069356
配置Sonar
Sonar目前還不需要做什么配置,但目前我們需要記錄一個token。
web訪問地址是http://192.168.11.200:19000/projects:(默認端口是9000, 因為有沖突,我這里改成了19000),首次登錄會生成一個token,需要提供一個name,我們填erdp:
這個token 很有用,需要記下來。
Jenkins中集成Sonar:
先安裝 SonarQube servers插件,主要是SonarQube Scanner for Jenkins插件
然后,在系統配置中找到SonarQube servers,然后點擊Add
然后填寫相關信息:
Name隨便寫,Server URL 填Sonar的web地址:
Server authentication token需要添加一下:
注意類型選 Secret text,Secret、ID 都填Sonar首次登錄提供的token
然后就好了!
憑據管理
進入: Jenkins → 憑據 → 系統 → 全局憑據 (unrestricted),然后“添加憑據”
name 填 jenkins,
類型選 SSH Username with private key
Private Key 填 從在Jenkins機器 通過ssh-kengen 生成的 /root/.ssh/id_rsa.pub 的內容。
需要注意的是,這個憑據是用來拉取git代碼的,所以需要 gitlab 的一些配置:
Integrations-Webhook
對於每個微服務,我們需要 Integrations-Webhook配置,從而每當代碼有push的時候,能夠自動觸發構建:
關鍵有3個地方需要設置:
URL填 http://120.78.204.40:1200/job/cad/build?token=c1f3458469a2895740fac134, 其中的ip 120.78.204.40:1200 是Jenkins的地址,這里需要一個外網地址,因為我們的gitlab 也位於阿里雲之上。
通過在Jenkins機器上執行 下面的sh命令生成:
openssl rand -hex 12
Trigger 選 Push events
然后可以進行測試,點擊“Test”→ "Push events":
出現了Successfully,即表示成功。 然后點擊“Save changes” 以完成設置。
創建任務
輸入名稱,然后選擇“自由風格”
然后進行配置。配置主要是進行 源碼管理,構建觸發器,構建,構建后操作
源碼管理
源碼管理選擇Git,Repository URL 填微服務工程的git地址:git@gitlab.lkk.cn:erdp/erdp_doc.git,Credentials選之前配置的憑據(或者也可以點擊“添加”進行新增),Branches to build 填develop。源碼庫瀏覽器選gitiles,URL填git地址。
構建觸發器
構建觸發器勾選
身份驗證令牌填 上面設置Integrations-Webhook→ Secret Token的時候生成的那個(通過openssl rand -hex 12),一定要和Secret Token相同:
構建
構建選擇“添加構建步驟”→ 調研頂層Maven目標:
目標 填 clean -DskipTests=true package
然后 再選擇“添加構建步驟”→ Execute SonarQube Scanner:
Analysis properties填
sonar.projectKey=erdp_doc
sonar.projectName=erdp_doc
sonar.projectVersion=1.0sonar.language=java
sonar.sourceEncoding=UTF-8sonar.sources=$WORKSPACE
sonar.java.binaries=$WORKSPACE
構建后操作
構建設置后就是設置 構建后操作,
Name 選擇之前創建的SSH Server,表示需要部署的機器
Source files 填 **/erdp_*.war,表示將 *.war的文件部署
Remove prefix 填 ${JOB_NAME}_app/target ,表示不會創建的目錄
Exec command 填
cd /app/java
./kill.sh $JOB_NAME
sleep 1
./run.sh $JOB_NAME
表示部署后需要執行的腳本:
./kill.sh $JOB_NAME 表示殺死微服務
./run.sh $JOB_NAME 表示啟動微服務
點擊“應用”或“保持”,完成一個任務的創建!至此,我們完成了代碼自動部署、代碼安全掃描。自動化接口測試 ERDP2.0.0_Interface_Test 。
之后其他的微服務都通過類似的方法創建。 需要注意的是,我們創建的任務,任務名一定是gitlab的微服務名。因為我們用到了微服務名這個變量$JOB_NAME。