之前說到的jenkins自動化構建發版是通過svn方式,今天這裡介紹下通過git方式發本的操作記錄。
一、不管是通過svn發版還是git發版,都要首先下載svn或git外掛。
登陸jenkins,依次點選“Jenkins首頁”->“系統管理”->“管理外掛”->"可選外掛",選在svn或git有關外掛(ctrl+f搜尋"svn"或"git"),直接進行安裝即可
安裝成功後,在“已安裝”裡可以看到:
這樣,在構建任務的配置中,在”原始碼管理“裡就有svn和git的選項了
二、接著說下git發版配置。git程式碼是在gitlab平臺託管的。
1)如果要發版的程式碼在gitlab上是Private私有狀態或Internal狀態,那麼就只能通過ssh方式連線(推薦此種方式,比較安全),這兩種模式下是不能通過http方式連線。
做法如下:
現將jenkins本機的公鑰上傳到gitlab上(保證gitlab機器的ssh埠已對客戶機開放)
[root@redmine ~]# cat /root/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAmlV29T9ViFA+ld+ziZqDXwcOwAzSU8B4oESOZLEs51m+us8MPLYED7s1gQTmnXx2yTxCT67WnHUpRExm4gZj0jQTUi5uYFMuEJnXYLi7/YgeTjRkjYFs8RdpsNUp+FA6bmBSVLa/JDvWrvdO1xhicJp/8cX/c5Y16iXIgDWnewMgoknUYHZL+cplF5+JYSSb9We3+qq2GzWnkX5VkuSq9ky+ZYbUH/JrlbTAp8rB4J5+THYz5ahvP1UteMcaEf9duoT7N+VJLANmOWcEn7Q5JnNhNVJz5hafYg5cQgFOHmixriZaPsdAJ+yaN21sv+pBbTdzbHQn1oz/gpbd47imqQ== root@redmine.wangshibo.com
然後在jenkins本機測試是否能正常下載gitlab程式碼(假設git的url是git.wangshibo.net)
jenkins本機測試程式碼下載:(下面的兩行--global的全域性配置要跟上,不然提交後的記錄在gitlab上是追蹤不到的,只有這個全域性配置了,才能在gitlab上找到相應使用者的提交記錄)
[root@redmine ~]# mkdir git
[root@redmine ~]# cd git/
[root@redmine git]# git init .
Initialized empty Git repository in /root/git/.git/
[root@redmine git]# git config --global user.name "王士博" //全域性設定,指定下載使用的gitlab的使用者名稱
[root@redmine git]# git config --global user.email "root@redmine.wangshibo.com-jenkins" //全域性設定,指定下載使用的Keys名稱,就是上面新增的Keys
[root@redmine git]# git clone git@git.wangshibo.net:weixin/weixin.git
Initialized empty Git repository in /root/git/weixin/.git/
remote: Counting objects: 10, done.
remote: Compressing objects: 100% (6/6), done.
remote: Total 10 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (10/10), done.
然後在jenkins裡相關任務配置裡指定git路徑:
2)如果要發版的程式碼在gitlab上是Public公開狀態(這是必要前提條件,如下圖),那麼就可以直接通過http連線(http連線只能在這種模式下才能成功!要保證gitlab機器的http埠對客戶機開放)
這樣直接通過git clone http://git.wangshibo.net:8081/weixin/weixin.git 就能下載程式碼了
使用http方式直接連線gitlab顯然沒有ssh連線方式安全,但是也可以做些安全設定,比如在gitlab本機的iptables裡做埠限制(如上是8081埠),新增白名單等。
然後在jenkins裡相關任務配置裡指定git路徑:
三、jenkins上的發版指令碼
指令碼如下:
指令碼內容:
#!/bin/bash
SOURCE_DIR=/srv/apache-tomcat-7.0.67/webapps/jenkins/jobs/${JOB_NAME}/workspace/
DEST_DIR=/Data/app/xqsj_wx/
REMOTE_IP=*.*.*.*
/usr/bin/rsync -e "ssh -p25791" -avpgolr --delete-before $SOURCE_DIR $REMOTE_IP:$DEST_DIR
指令碼解釋:
1)通過上面的git將業務程式碼下載到jenkins本機jobs裡對應任務的workspace下。
本機的jenins部署路徑是/srv/apache-tomcat-7.0.67/webapps/jenkins
[root@redmine workspace]# pwd //wx-test是jenkins介面的任務工程名,指令碼中${JOB_NAME}是jenkins的內建變數
/srv/apache-tomcat-7.0.67/webapps/jenkins/jobs/wx-test/workspace
2)再通過rsync將下載的程式碼分發到遠端目標機器上即可。