簡述:gitlab ci ,依賴runner 來執行 Pipelines,Pipelines包含對多個階段中job的定義。html
第一步:安裝runnerjava
curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-ci-multi-runner/script.rpm.sh | sudo bash sudo yum install gitlab-ci-multi-runner
第二步:註冊runnergit
須要兩個東西 :私服地址URL 和 TOKEN,能夠在gitlab項目的設置->ci/cd中找到web
sudo gitlab-ci-multi-runner register 回車後按提示輸出url 和 token 注意:經過gitlab-ci-multi-runner register註冊的Runner配置會存儲在/etc/gitlab-runner/config.toml中,若是須要修改可直接編輯該文件
注意事項:這裏我本身對git-runner service 進行了 工做空間修改,這裏要對注意一下新目錄的權限問題apache
git-runner 配置詳解api
第三步:在 gitlab 私服配置ci/di配置文件 gitlab-ci.ymltomcat
gitlab-ci.yml 官方詳解bash
# 定義 stages,我暫時只定義了兩個階段 構建、發佈 stages: - build - deploy # 定義 job build-job: stage: build script: - mvn clean compile # 定義 job deploy-job: stage: deploy script: - /data/script/deploy.sh
這裏注意一下:咱們的項目是依賴maven 構建的,因此須要在runner的服務器上須要安裝 maven服務器
附加一下我測試用的構建部分代碼:爲了匹配歷史項目,正規項目跟進本身的需求修改構建代碼app
<build> <finalName>freezing</finalName> <sourceDirectory>${basedir}/src/main/java</sourceDirectory> <outputDirectory>${deploy.path}/WEB-INF/classes/com/</outputDirectory> <resources> <resource> <directory>${basedir}/src/main/webapp</directory> <excludes> <exclude>WEB-INF/**/*.*</exclude> <exclude>templates/default/z/**/*.*</exclude> </excludes> <targetPath>${deploy.path}/</targetPath> </resource> <resource> <directory>${basedir}/src/main/resources</directory> <excludes> <exclude>**/*.*</exclude> </excludes> </resource> <resource> <directory>${basedir}/src/main/config</directory> <excludes> <exclude>**/*.*</exclude> </excludes> </resource> </resources> <plugins> <plugin> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.7</source> <target>1.7</target> <compilerArguments> <verbose /> <extdirs>${basedir}/src/main/webapp/WEB-INF/lib</extdirs> </compilerArguments> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <executions> <execution> <id>copy-dependencies</id> <phase>process-resources</phase> <goals> <goal>copy-dependencies</goal> </goals> <configuration> <outputDirectory>${basedir}/src/main/webapp/WEB-INF/lib</outputDirectory> <overWriteSnapshots>true</overWriteSnapshots> </configuration> </execution> </executions> </plugin> </plugins> </build>
附加劇啓tomcat腳本
#!/bin/bash # tomcat 目錄 p='/data/tomcat7' # tomcat 服務地址 sname='/etc/init.d/tomcat7' work=${p}'/work/' `rm -rf ${work}` tomcatpath=${p}'/bin' echo 'operate restart tomcat: '$tomcatpath pid=`ps aux | grep $tomcatpath | grep -v grep | awk '{print $2}'` echo 'exist pid:'$pid if [ -n "$pid" ] then { echo ===========shutdown================ $sname stop sleep 2 pid=`ps aux | grep $tomcatpath | grep -v grep | awk '{print $2}'` if [ -n "$pid" ] then { sleep 2 echo ========kill tomcat begin============== echo $pid kill -9 $pid echo ========kill tomcat end============== sleep 2 echo ===========startup.sh============== $sname start } else $sname start fi } else echo ===========startup.sh============== $sname start fi
第四步:驗證
經過push代碼,觸發工做流,而後查看運行日誌
這篇文章是很基礎的操做,讓你快速感覺它的簡單易用,高級功能能夠參考官方文檔,或者後期可能會更新一下博客
補充幾個小腳本:遍歷更新文件的時間和參照文件作比較來判斷是否須要重啓tomcat、檢測某個地址是否可用
#! /bin/bash deploy_path="/data/script/deploy.sh" #遍歷文件夾 res=0 #默認類未更新不須要重啓tomcat function read_dir(){ for file in `ls $1` #注意此處這是兩個反引號,表示運行系統命令 do if [ -d $1"/"$file ] #注意此處之間必定要加上空格,不然會報錯 then read_dir $1"/"$file else res=$(compareTime $1"/"$file $deploy_path) if [ $res == 1 ] then break fi fi done } #比較文件修改時間 function compareTime(){ newer=`find $1 -newer $2` if [ "$newer" == "$1" ] then echo 1 return 1 #$1 大於 $2 else echo 0 return 0 # 相反 fi } #讀取第一個參數 read_dir $1 echo $res
#!/bin/bash testapi='http://www.cn-healthcare.com/freezing' urlstatus=$(curl -s -m 5 -IL $testapi|grep 200) if [ "$urlstatus" == "" ];then echo "testapi result is error" return error else echo "testapi result is right:"$urlstatus fi
補充:代碼須要同步到多臺機器,可能須要用到,各個機器之間免密登陸
配置服務器之間的ssh登陸
三臺服務器的ip分別是:
192.168.0.101,
192.168.0.102,
192.168.0.103
gitlab-runner安裝的服務器爲101,另外兩臺爲應用服務器
因此要創建 gitlab-runner用戶與102和103之間的root ssh免密碼登陸
1.先在101服務器切換gitlab-runner用戶
su gitlab-runner
2.使用ssh-keygen -t rsa
生成ssh的公鑰和私鑰
ssh-keygen -t rsa #回車以後3次回車便可
會在 /home/gitlab-runner/.ssh目錄下發現2個文件
id_rsa.pub 和id_rsa
3.而後在應用服務器root用戶,重複上述操做,這樣 root用戶的ssh的公鑰和私鑰也生成了,接下來就是將gitlab-runner用戶的公鑰寫入root用戶的authorized_keys文件中
cat /home/gitlab-runner/.ssh/id_rsa.pub >>/root/.ssh/authorized_keys
4.重啓ssh service ssh restart
5.先切換到gitlab-runner用戶 su gitlab-runnner
6.使用ssh登陸root用戶 ssh root@192.168.56.102
你會發現你已經切換到了root用戶了
注意 第一次鏈接會提示yes/no, 輸入yes便可