07 . Jeknins自動化部署PHP代碼


Jenkins自動化部署PHP代碼

/*
		大致步驟分為下面三步
*/

實現Jenkins自動拉取GitLab代碼

通過點擊Jenkins里面的構建項目能自動拉取GitLab代碼

環境清單
* Jenkins   參照剛初始化環境即可
* GitLab        參考之前的GitLab安裝
注意事項
*
*
*
到Jenkins安裝gitlab插件

1.打開初始化好的Jenkins,點擊系統管理,進入下一個頁面

到可選插件裝上GitLab Hook和GitLab兩個插件,圖2

2.回到初始化好的GitLab,此時我們沒有項目的,我們創建一個項目

此時我們點擊Create project后會出現圖4中的報錯,我們已經有了Jenkins了,不需要GitLab自帶的CI,我們去把他關掉,默認是開啟的,圖4

至於第一行報錯說將SSH密鑰添加到個人資料前,你將無法通過SSH提取或推送項目代碼,這個我們待會把Jenkins密鑰填進去就好了.

我們找到Auto DevOps,點擊Expand就會出現下面的擴展菜單,我們把Auto DevOps管道的鈎去掉,然后點擊保存更改即可,因為我們有了jenkins,所以不需要GitLab自帶的CI集成消耗性能.

創建一個gitlab新用戶Jenkins並添加至項目中具備管理權限
因為在管理員賬號里面創建還要郵箱驗證改密碼麻煩,我們直接退出管理員賬戶,通過GitLab首頁快速創建一個Jenkins用戶,並退出,切換到root用戶,將剛剛創建的jenkins拉到項目里面,圖4

這里我們可以看到剛剛下拉欄剛剛創建的用戶.

此時我們可以看到項目中有了Jenkins成員

接下來我們要將添加Jenkins服務器的(公鑰)密鑰到GitLab創建項目的Repository,讓Jenkins對這個項目具有拉取代碼的權限

# 我們到Jenkins生成一下公鑰,並取出來
ssh-keygen
cat /root/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDrv0SM+S8FR6NFMQbgYwEbeWOw54aSCthBqTnF4noswiItmPANslrQrzq469bicijLXyPZMASCwtpCupBUoirxNNEl+WN8i2RJxQjXgMC2J1HJKXxTtwamr6xUDQyXtI2fZ5nty04dXfZScFB50GqO2KRp/o577fe+i5+aMs3egDA1A2HosKcjjAChTj9LAa4V2tR23C9ANFEa1F7b2+SRewByzP163RVpB4XHSjMpe+snS7JVwFQWrMwvNTFdwrGbj73mcLbQ5HHZunGJzxgO96sBGQc7Vj+Tf18VYIu1iq2nSb5KDes4wPBaY9SuDX6M+zDU8/FWiI7n2WjWBQAF root@jenkins**

# 接下來復制好公鑰,按圖5走

接下來我們驗證下Jenkins能不能拉取代碼,克隆該項目地址,到Jenkins機器
服務器第一次連接新服務器可能會出現yes和no,修改下面配置文件StrcHostKeyChecking ask 為下面哪一行,重啟sshd服務就行了

vim /etc/ssh/ssh_config
# StrictHostKeyChecking no    
# systemctl restart ssdd  
[root@jenkins ~]# git clone git@192.168.144.139:root/jenkins-test-project.git
Cloning into 'jenkins-test-project'...
remote: Enumerating objects: 3, done.
remote: Counting objects: 100% (3/3), done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (3/3), done.
Checking connectivity... done.
[root@jenkins ~]# cat jenkins-test-project/README.md
# Jenkins Test Project        # 這個就是我們剛剛創建項目的備注,說明Jenkins拉取GitLab代碼免密是成功的.

# 接下來我們修改這個文件,並提交
echo "touch /root/zhou" >> jenkins-test-project/README.md
git config --global user.name "jenkins"
[root@jenkins ~]# git config --global user.email "jenkins@admin.com"
[root@jenkins ~]# cd jenkins-test-project/
[root@jenkins jenkins-test-project]# git add .
[root@jenkins jenkins-test-project]# git commit -m "add createfile.sh"
[master a2ce49e] add createfile.sh
1 file changed, 2 insertions(+), 1 deletion(-)
[root@jenkins jenkins-test-project]# git push -u origin master
Counting objects: 3, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 288 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To 192.168.144.139:root/jenkins-test-project.git
   62e54ed..a2ce49e  master -> master
Branch master set up to track remote branch master from origin.
# 此處上傳沒有輸入密碼,說明Deploy Key是成功的.

接下來我們將Jenkins服務器的私鑰保存到Jenkins的web中,用於讓Jenkins本身可以使用服務器私鑰進行交互.

此處我們看到 Gitlab Hook Plugin插件警告報錯了,讓我們將Gitlab API令牌以純文本形式存儲,此時我們先不管他,后面再弄

我們點擊憑據配置,


此處我們選擇私鑰,我們去Jenkins找到私鑰,復制到Private Key中
[root@jenkins ~]# cat /root/.ssh/id_rsa
-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEA679EjPkvBUejRTEG4GMBG3ljsOeGkgrYQak5xeJ6LMIiLZjw
DbJa0K86uOvW4nIoy18j2TAEgsLaQrqQVKIq8TTRJfljfItkScUI14DAtidRySl8
U7cGpq+sVA0Ml7SNn2eZ7ctOHV32UnBQedBqjtikaf6Oe+33voufmjLN3oAwNQNh
6LCnI4wAoU4/SwGuFdrUdtwvQDRRGtRe29vkkXsAcsz9et0VaQeFx0ozKXvrJ0uy
VcBUFqzMLzUxXcKxm4+95nC20ORx2bpxic8YDverARkHO1Y/k39fFWCLtYqtp0m+
Sg3rOMDwWmPUrg1+jPsw1PPxVoiO59lo1gUABQIDAQABAoIBAECNEd8sCAUBFaLH
huOAGHiGZ5az/rQUhhyMksYtelixG5yyqOCHOrizkne6FA/TRHpTZcR9km6fnhXx
cb3K3clINhCY1fXvURml+wLPPXVjFNDpLCLcFdUkeyJUpGMRzEmem5ZyOcRuyxjN
qiuAtvzAM1zWl/s1MMYbAyu8x4QpvPoVl8dYv3vq7nu6J6V5ssIRUE1DU6pP/7A2
C/7b+QiJgBs7h1/2CHg
4u1UnxdO5hubGC3488P0UyHV9pwnI27/tRzVho0dIgx0W
tLDpjjZzmTlQILbtTaIgtQ2HosLGMux4igyUts2c3rJ+HZB9T5PgA2/5KSj6eQDU
Zcl7rq0CgYEA+mlSWcLX4ie6EYwPLI1VU3BZ+OJkvto5IPuzbYi2nbWrNQFyV0NN
/WeWC9fk1noSvtzoXy+62yJ3/WydctRf/+dSo7+4S2pSWgCXWxIJTHYZbysQKnR2
EvgRz5FdGB1hi8Rs8OlnUajcgAKMguz+cCCyrxfeXrhHVQipkd5IyxsCgYEA8QIq
HzsUvs+0SKmzmvTG9Nz/D+YSgmvVwSUU0FRNNVU8E8ndSXQngOmsbdM4LrayE57m
QKuWAqz+nk884LYYlwQKjnN1WLatG2CmjOTRJiuxzORhic5dbzGdE9PkZ600DM5X
d3BGdQIm4nM/ll0zLSnEgDK2LOL+IluB+TUV818CgYBnhxmz4JlOd+w2ivhPDBOl
zoJ0Im1Sdng+CbHx7B7L7yrcXD/AkiPxS10+gkCq54dOf5hWmi4foQ2IqdoiemlC
LIn/BymTjF6FtU7eKQPNJ9p2GpCxbLrQNt1uOoQJj0Qf+9Kqe2Tq3uxixCsBiifb
hbk6KJ0X/goHvvAUTZk81wKBgQDD3Tt4SB6S9+APUYM6goWSiGvtctBGF/cO0eD5
chmRJ2T8vAhP4ssb9EwCsS6uoCFW2sNLeWcfY5JF/CWAhdy0Fj+yB1ktsMA8SK7y
QB9NgyMrXct7IDBE5rA+Zezw6Q0s/yCMW72W6BnL3VenDrVBlfkxKoVtM0jPiUi2
zBK7xwKBgQDvdxxpenLjUC96z8HoReqr5yNrQZmxt3ZJko7XJNqUaT421+NOSf2H
+pNFxN6HNlDck5MYJ3jfuiWa8JD2h7vlM8mAmNHk8djK3voXrZeuFpp5JZhqXQH4
qDIChcpsBteyhzOm+fy5Wh05eWpmb2/fsX5IY49s56a7p50KPeGRLg==
-----END RSA PRIVATE KEY-----

此時,我們就獲得了一個ssh認證的私鑰文件,像一把要是去解gitlab上的公鑰

接下來我們創建一個新項目,用來測試我們做的對不對

我們往下拉,點擊git,下面做完記得點保存

此刻我們看到是成功的

接下來我們去Jenkins的工作空間看有沒有GitLab的項目

[root@jenkins ~]# cd /root/.jenkins/workspace/you-men
[root@jenkins you-men]# cat README.md
# Jenkins Test Project
This is Jenkins Test Project
touch /root/zhou
# 此刻,說明我們做的Jenkins自動拉取GitLab上代碼是成功的

實現代碼自動部署到測試環境

Jenkins點擊構建項目能自動去GitLab上拉取代碼並以Jenkins為中控機連接到測試環境並部署相關項目

Jenkins構建wordpress項目

往下拉,找到Build(構建)里面, 點擊Execule shell(使用shell),這里面可以執行一條命令,是由jenkins執行,回車作為命令分隔符.
此處的39.108.140.0為中控機,但此處作為一個webserver使用,讓他本地構建一次.當我們點擊完save保存,這個項目就創建好了,我們需要到webserver(中控機)機器上創建wangle用戶並設置密碼.

[root@testa ~]# useradd wangle
[root@testa ~]# echo "123456" |passwd --stdin wangle
Changing password for user wangle.
passwd: all authentication tokens updated successfully.
[root@testa ~]# ssh-keygen      
# 生成root用戶的密鑰對,root用戶上傳的是ssh-key是對整個倉庫有修改刪除的權限,
# 全權限.(如已經創建並使用,則無需再次創建)
[root@testa ~]# su - wangle       # 切換到wangle用戶
[wangle@testa ~]$ ssh-keygen    
# 生成wangle用戶的密鑰對,wangle用戶我們需要讓他添加到deploy key里面,
# 讓我們有拉取的權限,讓開發者有拉取並上傳上去的權限.

若此處出現403報錯,權限問題拒絕,則按f5刷新頁面重新登錄操作,原因是jenkins登錄超時了

GitLab創建wordpress項目

此刻我們看到每創建一個項目這個管道都是默認開啟,我們把它關掉,占用系統資源,而且我們有Jenkins集成,不用他自帶的,進入提示的設置將ta關掉,或者進入項目齒輪(Settings)設置找到CI/CD里面的Auto DevOps,參照Jenkins流水線一.

接下來我們找到項目的Repository,找到里面的Deploy Keys,將剛剛我們webserver機器上的wangle用戶的公鑰添加到這里.

[wangle@testa ~]$ cat /home/wangle/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDUWa54eoOiEYTZKalbSeH3b3eIxc8Qu6Mbu9Tf/5FGQMdPjygdwycIyn2fRhM4VLO67GZg805dsNY0OVvyBtPwTr+fjHtvH/qJPhRRQhkaZchg8lEaHcDE06Q5z/NPFdTzVbwsx/IuMfaqXeO1PmhFf4ovt2iSokjd94AKYgImuVRcKCMOyCPiVnp2AJVUPThZ1tcZO/6tkf4bcsYsATQl8emUvDZM56aK4enTl2dOwDmqyCxPkYfggUrXP7FnARuDYV0IWm1QD5ip1zDogN7NFjESJWySePYG9QZkCu/102oKvKpgHwy5DtMoL/V+v1r4PMjYDTM1+rZ73RrED9p5 wangle@testa

接下來我們新建一個wangle用戶,給開發用,為了避免郵箱驗證改密碼,我們直接注銷再創建一個,並登陸進去,然后退出登錄,切換到root用戶登陸.

我們剛剛創建的wangle的GitLab用戶添加到項目里面並給他開發者權限,配置什么時候到期.

WebServer服務器驗證是否能拉取代碼過來

webserver服務器切換成root用戶裝git,待會克隆倉庫用,普通用戶還沒有管理員權限,裝好后我們切換回去

[root@testa ~]# yum -y install git
[root@testa ~]# su - wangle
[wangle@testa ~]$ git clone git@116.196.83.113:root/wordpres.git     
Cloning into 'wordpres'...
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.

[wangle@testa ~]$ ls wordpres/                #  至此,說明拉取代碼免密是沒有問題的
README.md


# 接下來我們模擬上傳一個網站php代碼
[wangle@testa ~]$ git config --global user.name "wangle"            # 此時的用戶名為之前GitLab創建的普通用戶,開發
[wangle@testa ~]$ git config --global user.email "wangle@163.com"
[wangle@testa ~]$ curl -o wordpress.tar.gz https://wordpress.org/latest.tar.gz    # 我們去下載一個wordpress網站源碼
[root@testa ~]# wget https://wordpress.org/latest.tar.gz                          # 速度可能有點慢.
# 下載源碼wordpress網站出了點問題,報錯429請求過多

[wangle@testa ~]$ ls                                      # 此時當前目錄有兩個wordpres,一個是源碼,一個是git倉庫,還有一個是project,是為了把wordpress-4.8.tar.gz源碼包解壓出來的源碼放到project做一個中轉,不要弄混淆了
project  wordpres  wordpress-4.8.tar.gz
[wangle@testa ~]$ tar xvf wordpress-4.8.tar.gz -C project/
[wangle@testa ~]$ ls project/
wordpress
[wangle@testa ~]$ cp -rf project/wordpress/* wordpres/            # 將project目錄下wordpress下的源碼放到git倉庫里面再提交.
[wangle@testa ~]$ cd wordpres
[wangle@testa wordpres]$ ls
index.php        wp-admin              wp-cron.php        wp-mail.php
license.txt      wp-blog-header.php    wp-includes        wp-settings.php
readme.html      wp-comments-post.php  wp-links-opml.php  wp-signup.php
README.md        wp-config-sample.php  wp-load.php        wp-trackback.php
wp-activate.php  wp-content            wp-login.php       xmlrpc.php
# 因為我們事先知道配置,我們先把數據庫什么先修改好
[wangle@testa wordpres]$ vim wp-config-sample.php
define('DB_NAME', 'wordpres');
/** MySQL database username */
define('DB_USER', 'nginx');
/** MySQL database password */
define('DB_PASSWORD', 'flying');
/** MySQL hostname */
define('DB_HOST', 'localhost');

# 在此之前需要為一台機器准備一個LNMP環境
[root@testa ~]# cat lnmp.sh
#!/usr/bin/env bash
systemctl stop firewalld
echo "firewalld stop"
echo "shut SELinux"
sed -r '/^SELINUX/c\SELINUX=disabled' /etc/selinux/config
setenforce 0
if [ ! -d /etc/yum.repos.d/backup ];
then
    mkdir /etc/yum.repos.d/backup -p
fi
if ! ping -c2 www.baidu.com &>/dev/null
then
    echo "You can't get on the net"
    exit
fi
echo "Download 163 source ..."
echo "Download nginx Source package ..."
yum -y install wget
wget -O /etc/yum.repos.d/163.repo   http://mirrors.163.com/.help/CentOS7-Base-163.repo
yum repolist
if [ ! -f /etc/yum.repos.d/nginx.repo ];then
cat > /etc/yum.repos.d/nginx.repo <<EOF
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/\$releasever/\$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
EOF
fi


rpm -qa |grep nginx  &> /dev/null
if [ ! $? -eq 0 ] ;then
    echo "dafew"
    yum -y install nginx
fi
sed -ri '/ *# *proxy *the *PHP/,/ *# *proxy_pass/ d' /etc/nginx/conf.d/default.conf
sed -ri '/ *#location/,/ *#\}/   s/( *)#/\1/' /etc/nginx/conf.d/default.conf
sed -ri s/" "*root" "*html\;/\\troot"\t"\\/usr\\/share\\/nginx\\/html\;/ /etc/nginx/conf.d/default.conf
sed -ri s/" "*index" "*index.html" "*index.htm\;/"\t\t"index" "index.php" "index.html" "index.htm\;/  /etc/nginx/conf.d/default.conf
sed -ri '/SCRIPT_FILENAME/c\\t\t fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name\;' /etc/nginx/conf.d/default.conf
sed -i '/ *location *~ * \/\\\.ht/,/ *}/ d' default.conf


systemctl start nginx
##################  安裝PHP /+*########################+**++//
yum -y install php php-fpm php-mysql php-gd gd
echo "switch to the PHP terminal..."
systemctl start php-fpm
######################  安裝Mysql #####################
yum -y install mariadb-server
systemctl start mariadb
systemctl enable mariadb
mysqladmin password '123456'
mysql -uroot -p123456 -e "grant all on *.* to nginx@'%' identified by 'flying';"
cd /usr/share/nginx/html
cat >index.php <<EOF
<?php
        phpinfo();
?>
EOF
# 接下來上傳代碼:
[wangle@testa wordpres]$ git add .
[wangle@testa wordpres]$ git commit -m "add wordpress project."
[wangle@testa wordpres]$ git push -u origin master
# 看到下圖有那么多代碼文件說明上傳成功.

此刻,wangle用戶對webserver拉取和上傳代碼都是免密,但是webserver的root用戶還沒有對GitLab免密.我們將root用戶的公鑰放到GitLab上剛剛給開發創建的wangle用戶,這樣只要是開發項目,開發對這個項目就是完全免密.

[root@testa html]# cat /root/.ssh/id_rsa.pub

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDLvKKqqAnCAcwwuwGjAuSfq4y/0Q+ZNTPm0vx7w9LqjrBnO801T3m9MBORftDQod3Q7GutC2Gin0fsVM/3QaHtv+FXMoMhJnRSFJJ5bEITEktrXGJAaTYByERTurLuagdDnTj7V5PDr2nrFL023NF0HutR7ckGPF+Ong2PAF3exUbUTnYIPPXoPXqZ7FkVhTi+lK1cysoJZ0rQXeGIWKgAadTM6WOfBg4+Apt0PeDNog3esNdJqw+IKXvmj8+Z0vPiE7nAQwZo4yxYtllpd9VsbmzNoAlaBXkkUAMHHSoJN3crfJEMAyMdx37QaeOH35IyeSfhOPeRW3+SEs2VShf3 root@testa

我們登陸到GitLab的wangle用戶

接下來將wangle用戶提升為管理員權限,因為考慮到生產環境不能用root進行操作,因此我們對於普通用戶的文件傳輸,需要添加到wheel組中

[root@testa html]# usermod -aG wheel wangle
[root@testa html]# id wangle
uid=1001(wangle) gid=1001(wangle) groups=1001(wangle),10(wheel)
[root@testa html]# vim /etc/sudoers.d/wangle
# 加入下面其中一行文件.
wangle  ALL=(ALL)       NOPASSWD: /usr/sbin/ssh
wangle  ALL=(ALL)       NOPASSWD:  ALL    # 目前盡量使用ALL,如果使用上面哪一行還要考慮腳本內容中的命令sudo提權,比如將wangle用戶git clone下的代碼復制到nginx根目錄下,如果不給cp 提權就沒法cp過去.

# 接下來我們試試是否可以普通用戶提權免密
[root@testa html]# su - wangle
[wangle@testa ~]$ ssh root@39.108.140.0
root@39.108.140.0's password:
# 至此說明sudo提權是沒有問題的.接下來我們去寫一個腳本,
[wangle@testa ~]$ cat Deploy.sh
#!/usr/bin/env bash
# Author: ZhouJian
# Mail: 18621048481@163.com
#
# 拉取遠程的倉庫,GitLab的ssh的倉庫地址
git clone git@116.196.83.113:root/wordpres.git
cd wordpres
# 由於我們多次部署,為了保證每次是最新的狀態,進入到項目中,獲取他的增量
git pull   
# grant to wangle user permission.
sudo setfacl -m u:wangle:rwx /usr/share/nginx/html
sudo \cp -rf /home/wangle/wordpres/* /usr/share/nginx/html/

# 注意此處的wordpress,因為之前創建項目少了個s,所以后面都要少了個s,總之要確定項目名一致.
# 因為是普通用戶,執行任何管理員相關命令,必須加上sudo ,否則到時構建項目容易報錯權限拒絕.
# 因為當前這台機器可以當成一個中控端,只需要有一個腳本就行了,我們給腳本一個權限,然后把項目代碼都刪掉,以達到項目效果.
[wangle@testa ~]$ chmod a+x Deploy.sh
[wangle@testa ~]$ rm -rf wordpres*

# 接下來將Jenkins的root用戶密鑰認證到webserver的wangle用戶,ssh-copy
[root@jenkins ~]# ssh-copy-id wangle@39.108.140.0
[root@jenkins ~]# ssh wangle@39.108.140.0
Last login: Sat Nov  9 12:41:11 2019 from 47.92.24.137
Welcome to Alibaba Cloud Elastic Compute Service !
[wangle@testa ~]$        # 測試成功,接下來測試下webserver能否解析php代碼
[wangle@testa ~]$ sudo cat /usr/share/nginx/html/index.php
<?php phpinfo(); ?>  
[wangle@testa ~]$ elinks --dump 39.108.140.0/index.php
# 如果出來很多信息關於PHP版本相關信息,說明可以執行php文件
[wangle@testa ~]$ cat /usr/share/nginx/html/index.php
<?php
$link=mysql_connect('39.108.140.0','nginx','flying');
if ($link)
              echo "Successfully";
else
              echo "Failed";
mysql_close();
?>
# 至此,說明執行php文件和數據庫訪問都是沒有問題的
[wangle@testa ~]$ elinks --dump 39.108.140.0/index.php
   Successfully

# 接下來我們直接去Jenkins里面構建項目,然后去觀看控制台輸出,根據提示解決報錯,當然最好一次成功.
# 接下來訪問webserver的網址,看能不能直接訪問到網站

至此說明我們的Jenkins的一鍵部署是沒有問題的

開發一提交GitLab代碼,直接部署到生產環境

開發push代碼,自動把代碼發布到LNMP環境中,GitLab直接出發Jenkins構建

安裝Jenkins的一個插件(認證我們的令牌)
# Build Authorization Token Root
# 在Jenkins產生一個令牌,這個令牌可以發放到GitLab服務器上,
# 當開發人員上傳代碼,GitLab會告訴Jenkins,
# 我項目改變了,你趕緊過來拉,產生了一個通信(隧道通信)


安裝Build Authorzation Token Root插件

構建項目觸發
[root@jenkins ~]# openssl rand -hex 12        # 生成一個令牌
2357086b89dc205d2333712d
[root@jenkins ~]# echo "2357086b89dc205d2333712d" > token.txt
# 我們將該令牌保存好,免得終端斷了或者其他網絡原因令牌弄丟了
[root@jenkins ~]# cat token.txt
2357086b89dc205d2333712d
# 接下來我們去配置之前的wordpres項目,構建觸發器,

接下來配置GitLab webhook<點擊Test顯示200,201則表示成功>
進入GitLab調整一下網絡認證身份,因為GitLab經過9版本后,對於GitLab和Jenkins的配合必須使用https配合,如果不是需要調整一下本地之間允許http認證

# 接下來我們進入wordpres項目,找到Settings,二級菜單找里面的Integrations(集成)
# 此處Token有兩種方法,
# 方法一(手動)
# 里面的URL是填寫Jenkins的URL地址,此處URL以Jenkins的回調地址為准,不管Test403,404都能到Jnekins看到,見圖3
# http://<IP||域名>:8080/jenkins/project/wordpress/buildByToken/build?job=項目名稱&token=身份令牌token值
http://47.92.24.137:8080/jenkins/project/wordpress/buildByToken/build?job=wordpress&token=2357086b89dc205d2333712d


此時,多數會報403錯誤,說明匿名滅有對項目的權限,我們到全局安全配置里面給匿名用戶權限即可.

至此,整個Jenkins差不多完事了,還有一種Token方法,見方法二


打開GitLab的Push權限,上傳代碼進行測試
# 如果開發用戶,push代碼報錯,沒有權限的話,去圖下面去開啟一下

# 接下來我們准備一台Development機器,模擬開發上傳代碼,看jenkins能不能自動構建到生產環境
[root@develoment ~]# mkdir  project
[root@develoment ~]# cd project
[root@develoment project]# yum -y install git &>/dev/null &
[1] 11437
# 我們用此機器模擬程序員的電腦向GitLab提交代碼,接下來我們把此機器的公鑰上傳到GitLab
[root@develoment project]# ssh-keygen
[root@develoment project]# cat /root/.ssh/id_rsa.pub
 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC2/r4mcwmNI0LC0ga3QiT9Ykz4MGAHcsNIBg1x8oRRv1YMgO36HHkAUunUIiL6JpkVm74Fhb0zL+23Y31fRNugomYZnwjHnEtMvv/4a/bpemdmDqAVWfG2tcJz2m8wSpL9ro0gGu8RdyLJg8dPyxv4KfOYo92KAdV9vzpJ2mxmONpv8H0QbYAc/KXK1XrlyXVTYb6CR1GYTmJEPCqTxSoGO9Cg+WtVjy1bGf5ttWAgSDMGowYTjI8TEG5plUqU6X2AsoNRdQ2cvLcccAE/pE4Afh0BPWm/tiPr9mf6unpAv3Empvfp7G2hvqoZ5wg4VZzDIpzhqzpZO0MfFNRZfmgz root@develoment

# 復制好此公鑰,然后到GitLab創建一個用戶Develoment1,然后退出來切換到管理員將剛剛創建的用戶Develoment1加入到項目.

接下來我們切換到Develoment1開發,讓我們以開發身份登錄到GitLab,然后把開發機器的公鑰上傳到開發者的GitLab的Settings

1

# 接下來我們試試Develoment開發這台機器能不能拉取GitLab倉庫項目代碼.
[root@develoment project]# git clone git@116.196.83.113:root/wordpres.git
[root@develoment project]# ls wordpres/
index.php        wp-admin              wp-cron.php        wp-mail.php
license.txt      wp-blog-header.php    wp-includes        wp-settings.php
readme.html      wp-comments-post.php  wp-links-opml.php  wp-signup.php
README.md        wp-config-sample.php  wp-load.php        wp-trackback.php
wp-activate.php  wp-content            wp-login.php       xmlrpc.php
# 至此說明拉取代碼是成功的

# 接下來我們修改一下代碼,然后上傳看jenkins能不能自動構建項目
[root@develoment project]# echo you-men >> wordpres/README.md
[root@develoment wordpres]# git config --global user.email "Develoment1@163.com"
[root@develoment wordpres]# git config --global user.name "Develoment1"
[root@develoment project]# cd wordpres/
[root@develoment wordpres]# git add .
[root@develoment wordpres]# git commit -m "modiy README.md file"
[root@develoment wordpres]# git push -u origin master
Counting objects: 5, done.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 316 bytes | 0 bytes/s, done.
Total 3 (delta 1), reused 0 (delta 0)
To git@116.196.83.113:root/wordpres.git
   8cec4a5..a99149f  master -> master
Branch master set up to track remote branch master from origin.
# 將代碼上傳上去,然后去管理員賬號的GitLab和Jenkins構建有不有變化

`

`

# 至此說明GitLab代碼的確能上傳到管理員的項目倉庫,並且Jenkins構建也是成功的,然后我們登陸到lnmp的test生產環境看代碼有不有變化,
[root@testa ~]# cat /usr/share/nginx/html/README.md
# wordpres
Deploy a PHP websiteyou-men
# 至此說明現在只要開發那天機器上傳代碼,Lnmp環境都能實時部署更新

# 接下來我們真實修改一下wordpress並實時查看網頁變化.

比如說我覺得這個username不好聽,我們去程序員電腦修改項目代碼上傳看能不能實時更新.

進入vim里面/查找username修改為ZHOUjian,然后Push上傳,看看測試環境的lnmp的Nginx網站根目錄能不能實時更新.

[root@develoment wordpres]# git add .  
[root@develoment wordpres]# git commit -m "modiy install.php"  
[master 05e3f02] modiy install.php  
1 file changed, 1 insertion(+), 1 deletion(-)  
[root@develoment wordpres]# git push -u origin master  

`

# 接下來我們去生產環境看一下修改代碼
[root@testa ~]# cat /usr/share/nginx/html/wp-admin/install.php |grep ZHOUjian

            <th scope="row"><label for="user_login"><?php _e('ZHOUjian'); ?></label></th>

生產環境也實時能更新開發上傳的代碼,可以修改網站的一些表現,能在瀏覽器查看實時更新,效果更明顯,但一些公司為了保險不會直接將jenkins對接生產環境,這個看業務需求了


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM