1. 程式人生 > >Jnekins和gitlab建立對接 構建jenkins+gitlab+docker綜合專案

Jnekins和gitlab建立對接 構建jenkins+gitlab+docker綜合專案

                           Jekins和gitlab建立交接:

安裝部署:

為了8080埠不衝突我們佈置了兩臺虛擬機器通過url-API Token SSH HTTPS等多種方式建立連線

Server1-------->gitlab實體記憶體2G

Server2--------->jenkins實體記憶體1G

1 Gitlab:安裝

GitLab 是一個用於倉庫管理系統的開源專案,使用Git作為程式碼管理工具,並在此基礎上搭建起來的web服務。安裝方法是參考GitLab在GitHub上的Wiki頁面。

yum install mailx #傳送郵件
yum install net-tools #檢視埠新增閘道器
netstat -antlp #郵件埠25
yum install gitlab-ce-11.2.0-ce.0.el7.x86_64.rpm
systemctl status postfix
vi /etc/gitlab/gitlab.rb #修改ip
external_url 'http://172.25.64.2'
gitlab-ctl reconfigure #重新編譯
gitlab-ctl restart #編輯配置檔案要重啟服務:

修改密碼:

 登陸預設root使用者:

建立專案demo通過ssh和jenkins建立連線:


 

[[email protected] ~]# git clone [email protected]:demo/demo.git #最初我們用的是ssh建立對接因此clone程式碼是不需要密碼的
Cloning into 'demo'...
remote: Enumerating objects: 3, done.
remote: Counting objects: 100% (3/3), done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (3/3), done
[
[email protected]
~]# cd demo/ [[email protected] demo]# ls README.md [[email protected] demo]# vim README.md # DEMO # HELLO WORLD [[email protected] demo]# git add README.md [[email protected] demo]# git commit -m " update README.md " [master 89c67ec] update README.md 1 file changed, 1 insertion(+) [
[email protected]
demo]# git remote add origin [email protected]:root/demo.git #本地上傳 [[email protected] demo]# git remote -v origin [email protected]:demo/demo.git (fetch) origin [email protected]:demo/demo.git (push) [[email protected] demo]# git push origin master Counting objects: 5, done. Writing objects: 100% (3/3), 264 bytes | 0 bytes/s, done. Total 3 (delta 0), reused 0 (delta 0) To [email protected]:demo/demo.git 23fe147..89c67ec master -> master

2 Jenkins安裝

Jenkins是一個開源軟體專案,是基於Java開發的一種持續整合工具,用於監控持續重複的工作,旨在提供一個開放易用的軟體平臺,使軟體的持續整合變成可能。

Jenkins功能包括:

1、持續的軟體版本釋出/測試專案。

2、監控外部呼叫執行的工作。

yum install jdk-8u171-linux-x64.rpm  jenkins-2.121.3-1.1.noarch.rpm
yum install git -y #安裝git
systemctl start jenkins
cat  /var/lib/jenkins/secrets/initialAdminPassword #檢視初始密碼
4bc8abd16b8a46a3a3817a8770c05936

登陸jenkins:

 線上安裝外掛:

建立使用者:

安裝gitlab外掛:

在控制檯建立專案test:

3 配置工程:

1>原始碼管理 git

URL:[email protected]:demo/demo.git
Credentials:root;將id_rsa公鑰貼上在認證資訊裡面
[[email protected] ~]# cd .ssh
[[email protected] .ssh]# ls
authorized_keys  id_rsa  id_rsa.pub  known_hosts
[[email protected] .ssh]# cat id_rsa
-----BEGIN RSA PRIVATE KEY-----

2>構建觸發器輪詢SCM---->日程表 * * * * *每分鐘檢視檢測一次

步驟:

shell---->ls -a 應用儲存

在真機推送檔案到控制檯

[[email protected] .ssh]# cd
[[email protected] ~]# cd demo/
[[email protected] demo]# ls
README.md
[[email protected] demo]# vim test.txt
[[email protected] demo]# git add test.txt
[[email protected] demo]# git commit  -m "add test.txt"
[master cfeb949] add test.txt
 1 file changed, 1 insertion(+)
 create mode 100644 test.txt
[[email protected] demo]# git push origin master
Counting objects: 4, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 278 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To [email protected]:demo/demo.git
  89c67ec..cfeb949  master -> master

3> 在控制檯輸出

在jenkins上允許gitlab訪問;push events

在jenkins上建立使用者生成一個臨時的token允許gitlab連線

[[email protected] ~]# curl -X PUT --header "PRIVATE-TOKEN:6va1AMvKgGyiyjYDPazx" 'http://172.25.30.1/api/v4/application/setting?allow_local_requests_from_hooks_and_services=true'
# 允許gitlab建立api埠連線

push event:Enable SSL verification

建立

gitlab上面Integrations :

URL:http://172.25.30.2:8080/project/test

Secret Token:390ac7a2309d1b7cd047b2981526ebda(advanced generate)

test:successfully----->200

在物理機push一個hello觸發gitlab的專案就會返回給jenkins監控;只要提交就會在jenkins端看到

[[email protected] demo]# vim hello.txt
[[email protected] demo]# git add hello.txt
[[email protected] demo]# git commit -m "add hello.txt"
# On branch master
nothing to commit, working directory clean
[[email protected] demo]# git status -s
[[email protected] demo]# git push origin master
Everything up-to-date

4.構建jenkins+gitlab+docker綜合專案

git -> Dockerfile -> gitlab -> jenkins -> docker plugin -> build image -> push registry -> docker run

測試一:開啟一個nginx容器做測試,測試是否可以通過jenkins關閉nginx容器,作為綜合案例執行docker用

1. jenkins安裝docker外掛

2. 物理機上安裝docker軟體

docker-engine-17.03.1.ce-1.el7.centos.x86_64.rpm container-selinux-2.9-4.el7.noarch.rpm

3. 匯入rhel7.tar,nginx.tar

docker load -i rhel7.tar
 
docker load -i nginx.tar

開啟一個nginx容器

4. 注意必須給jenkins許可權執行docker

visudo

5. 建立一個dockerjob

如果在控制自臺出現如下報錯

sudo: sorry, you must have a tty to run sudo

在visudo時註釋 Default requiretty 一行

6. 點選開始構建,構建成功,檢視nginx的狀態

[[email protected] ~]# docker ps -a
 
CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS                      PORTS               NAMES
 
4338fdd3e9b3        nginx               "nginx -g 'daemon ..."   About a minute ago   Exited (0) 10 seconds ago                       vm1

測試二:提交Dockerfile後自動構建映象

1. testjob在之前的測試中已經做好了即使觸發,現在新增docker構建功能

2. 修改/var/run/docker.sock的許可權為777

3. 提交Dockerfile和編譯所需檔案

[[email protected] demo]# cat Dockerfile 

FROM rhel7

EXPOSE 80

COPY dvd.repo /etc/yum.repos.d/dvd.repo

RUN rpmdb --rebuilddb && yum install -y httpd && yum clean all

COPY index.html /var/www/html

CMD ["/usr/sbin/httpd","-D","FOREGROUND"]

[[email protected] demo]# cat dvd.repo 

[dvd]

name=dvd

baseurl=http://172.25.30.250/source7.3

gpgcheck=0

[[email protected] demo]# cat index.html 

<h1>www.westos.org</h1>

<h1>www.westos.org</h1>

(經過測試可以構建出新的映象)

[[email protected] demo]# git add Dockerfile dvd.repo index.html

[[email protected] demo]# git commit -m "add Dockerfile&dvd.repo$index.html"

[[email protected] demo]# git push origin master

4. 產生觸發#11

Jenkins構建成功

檢視映象,TAG就是我們之前定義的${BUILD_NUMBER},並且rhel7映象的版本標記為11和lastest實際上是一樣的,會自動修改標籤

[[email protected] ~]# docker images 

REPOSITORY          TAG                 IMAGE ID            CREATED              SIZE


rhel7               11                  709915d668ec        About a minute ago   169 MB


rhel7               latest              709915d668ec        About a minute ago   169 MB

5. 測試構建的映象

[[email protected] ~]# docker run -d --name vm1 rhel7

5e29d5f9ec7b693f3d72bc777f924c53be599c2ec460442659f2674f69f4fa07

[[email protected] ~]# curl 172.17.0.2  (沒有做埠對映)

成功!!!

測試三:整合dockerjob和testjob

1. dockerjob

只要testjob(即時檢測)檢測到提交了程式碼,就開始建立一個映象,dockerjob就觸發建立並且執行一個容器例項

2. 測試,修改index.html,提交觸發testjob和dockerjob


[[email protected] demo]# vim index.html
 
[[email protected] demo]# git add index.html
 
[[email protected] demo]# git commit -m "update index.html"
 
[master 2780ef2] update index.html
 
 1 file changed, 2 insertions(+)
 
[[email protected] demo]# git push origin master

成功!!!

3. 檢視觸發結果


[[email protected] ~]# docker images 
 
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
 
rhel7               13                  5d363e4a028c        8 minutes ago       185 MB
 
rhel7               latest              5d363e4a028c        8 minutes ago       185 MB
 
[[email protected] ~]# docker ps -a
 
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                NAMES
 
f64ee098da00        rhel7               "/usr/sbin/httpd -..."   8 minutes ago       Up 8 minutes 

綜合案例:

1. 修改dockerjob

2. 修改原生代碼提交觸發

[[email protected] demo]# vim index.html
 
[[email protected] demo]# git add index.html
 
[[email protected] demo]# git commit -m "update index.html"
 
[master 7134c17] update index.html
 
 1 file changed, 3 insertions(+), 3 deletions(-)
 
[[email protected] demo]# git push origin master

 3. 建立本地倉庫,push映象測試


[[email protected] ~]# docker load -i registry-2.3.1.tar 
 
# 如果沒有tar包,可以用pull在網上拉取
 
[[email protected] ~]# docker run -d --name registry -p 5000:5000 registry:2.3.1 
 
34fc5afff47f2f38917f010496d50e640554c6403cf77a5c5da1ff49fc91df24
 
[[email protected] ~]# docker tag nginx:latest localhost:5000/nginx
 
[[email protected] ~]# docker push localhost:5000/nginx
 
成功!!!

3. 新增倉庫到testjob,開啟自動push映象功能

4. 修改本地檔案,提交觸發

[[email protected] demo]# vim index.html
 
[[email protected] demo]# git add index.html
 
[[email protected] demo]# git commit -m "update index.html"
 
[master b19408f] update index.html
 
 1 file changed, 4 insertions(+)
 
[[email protected] demo]# git push origin master
 
JenKins成功檢測並觸發!!!

5. 檢視映象

[[email protected] ~]# docker images 
 
REPOSITORY             TAG                 IMAGE ID            CREATED             SIZE
 
localhost:5000/rhel7   16                  56f85075bee2        4 minutes ago       208 MB
 
localhost:5000/rhel7   latest              56f85075bee2        4 minutes ago       208 MB

6. 修改dockerjob

上傳到本地倉庫之後,會自動修改名字為localhost:5000/rhel7,所以在執行的shell裡面也要進行修改,否則rhel7是本地映象,而不是本地倉庫的映象。

至此,從編寫Dockerfile,提交檔案到gitlab上,然後gitlab被jenkins的testjob原始碼管理模板即時檢測到,然後通過jenkins的docker外掛構建已上傳到gitlab的程式碼為為一個映象,同時上傳到本地倉庫,dockerjob在testjob完成之後觸發,開始執行shell,建立一個容器例項就結束啦.

相關推薦

Jnekinsgitlab建立對接 構建jenkins+gitlab+docker綜合專案

                           Jekins和gitlab建立交接: 安裝部署: 為了8080埠不衝突我們佈置了兩臺虛擬機器通過url-API Token SSH HTTPS等多種方式建立連線 Server1-------->gitlab實體

Jenkinsgitlab整合自動構建

Jenkins安裝外掛 Jenkins上需要安裝如下外掛 Gitlab Hook Plugin,GitLab Plugin Job配置 在需要自動觸發的Job中 選擇Build Triggers進行如下操作, 生成的token和webhook地址稍後有用 Gitlab上配置Webhook

gitlab+jenkins+maven+docker持續集成(三)——自動構建

jenkins gitlab maven 具體原理圖,如下,構建項目配置,這裏略過,我們直接配置gitlab的自動構建通過webhook可以實現自動構建,當然jenkins的強大之處在於插件,我們先安裝插件Jenkins-->插件管理Gitlab Hook Plugin GitLab Plu

gitlab+jenkins+maven+docker持續集成(五)——Maven 項目構建配置

jenkins gitlab maven 首先,安裝插件Maven Integration plugin接下來我們配置Global Tool Configuration前提先在系統裏安裝好jdk, maven,創建maven項目其它配置大同小異,主要說明下這步pom.xml 我這裏的是在項目中,如

gitlab+jenkins+maven+docker持續集成(十)——參數化構建過程之多環境tag構建

gitlab+jenkins+maven+docker持續集成(十)——參數化構建過程之多環境tag構建同一個項目,要構建到不同的環境,而且對應的分支或tag也不相同,這裏就要用到jenkins的參數化構建過程 中的Git Parameter和Choice Parameter, 先看下效果實現過程構建過程:G

gitlab提交程式碼自動觸發webhook構建jenkins專案

1:環境配置     Debian 3.16.43     jenkins2.121.12:描述        前端開發人員想程式碼提交到gitlab然後自

Jenkins Pipeline+Maven+Gitlab持續整合構建

  1.以下全是個人理解,此文全是在實際工作環境中實現,如果您是想看著這篇部落格去練習,可能有些環境您沒法搭建(maven庫,編譯順序),得問問一個搞開發的朋友,開發得提供些東西,或者,您可以通過此文件,學習到pipeline指令碼的知識,您可以去除掉用mvn  build這一項,其他的

Jenkins+Maven+Gitlab+Tomcat 自動化構建打包、部署 tomcat企業級Web應用伺服器配置與會話保持

一、環境需求 本帖針對的是Linux環境,Windows或其他系統也可借鑑。具體只講述Jenkins配置以及整個流程的實現。  1.JDK(或JRE)及Java環境變數配置,我用的是JDK1.8.0_144,網上帖子也很多,不贅述。  2.Jenkins 持續整合和持續交付專

gitlab實現webhook觸發jenkins 自動,構建,測試,push webhook構子 總結

ref 安裝 harbor 14. 允許 安全管理 rbo 觸發器 代碼 最新一直在學習 工作 + 學習 去掉 90% 所以blog 一直沒更 真是很不好! exsi ceph gitlab jenkins harbor k8s docker-compose ap

使用GitLabJenkinsDocker建立快速持續化整合交付部署方案(三)

上一章節中我們完成了對Docker的使用和部署。 本文中我們將完成 GitLab → Jenkins → Docker 的環境,並完成基於GitLab、Jenkins、Docker的面向Web開發的快速部署方案。   我們最終得到的結果,將是部署人員只在部署環境下只敲一句命令,

使用GitLabJenkinsDocker建立快速持續化整合交付部署方案(二)

上一文中我們完成了基礎環境的安裝。 本文將要學習 Docker Image 的自定義,及 使用Docker Compose進行環境部署的方法。   文章索引 GitLab、Jenkins、Docker 初始環境安裝 製作 Docker映象 及 Docker Co

使用GitLabJenkinsDocker建立快速持續化整合交付部署方案(一)

摘要 本系列文章將要完成的: 安裝GitLab、Jenkins、Docker等一系列基礎環境 建立自己的 Docker Registry,私有的Docker映象服務,用於儲存我們自己的Docker映象倉庫(Repository) 使用GitLab進行程式碼管理,並聯動Jen

JenkinsGitLab 的自動化構建

Jenkins 是一個功能強大的應用程式,允許持續整合和持續交付專案,無論用的是什麼平臺。持續整合是個簡單重複勞動,人來操作費時費力,使用自動化構建工具完成是最好不過的了。整合 Jenkins 可以用於一些測試和部署技術,需要開發人員定期整合程式碼到共享儲存庫。持續整合要求開

linux(CentOS)下Jenkins+GitLab+Maven+Tomcat多環境自動釋出部署

環境:jenkins需要jdk1.8以上、需要maven3.2.5以上、需要git2.6.2以上 1、安裝jdk: 解壓:tar -zxvf jdk-8u181-linux-x64.tar.gz 配置環境變數:vim /etc/profile 在尾部追加(

Jenkins+Gitlab+Maven+Shell 進行Docker微服務項目自動化構建

logs try 分支 業務 print 服務 風格 acf jenkin * 環境:CentOS7代碼倉庫:Gitlab持續集成代碼更新:Jenkins構建打包:Maven鏡像自動交付腳本:Shell 基礎環境軟件安裝:Gitlab、Jenkins、Maven配置,安裝參

【06】JenkinsGitlab 自動觸發構建以及釘釘通知

寫在前面的話   在某些時候,我們希望能夠實現這樣一個功能,當用戶提交東西到 gitlab 上的時候,希望它能夠自動觸發構建,釋出到我們需要的環境。 目前我們內部有做類似的需求:產品提交原型到 gitlab,然後 gitlab 分支變動觸發 Jenkins 構建,將最新的產品原型釋出到 ngi

Jenkins+GitLab

real tro token webhooks 修改端口 檢查 提示 pan jenkins 思路 1、使用jenkins+gitlab,實現git倉庫有push時,立即觸發jenkins的job,進行構建。 2、jenkins和gitlab的安裝配置直接參考官

gitlab+jenkins+maven+docker持續集成(二)——maven安裝配置

jenkins gitlab maven 建議安裝3.3.9版本,最新版本貌似有點問題下載地址:#wget http://apache.fayea.com/maven/maven-3/3.3.9/binaries/apache-maven-3.3.9-bin.tar.gz解壓# tar -zxvf

gitlab+jenkins+maven+docker持續集成(四)——Extended E-mail Notification配置

gitlab jenkins maven 構建後進行郵件通知,這裏我們用Extended E-mail Notification系統管理-->Extended E-mail Notification在這裏subject、content為defalut 模板,我們暫不做配置,我這裏按項目進行配

gitlab+jenkins+maven+docker持續集成(六)——.Jenkins獲取git tags代碼進行持續集成

gitlab+jenkins+maven+docker持續集成(六)——.jenkins獲取git tags代碼進行持續集成GitFlow的工作流如上圖所示,在開發工作中,不同的代碼分支對應著項目或產品的不同形態,圍繞特定形態的人力投入也不相同。隨著時間的推進,我們在 開發分支 中合並產品的功能實現,產品的功