使用Jenkins构建自动化项目

实例方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
// docker-compose.yml

version: '3'

networks:
  default:
    driver: bridge
    ipam:
      driver: default
      config:
        - subnet: 192.168.5.0/20
services:
  nginx:
    build:
      context: ./services/nginx
      args:
        NGINX_VERSION: nginx:${NGINX_VERSION}
        CONTAINER_PACKAGE_URL: ${CONTAINER_PACKAGE_URL}
        NGINX_INSTALL_APPS: ${NGINX_INSTALL_APPS}
    container_name: nginx-${NGINX_VERSION}
    ports:
      - "${NGINX_HTTP_HOST_PORT}:80"
      - "${NGINX_HTTPS_HOST_PORT}:443"
    volumes:
      - ${WEB_APP_SOURCE_DIR}:/wwwroot:rw
      - ${SOURCE_DIR}:/www/:rw
      - ${NGINX_SSL_CERTIFICATE_DIR}:/ssl:rw
      - ${NGINX_CONFD_DIR}:/etc/nginx/conf.d/:rw
      - ${NGINX_CONF_FILE}:/etc/nginx/nginx.conf:ro
      - ${NGINX_FASTCGI_PHP_CONF}:/etc/nginx/fastcgi-php.conf:ro
      - ${NGINX_FASTCGI_PARAMS}:/etc/nginx/fastcgi_params:ro
      - ${NGINX_LOG_DIR}:/var/log/nginx/:rw
    environment:
      TZ: "$TZ"
    restart: always
    networks:
      - default
  jenkins:
    image: jenkins/jenkins
    volumes:
      - ${WEB_APP_SOURCE_DIR}:/data/www:rw
      - $PWD/services/jenkins:/var/jenkins_home
    expose:
      - 8080
      - 50000
    privileged: true
    user: root
    restart: always
    container_name: jenkins
    environment:
      TZ: Asia/Shanghai
    networks:
      - default

  php:
    build:
      context: ./services/php
      args:
        PHP_VERSION: php:${PHP_VERSION}-fpm-alpine
        CONTAINER_PACKAGE_URL: ${CONTAINER_PACKAGE_URL}
        PHP_EXTENSIONS: ${PHP_EXTENSIONS}
        TZ: "$TZ"
    container_name: php-${PHP_VERSION}
    expose:
      - 9501
    extra_hosts:
      - "www.lancema.com:172.17.0.1"
    volumes:
      - ${SOURCE_DIR}:/www/:rw
      - ${PHP_PHP_CONF_FILE}:/usr/local/etc/php/php.ini:ro
      - ${PHP_FPM_CONF_FILE}:/usr/local/etc/php-fpm.d/www.conf:rw
      - ${PHP_LOG_DIR}:/var/log/php
      - ${DATA_DIR}/composer:/tmp/composer
    restart: always
    cap_add:
      - SYS_PTRACE
    networks:
      - default

  mysql:
    image: mysql:${MYSQL_VERSION}
    container_name: mysql-${MYSQL_VERSION}
    ports:
      - "${MYSQL_HOST_PORT}:3306"
    volumes:
      - ${MYSQL_CONF_FILE}:/etc/mysql/conf.d/mysql.cnf:ro
      - ${DATA_DIR}/mysql:/var/lib/mysql/:rw
    restart: always
    networks:
      - default
    environment:
      MYSQL_ROOT_PASSWORD: "${MYSQL_ROOT_PASSWORD}"
      TZ: "$TZ"

  redis:
   image: redis:${REDIS_VERSION}
   container_name: redis-${REDIS_VERSION}
   ports:
     - "${REDIS_HOST_PORT}:6379"
   volumes:
     - ${REDIS_CONF_FILE}:/etc/redis.conf:ro
     - ${DATA_DIR}/redis:/data/:rw
   restart: always
   entrypoint: ["redis-server""/etc/redis.conf"]
   environment:
     TZ: "$TZ"
   networks:
     - default

  phpmyadmin:
   image: phpmyadmin/phpmyadmin:latest
   container_name: phpmyadmin
   ports:
     - "${PHPMYADMIN_HOST_PORT}:80"
   volumes:
     - ${PHPMYADMIN_USER_CONF_FILE}:/etc/phpmyadmin/config.user.inc.php:ro
     - ${PHPMYADMIN_PHP_CONF_FILE}:/usr/local/etc/php/conf.d/php-phpmyadmin.ini:ro
   networks:
     - default
   environment:
     - PMA_HOST=mysql
     - PMA_PORT=3306
     - TZ=$TZ

  phpredisadmin:
   image: erikdubbelboer/phpredisadmin:latest
   container_name: phpredisadmin
   ports:
     - "${REDISMYADMIN_HOST_PORT}:80"
   networks:
     - default
   environment:
     - REDIS_1_HOST=redis
     - REDIS_1_PORT=6379
     - TZ=$TZ
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#
server {
    listen 80;
    listen [::]:80;
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    ssl_certificate /ssl/jenkins.baidu.com/jenkins.baidu.com.pem;
    ssl_certificate_key /ssl/jenkins.baidu.com/jenkins.baidu.com.key;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
    ssl_ciphers TLS13-AES-256-GCM-SHA384:TLS13-CHACHA20-POLY1305-SHA256:TLS13-AES-128-GCM-SHA256:TLS13-AES-128-CCM-8-SHA256:TLS13-AES-128-CCM-SHA256:EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
    ssl_prefer_server_ciphers on;
    ssl_session_timeout 10m;
    ssl_session_cache builtin:1000 shared:SSL:10m;
    ssl_buffer_size 1400;
    add_header Strict-Transport-Security max-age=15768000;
    ssl_stapling on;
    ssl_stapling_verify on;
    server_name jenkins.baidu.com;

    if ($ssl_protocol = "") { return 301 https://$host$request_uri ; }
    if ($host != jenkins.baidu.com) {  return 301 $scheme://jenkins.baidu.com$request_uri ;  }
    
    #error_page 404 /404.html;
    #error_page 502 /502.html;

    root /wwwroot/jenkins.baidu.com;

    location / {
        try_files $uri $uri/ /index.html;
    }
    location /api {
        proxy_pass http://127.0.0.1;
        proxy_set_header   X-Forwarded-Proto $scheme;
        proxy_set_header   Host              $http_host;
        proxy_set_header   X-Real-IP         $remote_addr;
        #proxy_set_header X-Forwarded_For $proxy_add_x_forwarded_for;
    }
}

自动化配置

使用Jenkins构建自动化项目-图1使用Jenkins构建自动化项目-图2使用Jenkins构建自动化项目-图3

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
pwd
project_name='jenkins.baidu.com'
node -v
npm install -g yarn -registry=https://registry.npm.taobao.org
yarn -v
yarn install --pure-lockfile
yarn build

tar -zcvf ./$project_name.tar.gz -C ./dist/ .
mv ./$project_name.tar.gz /data/www
cd /data/www/
if [ ! -d "$project_name" ];then
mkdir $project_name
else
rm -rf $project_name/*
fi

tar -zxvf ./$project_name.tar.gz -C $project_name
rm -rf ./$project_name.tar.gz