在docker项目中单机构建jenkins使用gitlab的webhook对项目进行持续部署注意本次项目是php项目没有build和test部分,至于test部分咱们下一节进行,本次只是进行一个提交部署的功能,本届不会讲到使用docker进行交付的方式php
其中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-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
这里咱们把服务器命令为:zushouyoumysql
服务器预先须要进行nginx
git clone project..
docker-compose -f CI-server.yml up -d
若是发现jenkins容器挂了,查看日志,添加权限,重启容器就好了git
在CI-server.yml中咱们映射了 8999->8080端口,因此咱们只要访问这个端口就能够访问到jenkins了,若是服务拒绝,请检查服务器商安全组,iptables规则,firewalld等防火墙。web
而后咱们就能访问欢迎界面了。redis
查看初始密码,这里咱们的容器id是 f8sql
docker exec -it f8 bash -c 'cat /var/jenkins_home/secrets/initialAdminPassword' 60e74c836b25402581cb0daae95b65a4
首次进入,须要先安装插件,这里咱们选择手工的去选择一些插件就好了,由于咱们若是只是集成的话用不了多少插件
插件选择我就不截图说明了,build tools 和pipline里面得插件能够先取消。
比须要的插件以下
在安装完成以后配置用户名和帐号,最后还须要安装一些第三方的插件
系统管理>管理插件
1.ssh,这个插件便于到远程ssh主机上执行命令
2.webhook,这里咱们是gitlab其余同理
在安装完成之后,最好仍是重启一下,避免出现问题
先让宿主机能经过ssh进行pull
1.生成rsa
2.添加到git网站公钥
3.若是能直接pull,说明OK了
4.配置jenkins的server
配置SSH主机
5.完过后回到主页开始job吧
最后就只配置一下通知了,
gitlab的webhook配置一下
$RUL/generic-webhook-trigger/invoke?token=fuck
这样就完成了一次自动化部署的过程。请记住,这篇文章只是让咱们了解了一些简单的原理,其中包含build,test最后才是ci,若是咱们前面的工做不去实现作,这样并无什么意义,只是作了一个自动化的脚本。