連接:https://pan.baidu.com/s/1NZZbocZuNwtQS0eGkkglXQ
提取碼:z7gj
複製這段內容後打開百度網盤手機App,操做更方便哦php
主機名 | IP地址 | 備註 |
---|---|---|
Git | 192.168.200.61 | Git服務器 |
Jenkins | 192.168.200.62 | Jenkins服務器 |
[root@Git ~]# cat /etc/redhat-release CentOS Linux release 7.5.1804 (Core) [root@Git ~]# uname -r 3.10.0-862.3.3.el7.x86_64 [root@Git ~]# systemctl stop firewalld [root@Git ~]# systemctl disable firewalld [root@Git ~]# systemctl stop NetworkManager [root@Git ~]# systemctl disable NetworkManager
#Pipeline腳本語法架構 node ('slave節點名') { #被操控的節點服務器 def 變量 #def能夠進行變量聲明 stage('階段名A'){ #流水線階段一 執行步驟A 執行步驟B 執行步驟C } stage('階段名B'){ #流水線階段二 執行步驟A 執行步驟B 執行步驟C } stage('階段名C'){ #流水線階段三 執行步驟A 執行步驟B 執行步驟C } }
#流水線模板腳本 node { def mvnHome stage('Preparation') { // for display purposes // Get some code from a GitHub repository git 'https://github.com/jglick/simple-maven-project-with-tests.git' // Get the Maven tool. // ** NOTE: This 'M3' Maven tool must be configured // ** in the global configuration. mvnHome = tool 'M3' } stage('Build') { // Run the maven build if (isUnix()) { sh "'${mvnHome}/bin/mvn' -Dmaven.test.failure.ignore clean package" } else { bat(/"${mvnHome}\bin\mvn" -Dmaven.test.failure.ignore clean package/) } } stage('Results') { junit '**/target/surefire-reports/TEST-*.xml' archive 'target/*.jar' } }
(1)進入Pipeline Syntaxhtml
(2)經過腳本代碼生成器,生成Pipeline腳本代碼java
(3)將生成的代碼複製到流水線腳本相應步驟的stage函數裏node
(4)開始構建Pipeline項目mysql
(1)在Git服務器上建立一個存放Pipeline腳本的倉庫linux
[root@Git ~]# su - git 上一次登陸:二 10月 23 18:59:42 CST 2018pts/0 上 [git@Git ~]$ cd /home/git/repos/ [git@Git repos]$ ls app.git [git@Git repos]$ mkdir jenkinsfile #建立存放Pipeline腳本的倉庫 [git@Git repos]$ cd jenkinsfile/ [git@Git jenkinsfile]$ git --bare init #初始化倉庫 初始化空的 Git 版本庫於 /home/git/repos/jenkinsfile/
(2)在jenkins服務器上,往遠程倉庫提交一個Pipeline腳本。nginx
[root@Jenkins ~]# mkdir /test [root@Jenkins ~]# cd /test/ [root@Jenkins test]# git clone git@192.168.200.61:/home/git/repos/jenkinsfile 正克隆到 'jenkinsfile'... warning: 您彷佛克隆了一個空版本庫。 [root@Jenkins test]# ls jenkinsfile [root@Jenkins test]# cd jenkinsfile/ [root@Jenkins jenkinsfile]# mkdir itemA [root@Jenkins jenkinsfile]# vim itemA/jenkinsfile [root@Jenkins jenkinsfile]# cat itemA/jenkinsfile node { def mvnHome stage('Preparation') { checkout([$class: 'GitSCM', branches: [[name: '${branch}']], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[credentialsId: 'f58165e3-e5a7-408a-a57d-a4b643b14308', url: 'git@192.168.200.61:/home/git/repos/app.git']]]) } stage('maven Build') { echo "maven build..." } stage('deploy') { echo "deploy..." } stage('test') { echo "test..." } }
#將腳本推送到遠程倉庫的master分支 [root@Jenkins jenkinsfile]# git add * [root@Jenkins jenkinsfile]# git commit -m "第一次提交" [master(根提交) 10fb59e] 第一次提交 1 file changed, 18 insertions(+) create mode 100644 itemA/jenkinsfile [root@Jenkins jenkinsfile]# git push -u origin master Counting objects: 4, done. Compressing objects: 100% (2/2), done. Writing objects: 100% (4/4), 563 bytes | 0 bytes/s, done. Total 4 (delta 0), reused 0 (delta 0) To git@192.168.200.61:/home/git/repos/jenkinsfile * [new branch] master -> master 分支 master 設置爲跟蹤來自 origin 的遠程分支 master。
(3)利用遠程倉庫裏的Pipeline腳本,進行流水線的構建
git
主機名 | IP地址 | 備註 |
---|---|---|
Git | 192.168.200.61 | Git服務器 |
Jenkins | 192.168.200.62 | Jenkins服務器 |
Web01 | 192.168.200.64 | Web服務器 |
#全部服務器進行以下操做 [root@Git ~]# cat /etc/redhat-release CentOS Linux release 7.5.1804 (Core) [root@Git ~]# uname -r 3.10.0-862.3.3.el7.x86_64 [root@Git ~]# systemctl stop firewalld [root@Git ~]# systemctl disable firewalld [root@Git ~]# systemctl stop NetworkManager [root@Git ~]# systemctl disable NetworkManager
因爲咱們仍舊打算將pipeline腳本放在遠程Git倉庫裏,所以咱們須要從遠程Git倉庫拉取Pipeline腳本,因此,參數化構建不支持Git的參數化。咱們只能使用字符結構的參數化構建。github
#在Git服務器上建立用於存放源碼的Git倉庫 [root@Git ~]# hostname -I 192.168.200.61 [root@Git ~]# cd /home/git/repos/ [root@Git repos]# ls app.git jenkinsfile [root@Git repos]# mkdir wordpress [root@Git repos]# cd wordpress/ [root@Git wordpress]# git --bare init 初始化空的 Git 版本庫於 /home/git/repos/wordpress/ [root@Git wordpress]# cd .. [root@Git repos]# ll -d wordpress drwxr-xr-x 7 root root 119 10月 23 20:12 wordpress [root@Git repos]# chown -R git.git wordpress [root@Git repos]# ll -d wordpress drwxr-xr-x 7 git git 119 10月 23 20:12 wordpress
#在jenkins服務器上,克隆建立好的遠程Git倉庫 [root@Jenkins ~]# mkdir /php-app [root@Jenkins ~]# cd /php-app [root@Jenkins php-app]# git clone git@192.168.200.61:/home/git/repos/wordpress 正克隆到 'wordpress'... warning: 您彷佛克隆了一個空版本庫。 [root@Jenkins php-app]# ls wordpress [root@Jenkins php-app]# cd wordpress/ [root@Jenkins wordpress]# ls [root@Jenkins wordpress]# #下載wordpres源代碼 [root@Jenkins wordpress]# wget https://cn.wordpress.org/wordpress-4.9.4-zh_CN.tar.gz [root@Jenkins wordpress]# ls wordpress-4.9.4-zh_CN.tar.gz [root@Jenkins wordpress]# tar xf wordpress-4.9.4-zh_CN.tar.gz [root@Jenkins wordpress]# ls wordpress wordpress-4.9.4-zh_CN.tar.gz [root@Jenkins wordpress]# mv wordpress-4.9.4-zh_CN.tar.gz /tmp/ [root@Jenkins wordpress]# ls wordpress [root@Jenkins wordpress]# mv wordpress/* . [root@Jenkins wordpress]# ls index.php wp-activate.php wp-config-sample.php wp-links-opml.php wp-settings.php license.txt wp-admin wp-content wp-load.php wp-signup.php readme.html wp-blog-header.php wp-cron.php wp-login.php wp-trackback.php wordpress wp-comments-post.php wp-includes wp-mail.php xmlrpc.php [root@Jenkins wordpress]# rm -rf wordpress/
#在jenkins上提交代碼到遠程Git倉庫 [root@Jenkins wordpress]# git add * [root@Jenkins wordpress]# git commit -m "第一次提交" [root@Jenkins wordpress]# git push -u origin master Counting objects: 1660, done. Compressing objects: 100% (1635/1635), done. Writing objects: 100% (1660/1660), 8.86 MiB | 4.73 MiB/s, done. Total 1660 (delta 173), reused 0 (delta 0) To git@192.168.200.61:/home/git/repos/wordpress * [new branch] master -> master 分支 master 設置爲跟蹤來自 origin 的遠程分支 master。
咱們計劃利用分佈式構建的方式,啓動pipeline的流水線項目發佈
slave管理節點就設置爲須要用於發佈項目的Web服務器web
#解壓安裝jdk [root@Web01 ~]# ls anaconda-ks.cfg jdk-8u171-linux-x64.tar.gz [root@Web01 ~]# tar xf jdk-8u171-linux-x64.tar.gz -C /usr/local [root@Web01 ~]# cd /usr/local/ [root@Web01 local]# mv jdk1.8.0_171 jdk [root@Web01 local]# /usr/local/jdk/bin/java -version java version "1.8.0_171" Java(TM) SE Runtime Environment (build 1.8.0_171-b11) Java HotSpot(TM) 64-Bit Server VM (build 25.171-b11, mixed mode)
#配置java環境 [root@Web01 ~]# sed -i.org '$a export JAVA_HOME=/usr/local/jdk/' /etc/profile [root@Web01 ~]# sed -i.org '$a export PATH=$PATH:$JAVA_HOME/bin' /etc/profile [root@Web01 ~]# sed -i.org '$a export CLASSPATH=.$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar' /etc/profile [root@Web01 ~]# tail -3 /etc/profile export JAVA_HOME=/usr/local/jdk/ export PATH=$PATH:$JAVA_HOME/bin export CLASSPATH=.$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar [root@Web01 ~]# source /etc/profile [root@Web01 ~]# java -version java version "1.8.0_171" Java(TM) SE Runtime Environment (build 1.8.0_171-b11) Java HotSpot(TM) 64-Bit Server VM (build 25.171-b11, mixed mode)
[root@Web01 ~]# yum -y install epel-release nginx php-fpm php-mysql [root@Web01 ~]# rpm -qa epel-release nginx php-fpm php-mysql php-fpm-5.4.16-45.el7.x86_64 nginx-1.12.2-2.el7.x86_64 php-mysql-5.4.16-45.el7.x86_64 epel-release-7-11.noarch
[root@Web01 ~]# cd /etc/nginx/ [root@Web01 nginx]# ls conf.d fastcgi_params mime.types scgi_params win-utf default.d fastcgi_params.default mime.types.default scgi_params.default fastcgi.conf koi-utf nginx.conf uwsgi_params fastcgi.conf.default koi-win nginx.conf.default uwsgi_params.default [root@Web01 nginx]# cp nginx.conf{,.bak} [root@Web01 nginx]# egrep -v "#|^$" nginx.conf.bak > nginx.conf
[root@Web01 nginx]# cat nginx.conf user nginx; worker_processes auto; error_log /var/log/nginx/error.log; pid /run/nginx.pid; include /usr/share/nginx/modules/*.conf; events { worker_connections 1024; } http { log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; types_hash_max_size 2048; include /etc/nginx/mime.types; default_type application/octet-stream; include /etc/nginx/conf.d/*.conf; #include了一個配置文件目錄 server { listen 80 default_server; #默認的server配置(若是用IP訪問就進入這個server) listen [::]:80 default_server; server_name _; root /usr/share/nginx/html; #默認的網頁目錄 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 { } } }
#因爲默認的配置文件include了/etc/nginx/conf.d/*.conf所以咱們增長一個server配置文件便可 [root@Web01 nginx]# cat /etc/nginx/conf.d/wp.conf server { listen 80; server_name www.yunjisuan.com; root /usr/share/nginx/html/www.yunjisuan.com; location / { index index.php index.html; } location ~\.php { fastcgi_index index.php; fastcgi_pass 127.0.0.1:9000; include fastcgi.conf; } }
#建立網頁目錄 [root@Web01 ~]# cd /usr/share/nginx/html/ [root@Web01 html]# ls 404.html 50x.html index.html nginx-logo.png poweredby.png [root@Web01 html]# mkdir www.yunjisuan.com [root@Web01 html]# cd www.yunjisuan.com/ #克隆Git倉庫代碼到本地網頁目錄 [root@Web01 www.yunjisuan.com]# yum -y install git [root@Web01 www.yunjisuan.com]# rpm -qa git git-1.8.3.1-14.el7_5.x86_64 [root@Web01 www.yunjisuan.com]# git clone git@192.168.200.61:/home/git/repos/wordpress 正克隆到 'wordpress'... git@192.168.200.61's password: yangwenbo remote: Counting objects: 1660, done. remote: Compressing objects: 100% (1462/1462), done. remote: Total 1660 (delta 173), reused 1660 (delta 173) 接收對象中: 100% (1660/1660), 8.86 MiB | 12.12 MiB/s, done. 處理 delta 中: 100% (173/173), done. [root@Web01 www.yunjisuan.com]# ls wordpress [root@Web01 www.yunjisuan.com]# mv wordpress/* . [root@Web01 www.yunjisuan.com]# ls index.php wp-activate.php wp-config-sample.php wp-links-opml.php wp-settings.php license.txt wp-admin wp-content wp-load.php wp-signup.php readme.html wp-blog-header.php wp-cron.php wp-login.php wp-trackback.php wordpress wp-comments-post.php wp-includes wp-mail.php xmlrpc.php [root@Web01 www.yunjisuan.com]# rm -rf wordpress/
將網頁目錄權限受權給apache程序用戶 [root@Web01 www.yunjisuan.com]# cd .. [root@Web01 html]# ll -d www.yunjisuan.com/ drwxr-xr-x 5 root root 4096 10月 24 10:01 www.yunjisuan.com/ [root@Web01 html]# id apache uid=48(apache) gid=48(apache) 組=48(apache) [root@Web01 html]# chown -R apache.apache /usr/share/nginx/html/www.yunjisuan.com [root@Web01 html]# ll -d www.yunjisuan.com/ drwxr-xr-x 5 apache apache 4096 10月 24 10:01 www.yunjisuan.com/
#啓動nginx服務和php-fpm服務 [root@Web01 ~]# systemctl start nginx [root@Web01 ~]# systemctl start php-fpm [root@Web01 ~]# ss -antup | egrep "80|9000" tcp LISTEN 0 128 127.0.0.1:9000 *:* users:(("php-fpm",pid=16195,fd=0),("php-fpm",pid=16194,fd=0),("php-fpm",pid=16193,fd=0),("php-fpm",pid=16192,fd=0),("php-fpm",pid=16191,fd=0),("php-fpm",pid=16189,fd=6)) tcp LISTEN 0 128 *:80 *:* users:(("nginx",pid=16182,fd=6),("nginx",pid=16181,fd=6)) tcp LISTEN 0 128 :::80 :::* users:(("nginx",pid=16182,fd=7),("nginx",pid=16181,fd=7))
作好宿主機的域名映射後,瀏覽器訪問測試http://www.yunjisuan.com
#在jenkins服務器上進行以下操做 [root@Jenkins ~]# rm -rf /test [root@Jenkins ~]# mkdir /test [root@Jenkins ~]# cd /test/ [root@Jenkins test]# git clone git@192.168.200.61:/home/git/repos/jenkinsfile 正克隆到 'jenkinsfile'... remote: Counting objects: 8, done. remote: Compressing objects: 100% (5/5), done. remote: Total 8 (delta 1), reused 0 (delta 0) 接收對象中: 100% (8/8), done. 處理 delta 中: 100% (1/1), done. [root@Jenkins test]# ls jenkinsfile [root@Jenkins test]# cd jenkinsfile/ [root@Jenkins jenkinsfile]# ls itemA itemB [root@Jenkins jenkinsfile]# ls itemA/ jenkinsfile
經過流水線腳本生成器生成的階段代碼示例:
#經過流水線腳本生成器生成以下腳本內容 [root@Jenkins jenkinsfile]# vim itemA/jenkinsfile-php-wp [root@Jenkins jenkinsfile]# cat itemA/jenkinsfile-php-wp node ("PHP-slave-192.168.200.64") { stage('git checkout') { checkout([$class: 'GitSCM', branches: [[name: '${branch}']], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[credentialsId: 'f58165e3-e5a7-408a-a57d-a4b643b14308', url: 'git@192.168.200.61:/home/git/repos/wordpress']]]) } stage('code copy') { sh '''rm -rf ${WORKSPACE}/git [ -d /data/backup ] || mkdir -p /data/backup mv /usr/share/nginx/html/www.yunjisuan.com /data/backup/www.yunjisuan.com -$(data +%F_%T) cp -rf ${WORKSPACE} /usr/share/nginx/html/www.yunjisuan.com''' } stage('test') { sh 'curl http://www.yunjisuan.com/status.html' } }
#推送到Git遠程倉庫 [root@Jenkins jenkinsfile]# git add * [root@Jenkins jenkinsfile]# git commit -m "xxxx" [master 91d20a5] xxxx 1 file changed, 17 insertions(+) create mode 100644 itemA/jenkinsfile-php-wp [root@Jenkins jenkinsfile]# git push -u origin master Counting objects: 6, done. Compressing objects: 100% (4/4), done. Writing objects: 100% (4/4), 736 bytes | 0 bytes/s, done. Total 4 (delta 0), reused 0 (delta 0) To git@192.168.200.61:/home/git/repos/jenkinsfile cd4f8f3..91d20a5 master -> master 分支 master 設置爲跟蹤來自 origin 的遠程分支 master。
#在項目代碼里加入一個健康檢查測試頁面,並推送到遠程Git倉庫 #在Web服務器上進行以下操做 [root@Web01 /]# mkdir /test [root@Web01 /]# cd /test/ [root@Web01 test]# git clone git@192.168.200.61:/home/git/repos/wordpress 正克隆到 'wordpress'... git@192.168.200.61's password: yangwenbo remote: Counting objects: 1660, done. remote: Compressing objects: 100% (1462/1462), done. remote: Total 1660 (delta 173), reused 1660 (delta 173) 接收對象中: 100% (1660/1660), 8.86 MiB | 11.49 MiB/s, done. 處理 delta 中: 100% (173/173), done. [root@Web01 test]# ls wordpress [root@Web01 test]# cd wordpress/ [root@Web01 wordpress]# ls index.php wp-admin wp-content wp-load.php wp-signup.php license.txt wp-blog-header.php wp-cron.php wp-login.php wp-trackback.php readme.html wp-comments-post.php wp-includes wp-mail.php xmlrpc.php wp-activate.php wp-config-sample.php wp-links-opml.php wp-settings.php [root@Web01 wordpress]# echo "OK-version V2.0" >> status.html
#配置git全局配置 [root@Web01 wordpress]# git config --global user.email "1773464408@qq.com" [root@Web01 wordpress]# git config --global user.name "Mr.yang" #將測試用頁面提交到遠程Git倉庫 [root@Web01 wordpress]# git add * [root@Web01 wordpress]# git commit -m "version V2.0" [master fc1c4fd] version V2.0 1 file changed, 1 insertion(+) create mode 100644 status.html [root@Web01 wordpress]# git push -u origin master git@192.168.200.61's password: yangwenbo Counting objects: 4, done. Compressing objects: 100% (2/2), done. Writing objects: 100% (3/3), 284 bytes | 0 bytes/s, done. Total 3 (delta 1), reused 0 (delta 0) To git@192.168.200.61:/home/git/repos/wordpress b33992b..fc1c4fd master -> master 分支 master 設置爲跟蹤來自 origin 的遠程分支 master。 #在web服務器作域名映射(由於要進行curl驗證) [root@Web01 wordpress]# echo `hostname -I` www.yunjisuan.com >> /etc/hosts [root@Web01 wordpress]# tail -1 /etc/hosts 192.168.200.64 www.yunjisuan.com