gitlab + jenkins + salt持續整合
主要是瞭解持續整合方面的知識,分析gitlab的對於svn的優勢,瞭解gitlab和jenkins的原理,再配合指令碼和salt做一個簡易的持續整合。
環境
我使用三臺機器做測試:
三臺機器系統都是centos7,selinux disabled,iptables disabled
192.168.46.66 jenkins salt-master
192.168.46.82 gitlab
192.168.46.105 nginx salt-minion
該測試大致過程通過提交程式碼到gitlab觸發jenkins構建,jenkins呼叫指令碼打包程式,通過salt分發包,並通過salt部署包
安裝
1.1 安裝jenkins
官網安裝文件:https://wiki.jenkins-ci.org/display/JENKINS/Installing+Jenkins#InstallingJenkins-Unix%2FLinuxInstallation
我裝的穩定版本:
1.1.1 新增Jenkins的源(repository):
wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat-stable/jenkins.repo
rpm --import https://jenkins-ci.org/redhat/jenkins-ci.org.key
yum install jenkins
1.1.2 安裝/檢查JDK
[ [email protected] jenkins]# yum install java -y
[[email protected] jenkins]# java -version
openjdk version "1.8.0_71"
OpenJDK Runtime Environment (build 1.8.0_71-b15)
OpenJDK 64-Bit Server VM (build 25.71-b15, mixed mode)
1.1.3 安裝Jenkins:
[[email protected] jenkins]#yum install jenkins
遇到錯誤
Delta RPMs disabled because /usr/bin/applydeltarpm not installed.
jenkins-1.653-1.1.noarch.rpm FAILED
http://pkg.jenkins-ci.org/redhat-stable/jenkins-1.653-1.1.noarch.rpm: [Errno 14] HTTP Error 404 - Not Found ] 0.0 B/s | 0 B --:--:-- ETA
Trying other mirror.
[ [email protected] ~]# yum install -y deltarpm
繼續安裝jenkins
[[email protected] jenkins]#yum install jenkins
如果有防火牆
firewall-cmd --zone=public --add-port=8080/tcp --permanent
firewall-cmd --zone=public --add-service=http --permanent
firewall-cmd --reload
firewall-cmd --list-all
/usr/lib/jenkins/:jenkins安裝目錄,WAR包會放在這裡。
/etc/sysconfig/jenkins:jenkins配置檔案,“埠”,“JENKINS_HOME”等都可以在這裡配置
/var/lib/jenkins/:預設的JENKINS_HOME。
/var/log/jenkins/jenkins.log:Jenkins日誌檔案。
啟動Jenkins
[[email protected] jenkins]# /sbin/chkconfig jenkins on
[[email protected] jenkins]# systemctl start jenkins
1.1.4 安裝salt-master
1.1.4.1 匯入key
rpm --import https://repo.saltstack.com/yum/redhat/7/x86_64/latest/SALTSTACK-GPG-KEY.pub
1.1.4.2 編輯源/etc/yum.repos.d/saltstack.repo
[saltstack-repo]
name=SaltStack repo for RHEL/CentOS $releasever
baseurl=https://repo.saltstack.com/yum/redhat/$releasever/$basearch/latest
enabled=1
gpgcheck=1
gpgkey=https://repo.saltstack.com/yum/redhat/$releasever/$basearch/latest/SALTSTACK-GPG-KEY.pub
1.1.4.3 安裝master
yum install salt-master -y
1.1.4.4 啟動
systemctl enable salt-master
systemctl start salt-master
訪問 192.168.46.66:8080 1.2 gitlab安裝
官網安裝文件:https://www.elastic.co/guide/index.html
1.2.1 安裝相關軟體
yum install curl policycoreutils openssh-server openssh-clients
systemctl enable sshd
systemctl start sshd
yum install postfix
systemctl enable postfix
systemctl start postfix
firewall-cmd --permanent --add-service=http
systemctl reload firewalld
1.2.2 下載安裝gitlab包
curl -LJO https://packages.gitlab.com/gitlab/gitlab-ce/packages/el/7/gitlab-ce-8.5.5-ce.0.el7.x86_64.rpm/download
rpm -i gitlab-ce-8.5.5-ce.0.el7.x86_64.rpm
1.2.3 配置啟動gitlab
gitlab-ctl reconfigure
gitlab-ctl --help 檢視幫助
[[email protected] ~]# gitlab-ctl service-list
gitlab-workhorse*
logrotate*
nginx*
postgresql*
redis*
sidekiq*
unicorn*
1.2.4 登陸 192.168.46.82
Username: root
Password: 5iveL!fe
第一次登陸會讓你修改密碼
1.3 nginx安裝
1.3.1 安裝nginx
yum install -y nginx
啟動nginx
nginx
1.3.2 安裝salt-minion
1.3.2.1 匯入key
rpm --import https://repo.saltstack.com/yum/redhat/7/x86_64/latest/SALTSTACK-GPG-KEY.pub
1.3.2.2 編輯源/etc/yum.repos.d/saltstack.repo
[saltstack-repo]
name=SaltStack repo for RHEL/CentOS $releasever
baseurl=https://repo.saltstack.com/yum/redhat/$releasever/$basearch/latest
enabled=1
gpgcheck=1
gpgkey=https://repo.saltstack.com/yum/redhat/$releasever/$basearch/latest/SALTSTACK-GPG-KEY.pub
1.3.2.3 安裝master
yum install salt-master -y
1.3.2.4 啟動
systemctl enable salt-minion
systemctl start salt-minion
配置
2.1 配置46.105 nginx
2.1.1 配置nginx
我的程式碼會發布到/usr/share/nginx/html/demo目錄中
[[email protected] ~]# vim /etc/nginx/nginx.conf
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
root /usr/share/nginx/html/demo;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
location / {
}
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
重啟nginx
nginx -s reload
2.1.2 配置salt-minion
[[email protected] ~]# vim /etc/salt/minion
master: 192.168.46.66
id: nginx
重啟minion
systemctl restart salt-minion
在46.66 salt-master 加入nginx
salt-key -a nginx
2.2 配置46.82 gitlab2.2.1 建立一個demo專案
2.2.2 在46.66上建立ssh key
把公鑰拷貝過來,私鑰會拷到jenkins上,就可以無密碼通訊了
2.2.3 配置gitlab的web hooks
當有push時會觸發jenkins構建
url為: http://192.168.46.66:8080/git/[email protected]:root/demo.git
/git/notifyCommit?url=前為jenkins的地址和埠
/git/notifyCommit?url=後為git專案地址
2.2.4 配置salt master
vim /etc/salt/master
file_roots:
base:
- /srv/salt
重啟salt-master
systemctl restart salt-master
2.2 配置46.66 jenkins
2.2.1 配置jenkins
系統設定
建立專案
新增私鑰
指令碼放在/project
[[email protected] project]# ls
code config deploy.sh package
code 程式碼目錄
config 配置檔案目錄
package 程式碼打包後存放目錄
deploy.sh jenkins構建時呼叫指令碼
[[email protected] project]# cat deploy.sh
#!/usr/bin/bash
###########[size=16]#[/size]
#author:CM
#mail:[email protected]
#########[size=16]#[/size]
[size=16]提前建立相應的目錄[/size]
LOCK_FILE="/project/lock"
CODE_PATH="/project/code"
DEMO_PATH="/project/code/demo"
PACKAGE_PATH="/srv/salt/package"
SALT_PACKAGE_PATH="package"
CONFIG_PATH="/project/config"
LOG_FILE="/project/deploy.log"
DEST_PROJECT="/project"
CTIME=$(date "+%Y-%m-%d-%H-%M")
Usage(){
echo "Usage: $0 ( deploy | list | rollback edition)"
}
Lock_judge(){
if [ -f $LOCK_FILE ];then
echo "warnning !!! someone else must deploy new version or rollback old version! please wait."
exit 2
else
touch -f $LOCK_FILE
fi
}
Delete_lock_file(){
if [ -f $LOCK_FILE ];then
rm -f $LOCK_FILE
fi
}
Deploy_code(){
Lock_judge
tag=$?
echo $tag
if [ $tag == 0 ];then
cd $DEMO_PATH
git pull
Commit=$(git log|head -n 1|cut -d ' ' -f 2)
Com_ID=$(echo ${Commit:0:6})
cp -r $DEMO_PATH ${PACKAGE_PATH}/demo_${Com_ID}_${CTIME}
cp -r ${CONFIG_PATH}/* ${PACKAGE_PATH}/demo_${Com_ID}_${CTIME}/
cd $PACKAGE_PATH
tar -zcf demo_${Com_ID}_${CTIME}.tar.gz demo_${Com_ID}_${CTIME}
salt "nginx" cp.get_file salt://${SALT_PACKAGE_PATH}/demo_${Com_ID}_${CTIME}.tar.gz ${DEST_PROJECT}/demo_${Com_ID}_${CTIME}.tar.gz
salt "nginx" cmd.run "cd ${DEST_PROJECT} && tar -zxf demo_${Com_ID}_${CTIME}.tar.gz && rm -f /usr/share/nginx/html/demo && ln -s ${DEST_PROJECT}/demo_${Com_ID}_${CTIME} /usr/share/nginx/html/demo && nginx -s reload"
fi
Delete_lock_file
}
Edition_list(){
salt 'nginx' cmd.run "ls -l ${DEST_PROJECT}|grep ^d"
}
Rollback_code(){
Lock_judge
salt 'nginx' cmd.run "rm -f /usr/share/nginx/html/demo && ln -s ${DEST_PROJECT}/$1 /usr/share/nginx/html/demo"
Delete_lock_file
}
main(){
case $1 in
deploy)
Deploy_code
;;
list)
Edition_list
;;
rollback)
Rollback_code $2
;;
*)
echo $1
Usage
;;
esac
}
main $1 $2
#指令碼沒有完善,沒有寫日誌
測試
我之前已經推上去程式碼
vim index.html
<h1>Adam Jensen</h1>
<h2>今晚上吃</h2>
<h2>西紅柿雞</h2>
<h2>西紅牛腩</h2>
git add index.html
git commit -m "牛腩"
git push origin master
回滾
[[email protected] project]# ls
code config deploy.sh package
[[email protected] project]# sh deploy.sh list
nginx:
drwxr-xr-x 7 root root 129 Mar 23 09:28 demo_205d03_2016-03-23-09-28
drwxr-xr-x 7 root root 129 Mar 23 17:04 demo_3c2a63_2016-03-23-17-04
drwxr-xr-x 7 root root 129 Mar 22 09:21 demo_43fabe_2016-03-22-09-21
drwxr-xr-x 7 root root 151 Mar 21 17:41 demo_4c5be1_2016-03-21-17-41
drwxr-xr-x 7 root root 151 Mar 21 17:48 demo_4c5be1_2016-03-21-17-48
drwxr-xr-x 7 root root 119 Mar 21 14:46 demo_574cdd_2016-03-21-14-46
drwxr-xr-x 7 root root 119 Mar 21 14:48 demo_574cdd_2016-03-21-14-48
drwxr-xr-x 7 root root 119 Mar 21 14:49 demo_574cdd_2016-03-21-14-49
drwxr-xr-x 7 root root 119 Mar 21 14:56 demo_574cdd_2016-03-21-14-56
drwxr-xr-x 7 root root 129 Mar 21 15:59 demo_8c7d37_2016-03-21-15-59
drwxr-xr-x 7 root root 129 Mar 23 17:22 demo_8cc9b4_2016-03-23-17-22
drwxr-xr-x 7 root root 129 Mar 21 15:41 demo_a2333d_2016-03-21-15-41
drwxr-xr-x 7 root root 129 Mar 23 17:03 demo_d5f4f3_2016-03-23-17-03
[[email protected] project]# sh deploy.sh rollback demo_3c2a63_2016-03-23-17-04
轉至:http://www.openskill.cn/article/306
相關推薦
gitlab + jenkins + salt持續整合
目的:主要是瞭解持續整合方面的知識,分析gitlab的對於svn的優勢,瞭解gitlab和jenkins的原理,再配合指令碼和salt做一個簡易的持續整合。環境我使用三臺機器做測試: 三臺機器系統都是c
ansible+gitlab+Jenkins實現持續整合
ansible簡介: 一、ansible是新出現的自動化運維工具,基於Python開發,集合了眾多運維工具(puppet、cfengine、chef、func、fabric)的優點,實現了批量系統配置、批量程式部署、批量執行命令等功能。 二、ansible是基於模組工作的,本身沒有批
Jenkins+Git+Gitlab+Ansible實現持續整合自動化部署靜態網站(一)--技術流ken
前言 在之前已經寫了關於Git,Gitlab以及Ansible的兩篇部落格《Git+Gitlab+Ansible劇本實現一鍵部署Nginx--技術流ken》,《Git+Gitlab+Ansible劇本實現一鍵部署動態網站(二)--技術流ken》,以及關於jenkins的簡單使
Jenkins+Git+Gitlab+Ansible實現持續整合自動化部署動態網站(二)--技術流ken
專案前言 在上一篇部落格《Jenkins+Git+Gitlab+Ansible實現持續化整合一鍵部署靜態網站(一)--技術流ken》中已經詳細講解了如何使用這四個工具來持續整合自動化部署一個靜態的網站。 如果大家可以熟練掌握以上內容,勢必會在工作中減輕不小的工作量。 本篇
Jenkins+Gitlab搭建CI持續整合架構
首先安裝Jenkins和Gitlab 很簡單就不多說了,貼個地址 Installing Jenkins Install a GitLab CE 需要注意的是,在中國大陸由於牆的問題,Gitlab下載非常的慢,有可能導致下載失敗了。。 在這裡推薦一下
Jenkins+GitLab+fir.im 持續整合
寫在前面 最近公司搞自動化打包,從0開始折騰了幾天終於完成了,準備整理一下,寫成文件。 1、下載Jenkins並安裝 Jenkins下載地址:https://jenkins.io 在主頁面點選Download Jenkins選擇Mac OS。 安裝沒有什麼好介紹
Jenkins配合GitLab進行專案持續整合與構建
1. 按照博文《Centos7下Jenkins安裝》安裝好jenkins,確保外掛Git plugin和Subversion plugin已安裝 2. 配置JDK、Maven環境 如下所示: 3.
JMeter+ant+Jenkins部署持續整合環境
首先,安裝好幾個東西,配置好環境變數,接下來一一演示下: 1、JDK 存放路徑:D:\java\jdk 環境變數: JAVA_HOME=D:\java\jdk CLASSPATH=.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar
ruby Rspec+jenkins+allure持續整合
1.Allure2使用說明 2.ruby下載allure的gem gem install allure-rspec 3.修改原始碼 C:\Ruby23-x64\lib\ruby\gems\2.3.0\gems\allure-rspec-0.8.0\lib\allure-rspec\formatter.
[轉]使用jenkins實現持續整合
本文轉自:https://www.cnblogs.com/zishengY/p/7170656.html 一、jenkins 介紹 它是一個自動化的週期性的整合測試過程,從檢出程式碼、編譯構建、執行測試、結果記錄、測試統計等都是自動完成的,無需人工干預
前端專案基於GitLab-CI的持續整合/持續部署(CI/CD)
什麼是持續整合/持續部署(CI/CD)? 個人理解,說白了就是把程式碼測試、打包、釋出等工作交給一些工具來自動完成。這樣可以提高效率,減少失誤,開發人員只需要關心開發和提交程式碼到git就可以了。 怎麼做? 方式一: 使用web hooks,這種方式的原理就是在gitlab專案的Setting-
Jenkins+RF持續整合測試(一) 環境搭建
通常在自動化測試中,我們需要對自動化測試用例定時構建,並生成報告並通過郵件發給指定的人。最佳工具選擇莫過於Jenkins了。通過Jenkins整合robot framework外掛,我們能非常方便的定時從git/svn上拉取最新的自動化測試用例,然後執行用例並把最終結果以測試報告的形式發給指定的人群。 下面
Jenkins+Postman持續整合搭建及使用
window上使用Jenkins 一、安裝nodejs 1.安裝postman需要先安裝nodejs 下載地址: http://nodejs.cn/download/ 下載後一路next ,安裝後,開啟cmd,輸入node -v ,看到輸出nod
jenkins實現持續整合
下載安裝 軟體版本需求: JDK要求1.7以上,ant版本1.9系列都可以,jenkins版本2.33以上。jdk的安裝不再說了,下面只說一下ant和jenkins的安裝和配置: ant是基於java的一款構建工具,通過配置build.xml,讓
Gradle進階:5:結合Jenkins進行持續整合
結合Jenkins進行gradle的持續構建有多種方式,可以在Jenkins的容器種直接安裝gradle並直接使用,也可以通過jenkins的gradle外掛進行使用,也可以通過呼叫gradle的映象來進行使用。這篇文章以jenkins的gradle外掛使用方式為例,介紹如何在jenk
Docker+Jenkins持續整合環境(1)使用Docker搭建Jenkins+Docker持續整合環境
來源:https://www.cnblogs.com/xiaoqi/p/docker-jenkins-cicd.html 本文介紹如何通過Jenkins的docker映象從零開始構建一個基於docker映象的持續整合環境,包含自動化構建、釋出到倉庫\並部署上線。 0. 前置條件 伺服器安
如何使用Jenkins進行持續整合測試
上篇,將Jenkins的持續整合測試環境搭建成功了,接下來,開始我們的建立任務和執行構建。 (一)建立任務 1.建立任務 點選首頁“建立一個新任務”的連結,如下: 2.選擇 Jenkins 任務型別 Jenkins 提供了四種類型的任務:
Python Web專案中使用Jenkins進行持續整合CI
轉載原文:http://www.hustlzp.com/post/2014/08/jenkins 在一個專案的開發過程中,往往會有一些需要反覆執行的操作,比如編譯、測試、部署。具體於Flask專案,我一般使用nose執行單元測試、fabric進行部署、pylint執行程式碼質量檢測等。這些頻繁需要執行
Mac上使用jenkins+git持續整合淺析
本文旨在讓同學們明白如何讓jenkis在mac筆記本上執行,並實際與一個最簡單的git地址互動並執行簡單的jenkins任務,如果學習本文,需要先按照https://www.cnblogs.com/xuezhezlr/p/8597715.html在mac上搭建tomcat和java,jenkins等環境,
基於 Jenkins 構建持續整合任務
1.1 Jenkins 配置使用心得 我是在windows10上安裝的,安裝過程很簡單,從官網上下載下來msi安裝包,雙擊執行就好了。安裝程式完成後會自動開啟http://localhost:8080網頁。我在這一步出現了點小問題,自動開啟的網頁顯示需要使用者名稱和密碼,一番摸索才明白原來是因為我電腦裝了o