使用Jenkins進行持續部署(PHP代碼)

在docker項目中單機構建jenkins使用gitlab的webhook對項目進行持續部署注意本次項目是php項目沒有build和test部分,至於test部分咱們下一節進行,本次只是進行一個提交部署的功能,本屆不會講到使用docker進行交付的方式php

項目結構說明

screenshots.png

其中data/jenkins 是存放狀態jenkins的目錄html

CI-server.yml是jenkisn啓動結構前端

version: "3.0"
services:
  jenkins:
    image: jenkins:latest
    environment:
       DOCKER_URL: ''
    volumes:
      - "/etc/localtime:/etc/localtime:ro"
#備份數據
      - "./data/jenkins:/var/jenkins_home"
      - "./dockerfiles/jenkins/.ssh:/var/jenkins_home/.ssh"
    ports:
      - "8999:8080"
#      - "50000:50000"

docker-compose 編排的項目結構

docker-production.yml和docker-compose.yml的差別只是關閉了安全端口,使用了一些線上的配置文件而已node

version:  '3.2'
services:
  nginx:
    image: nginx:1.13.3
    ports:
      - "80:80"
    links:
      - "php-fpm:php-fpm"
    volumes:
#網站目錄
      - ./app:/var/www/html
      - ./dockerfiles/nginx/conf.d:/etc/nginx/conf.d:ro
#日誌文件
      - ./logs/nginx:/var/log/nginx
      - /etc/localtime:/etc/localtime:ro
    restart: always
    command: nginx -g 'daemon off;'
##mysql db
  mysql-db:
    image: mysql:5.7
    volumes:
      - ./data/mysql:/var/lib/mysql:rw
      - ./logs/mysql:/var/lib/mysql-logs:rw
      - ./dockerfiles/mysql/conf.d:/etc/mysql/conf.d:ro
      - /etc/localtime:/etc/localtime:ro
    restart: always
    environment:
        MYSQL_ROOT_PASSWORD: zhaojun
        MYSQL_DATABASE: package_v1
        MYSQL_USER: zhaojun
        MYSQL_PASSWORD: zhaojun

  redis-db:
    build: ./dockerfiles/redis
    restart: always
    volumes:
      - ./data/redis:/data
      - /etc/localtime:/etc/localtime:ro

  php-fpm:
    build: ./dockerfiles/php/
    restart: always
    environment:
        TP_APP_DEBUG: 0
        APP_DEBUG: 1
        APP_DOCKER_DEV: 0
        MYSQL_HOST: mysql-db
        MYSQL_DATABASE: zushouyou_v1
        MYSQL_USER: root
        MYSQL_PASSWORD: zhaojun
        MYSQL_PORT: 3306
    volumes:
#網站目錄
      - ./app:/var/www/html:rw
#配置文件
      - ./dockerfiles/php/php.ini:/usr/local/etc/php/php.ini:ro
      - ./dockerfiles/php/php-fpm.conf:/usr/local/etc/php-fpm.conf:ro
      - /etc/localtime:/etc/localtime:ro
#掛載站點日誌
      - ./logs/php-fpm:/var/log/php-fpm:rw
    depends_on:
      - mysql-db
      - redis-db
    links:
      - mysql-db:mysql-db
      - redis-db:redis-db
    command: php-fpm

##job
  takser:
    image: node:6.9
    environment:
        MYSQL_HOST: mysql-db
        SERVER_HOST: server
    volumes:
      - ./app/node-task:/task
      - /etc/localtime:/etc/localtime:ro
    links:
      - mysql-db:mysql-db
      - redis-db:redis-db
      - nginx:server
    working_dir: /task
    command: /bin/bash -c "npm install && node ./index.js"

##composer構建工具
  composer:
    image: composer:1.4.2
    volumes:
    #網站目錄
      - ./app:/app:rw
    working_dir: /app/webroot
    command: composer install

##前端工具
  bower:
    image: digitallyseamless/nodejs-bower-grunt
    volumes:
      - ./app:/app:rw
    working_dir: /app/webroot
    command: bower install

Step1,單機服務器部署jenkins和docker編排的項目

這裏咱們把服務器命令爲:zushouyoumysql

服務器預先須要進行nginx

  • 1.優化
  • 2.安裝 git docker
  • 3.clone 項目下來
git clone project..

screenshots.png

Step2,克隆完成項目之後啓動jenkins

docker-compose -f CI-server.yml up -d

screenshots.png

若是發現jenkins容器掛了,查看日誌,添加權限,重啓容器就好了git

screenshots.png

Step3,配置Jenkins

在CI-server.yml中咱們映射了 8999->8080端口,因此咱們只要訪問這個端口就能夠訪問到jenkins了,若是服務拒絕,請檢查服務器商安全組,iptables規則,firewalld等防火牆。web

而後咱們就能訪問歡迎界面了。
screenshots.pngredis

查看初始密碼,這裏咱們的容器id是 f8sql

docker exec -it f8 bash -c 'cat /var/jenkins_home/secrets/initialAdminPassword'
60e74c836b25402581cb0daae95b65a4

screenshots.png

首次進入,須要先安裝插件,這裏咱們選擇手工的去選擇一些插件就好了,由於咱們若是隻是集成的話用不了多少插件

screenshots.png

插件選擇我就不截圖說明了,build tools 和pipline裏面得插件能夠先取消。
比須要的插件以下

screenshots.png

在安裝完成以後配置用戶名和帳號,最後還須要安裝一些第三方的插件

screenshots.png
系統管理>管理插件
1.ssh,這個插件便於到遠程ssh主機上執行命令
screenshots.png

2.webhook,這裏咱們是gitlab其餘同理
screenshots.png

在安裝完成之後,最好仍是重啓一下,避免出現問題
screenshots.png

Step4,配置Job

系統設置先配置SSH Server和Git的SSH

先讓宿主機能經過ssh進行pull

1.生成rsa
screenshots.png

2.添加到git網站公鑰

screenshots.png

3.若是能直接pull,說明OK了
screenshots.png

4.配置jenkins的server

配置SSH主機
screenshots.png

5.完過後回到主頁開始job吧

  • 1.

screenshots.png

  • 2.

screenshots.png

  • 3.

screenshots.png

  • 4.執行構建

screenshots.png

最後就只配置一下通知了,
gitlab的webhook配置一下

$RUL/generic-webhook-trigger/invoke?token=fuck

screenshots.png

這樣就完成了一次自動化部署的過程。請記住,這篇文章只是讓咱們瞭解了一些簡單的原理,其中包含build,test最後纔是ci,若是咱們前面的工做不去實現作,這樣並無什麼意義,只是作了一個自動化的腳本。

相關文章
相關標籤/搜索