【Linux】【jenkins】自動化運維三 整合gitlab、docker發布vue項目


由於工作需要,這里我先創建一個vue的工程。

1.首先安裝好gitlab相關插件:GitLab、GitLab Hook、NodeJS

插件安裝參考:https://www.cnblogs.com/jxd283465/p/11542680.html

2.jenkins服務器安裝git 和 nodejs

git安裝:

  • yum -y install git

nodejs安裝:這里我安裝的在home路徑下,可自行更改。

  • wget https://nodejs.org/dist/v9.8.0/node-v9.8.0-linux-x64.tar.xz
  • tar -xvf node-v9.8.0-linux-x64.tar.xz
  • mv node-v9.8.0-linux-x64 node
  • sudo  ln -s /home/node/bin/node /usr/local/bin/      
  • sudo ln -s /home/node/bin/npm /usr/local/bin/
  • sudo ln -s /home/node/bin/node /usr/bin
1 [root@localhost home]# node -v
2 v9.8.0

3.配置jenkins全局工具,這里暫時配置git和nodejs

點擊“系統管理”------Global Tool Configuration

git配置:yum安裝完成后git路徑為/usr/bin/git

 nodejs配置:這里選擇安裝路徑為/home/node

配置git和nodejs環境結束后點擊保存。

4.新建jenkins工程。

由於這里建的是vue的自動化部署項目,所以新建一個FreeStyle project.

 

 由於這里使用的是git,需要加一個參數化構建。

這里,我后續會配置,工程構建成功后會打一個git的tag,作為備份。以防構建失敗后無法回滾。

 

 代碼管理工具選擇----“git”

 Repository URL:填寫gitlab項目的git地址

 此處報錯是因為要添加Credentials憑證。

在jenkins的主機上執行

ssh-keygen -t rsa -C "<填寫自己方便識別的注釋>" -b 4096  沒什么問題就執行三次空格。 
三次問題是1.填入生成密鑰對的路徑名字。2 填入自定義passphrsa。3確認。 

 1 [root@localhost home]# ssh-keygen -t rsa -C "********" -b 4096
 2 Generating public/private rsa key pair.
 3 Enter file in which to save the key (/root/.ssh/id_rsa): 
 4 Enter passphrase (empty for no passphrase): 
 5 Enter same passphrase again: 
 6 Your identification has been saved in /root/.ssh/id_rsa.
 7 Your public key has been saved in /root/.ssh/id_rsa.pub.
 8 The key fingerprint is:
 9 SHA256:oQYIN3KUkPmnCn0LrC25h5L0yVpiIvoHUgawDuyCKuE **************
10 The key's randomart image is:
11 +---[RSA 4096]----+
12 |*==.             |
13 |=*.o             |
14 |o+. .   .        |
15 |= + .. . .       |
16 |+B o  o S        |
17 |*o* ..           |
18 |BEo=..           |
19 |# =+o            |
20 |+*o.             |
21 +----[SHA256]-----+

生成的公鑰和私鑰在/root/.ssh目錄下

1 [root@localhost .ssh]# pwd
2 /root/.ssh
3 [root@localhost .ssh]# ls -l
4 總用量 12
5 -rw-------. 1 root root 3247 9月  19 10:00 id_rsa       #私鑰
6 -rw-r--r--. 1 root root  746 9月  19 10:00 id_rsa.pub   #公鑰
7 -rw-r--r--. 1 root root  174 9月  18 16:58 known_hosts
 1 # 查看私鑰
 2 [root@localhost .ssh]# cat id_rsa
 3 -----BEGIN RSA PRIVATE KEY-----
 4 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
53 -----END RSA PRIVATE KEY-----
54 
55 # 查看公鑰
56 [root@localhost .ssh]# cat id_rsa.pub 
57 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQC1gwRSuotEVVsFNejz0Tyn5yLw3XJKKa643VKGk4OtU0THz3D2CzXDohTjG95v2XgvmMmVNV5IY2rUd0+BMuVUNOA1YZAfG/3h1Pxem08pw8Lk1Q0jn94ma+2klF1VY9i5q+UYBH2cMtlhSZODBoj0Ntd5NS4HSjJPOxHcq9xY5SHHLakvlGZ1zifT4rgw+KCrmVzkkIO+4kvqSMfd/UwjpUxKLkmT4KtBZZgWro8EIDpkdXo5BNHyuT/EqB5M1e3VknGgj7RwfIfm99/1d9/MpXUNtRG7hrvyuxYxGJcpIq+FkBVWt09UxPnSlKtitGFqXuzLiOH1k0NATr3M0D0jdiNn70oU0q+Nhe/dyqbT/OiNwfx0CzbG4L2FT6hlwHG/YatsfYjppgqYJuMci5QJjEA371tLuiTeStio8sq83YFTvVuOUyLnKdbXaj0Bwyhy5kXJmyMl+Gr/SAFC+1eGdZySa3dt5Lkf8wpm7O3/7nJ+OuYOt3D7fwaeG+KQpozKGTtts28okYu9e3FeE3ckcO1EzWu4pCzttYM7rghASbdz7V6m9zt7WqCzYtIU2bFjqUukjKBypqORrz81MNPj5DE1cfR3vqohP9td3vZ9/EVAcDLanMppRCMCjtPbTcRcnipI9xXEfQAAJDsE583yZDJYRXLyIQHy+RPP6PfA5Q== jiangxd@mingbyte.com

jenkins中配置私鑰:

 gitlab中配置公鑰:

 

 

 這里 “Branches to build” 處為上文中參數化構建的Name,此處為$Tag,“$”表示調用變量。

 至此,jenkins整合gitlab完成。

 由於每次gitlab代碼提交,都要發布jenkins很麻煩。所以這里使用gitlab hook自動觸發,此處的webhook要復制。

 配置giltab相應項目的webhook

 

 如果提交webhook報錯 url is blocked requist to the local network are not allowed。

 gitlab 10.6 版本以后為了安全,不允許向本地網絡發送webhook請求,如果想向本地網絡發送webhook請求,則需要使用管理員帳號登錄,默認管理員帳號是admin@example.com,密碼就是你gitlab搭建好之后第一次輸入的密碼,登錄之后進行如下配置即可。

 

 此處添加成功后,可以進行Test觸發測試。這里我就不測試了。

 繼續我們的jenkins工程創建。

 構建環境處由於這個工程是vue工程,這里選擇node,此處的Node JS v9.8是上文中在全局工具中配置的。

 接下來,添加構建步驟。由於我需要打包docker容器,這里選擇的是執行shell腳本。

 此處貼出shell腳本

 # /home/jenkins/.jenkins/workspace為jenkins工作目錄
 # MingByteWeb為我jenkins創建的項目名稱
 cd /home/jenkins/.jenkins/workspace/MingByteWeb
 # /home/jenkins/jenkins.sh這個腳本是我用於刪除多余的tag和刪除之前運行的容器
 bash /home/jenkins/jenkins.sh 192.168.8.10:5000/mingbyteweb ming-byte-web
 # 這里是vue打包 
 echo '================vue打包================'
 sudo /usr/local/bin/npm install
 sudo /usr/local/bin/npm run build 
 echo '================打包docker================'
 # docker構建鏡像
 docker build -t 192.168.8.10:5000/mingbyteweb:latest .
 echo '================開始推送鏡像================'
 # docker推送鏡像到docker私服
 sudo docker push 192.168.8.10:5000/mingbyteweb:latest 
 echo '================結束推送鏡像================'
 # docker啟動鏡像
 sudo docker run -d --name MingByteWeb -p:8081:8080 192.168.8.10:5000/mingbyteweb
 echo "finished!" 
 # 構建成功!

jenkins.sh

t=`sudo docker ps | grep $1|awk '{print  $1}'|sed 's/%//g'`;
b=``;
if [ $t ];
then
sudo docker stop  $t
echo "停止容器成功"
sudo docker rm $t
echo "刪除容器成功"
else
echo "首次部署";
fi

tagnum=`git tag | wc -l`;
tag=(`git tag`)
a=0;
echo $tagnum
until [ $tagnum -lt 3 ]
do
   echo $a 刪除tag:${tag[$a]}
   git tag -d ${tag[$a]}
   git push $2 :refs/tags/${tag[$a]}
   a=`expr $a + 1`
   tagnum=`expr $tagnum - 1`
done

構建項目:

 這里點擊“開始構建”是直接拉取gitlab最新版的master分支代碼。也可以選擇tag構建。之后我會寫構建生成tag的文稿。

 最后貼圖構建成功的代碼。

Started by user admin
Running as SYSTEM
[EnvInject] - Loading node environment variables.
Building in workspace /home/jenkins/.jenkins/workspace/MingByteWeb
using credential 26e43bbc-407f-42ff-8865-41496cf12fe9
 > /usr/bin/git rev-parse --is-inside-work-tree # timeout=10
Fetching changes from the remote Git repository
 > /usr/bin/git config remote.origin.url git@192.168.8.10:hxf/ming-byte-web.git # timeout=10
Fetching upstream changes from git@192.168.8.10:hxf/ming-byte-web.git
 > /usr/bin/git --version # timeout=10
using GIT_SSH to set credentials 
 > /usr/bin/git fetch --tags --progress git@192.168.8.10:hxf/ming-byte-web.git +refs/heads/*:refs/remotes/origin/*
 > /usr/bin/git rev-parse origin/master^{commit} # timeout=10
Checking out Revision f94b7302025142f80aa671d6d3d1ffe0f5601807 (origin/master)
 > /usr/bin/git config core.sparsecheckout # timeout=10
 > /usr/bin/git checkout -f f94b7302025142f80aa671d6d3d1ffe0f5601807
Commit message: "fix:修復接口baseUrl"
 > /usr/bin/git rev-list --no-walk f94b7302025142f80aa671d6d3d1ffe0f5601807 # timeout=10
[MingByteWeb] $ /bin/sh -xe /home/tomcat/temp/jenkins2058141575534233786.sh
+ cd /home/jenkins/.jenkins/workspace/MingByteWeb
+ bash /home/jenkins/jenkins.sh 192.168.8.10:5000/mingbyteweb ming-byte-web
首次部署
3
0 刪除tag:rc_59
已刪除 tag 'rc_59'(曾為 40dc597)
fatal: 'ming-byte-web' does not appear to be a git repository
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
+ echo ================vue打包================
================vue打包================
+ sudo /usr/local/bin/npm install
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@1.2.9 (node_modules/fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@1.2.9: wanted {"os":"darwin","arch":"any"} (current: {"os":"linux","arch":"x64"})

up to date in 8.204s
+ sudo /usr/local/bin/npm run build

> ming-byte@0.1.0 build /home/jenkins/.jenkins/workspace/MingByteWeb
> vue-cli-service build

 WARN  "baseUrl" option in vue.config.js is deprecated now, please use "publicPath" instead.

-  Building for production...
 WARNING  Compiled with 2 warnings11:55:52

 warning  

asset size limit: The following asset(s) exceed the recommended size limit (244 KiB).
This can impact web performance.
Assets: 
  assets/img/en-jiao.bc226a6e.png (736 KiB)
  assets/img/fzlc1.04b5a7d6.png (1.72 MiB)
  assets/img/bg.10e66f2d.png (269 KiB)
  assets/img/neng2.51572385.svg (708 KiB)
  assets/img/aboutus-bg.24b126e4.png (3.06 MiB)
  assets/img/homeImg.2d4c24fe.jpg (605 KiB)
  assets/img/banner.d0de1296.png (877 KiB)
  assets/img/en-hu.10ba4555.png (748 KiB)
  assets/img/shuzi.0c4edbf4.png (2.82 MiB)
  assets/img/en-jiao-bg.327842dc.png (352 KiB)
  assets/img/banner.dc7b97a9.png (535 KiB)
  assets/js/chunk-vendors.eabed4cd.js (826 KiB)

 warning  

entrypoint size limit: The following entrypoint(s) combined asset size exceeds the recommended limit (244 KiB). This can impact web performance.
Entrypoints:
  app (1.07 MiB)
      assets/css/chunk-vendors.2921d934.css
      assets/js/chunk-vendors.eabed4cd.js
      assets/css/app.8be713f0.css
      assets/js/app.a67be888.js


  File                                      Size             Gzipped

  dist/assets/js/chunk-vendors.eabed4cd.    825.72 KiB       222.24 KiB
  js
  dist/assets/js/about.1e94fa7f.js          30.84 KiB        8.89 KiB
  dist/assets/js/app.a67be888.js            26.48 KiB        9.19 KiB
  dist/assets/js/chunk-e4921c92.8eb56c35    5.43 KiB         2.13 KiB
  .js
  dist/assets/css/chunk-vendors.2921d934    228.07 KiB       34.52 KiB
  .css
  dist/assets/css/about.f15fe60f.css        16.90 KiB        8.56 KiB
  dist/assets/css/app.8be713f0.css          10.34 KiB        4.10 KiB
  dist/assets/css/chunk-e4921c92.9451e9f    2.12 KiB         0.83 KiB
  4.css

  Images and other types of assets omitted.

 DONE  Build complete. The dist directory is ready to be deployed.
 INFO  Check out deployment instructions at https://cli.vuejs.org/guide/deployment.html
      
+ echo ================打包docker================
================打包docker================
+ docker build -t 192.168.8.10:5000/mingbyteweb:latest .
Sending build context to Docker daemon  323.8MB

Step 1/6 : FROM nginx:1.15.5
 ---> dbfc48660aeb
Step 2/6 : RUN rm /etc/nginx/conf.d/default.conf
 ---> Using cache
 ---> 6f887258cdf3
Step 3/6 : ADD default.conf /etc/nginx/conf.d/
 ---> Using cache
 ---> b2292a96d1aa
Step 4/6 : COPY ./dist /usr/share/nginx/html/
 ---> Using cache
 ---> 717db4eaf72a
Step 5/6 : RUN chmod -R a+rx /usr/share/nginx/html/*
 ---> Using cache
 ---> fd948904b5d3
Step 6/6 : CMD  nginx -g 'daemon off;'
 ---> Using cache
 ---> a58cefe00e53
Successfully built a58cefe00e53
Successfully tagged 192.168.8.10:5000/mingbyteweb:latest
+ echo ================開始推送鏡像================
================開始推送鏡像================
+ sudo docker push 192.168.8.10:5000/mingbyteweb:latest
The push refers to repository [192.168.8.10:5000/mingbyteweb]
8121fdecba88: Preparing
a44f0decdd50: Preparing
e3de46667e06: Preparing
38b7b8ba2bf9: Preparing
86df2a1b653b: Preparing
bc5b41ec0cfa: Preparing
237472299760: Preparing
bc5b41ec0cfa: Waiting
237472299760: Waiting
e3de46667e06: Pushed
38b7b8ba2bf9: Pushed
86df2a1b653b: Pushed
a44f0decdd50: Pushed
8121fdecba88: Pushed
bc5b41ec0cfa: Pushed
237472299760: Pushed
latest: digest: sha256:3808b7955c70fee07e92e75cf59c4b1585b20651a1094d7f6382e0441797d969 size: 1786
+ echo ================結束推送鏡像================
================結束推送鏡像================
+ sudo docker run -d --name MingByteWeb -p:8081:8080 192.168.8.10:5000/mingbyteweb
6d6160bcf0d7d638ae58368d1760d47e3d2cc1d176aa282d31e859a26a1f36db
+ echo 'finished!'
finished!
Notifying upstream projects of job completion
Finished: SUCCESS

 

 最后注意gitlab這塊有個問題。當提交代碼到gitlab時,gitlab的webhook會觸發jenkins自動構建。

 但是可能會構建失敗。

 解決:jenkins的系統配置里面,將gitlab下的“Enable authentication for '/project' end-point”后面的√去掉

 

vue項目需要用到的配置文件:

default.conf:

server {
    listen       7000;

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   html;
    }

    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    #location ~ \.php$ {
    #    proxy_pass   http://127.0.0.1;
    #}

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    #location ~ \.php$ {
    #    root           html;
    #    fastcgi_pass   127.0.0.1:9000;
    #    fastcgi_index  index.php;
    #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
    #    include        fastcgi_params;
    #}

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\.ht {
    #    deny  all;
    #}
}

Dockerfile:

FROM nginx:1.15.5
#dist到nginx部署
RUN rm /etc/nginx/conf.d/default.conf
#ADD
ADD default.conf /etc/nginx/conf.d/
COPY ./dist /usr/share/nginx/html/
RUN chmod -R a+rx /usr/share/nginx/html/*
CMD  nginx -g 'daemon off;'

 


  


免責聲明!

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



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