基于Docker、Jenkins和阿里云实现项目自动发布

1、开通阿里云命名空间

​ (1)、我们的方式是通过Jenkins将GitHub的项目打成镜像推送到阿里云上面,再通过Jenkins拉到服务器上面进行编译启动从而实现我们的需求,所以要先准备好阿里云相关东西。

​ (2)、进入阿里云后台搜索容器镜像服务,选择命名空间,开始创建一个命名yangqingci的命名空间。

1567048179044

​ (3)、然后点击下面的授权管理菜单,前往RAM授权,点击人员管理-》新建用户

1567068336565

​ 创建完用户,设置好密码之后为用户添加权限、也可以将用户为用户创建个组添加组权限,添加如下权限就够了,其他权限作用我也不太清楚。

​ AliyunCSFullAccess

​ AliyunContainerRegistryFullAccess

​ AliyunContainerRegistryReadOnlyAccess (4)、创建完RAM用户后需要用此用户登录阿里云新建一个个人实例,设置完密码就可以验证 docker login --username=yangqingci@1710245820341000 registry.cn-shanghai.aliyuncs.com

2、给自己的项目添加DockerFile和Compose文件

​ (1)、我现在有两个项目,一个是后端java接口项目,一个是前端html+nginx项目。为自己的后端接口项目根目录新建个Dockerfile文件,内容如下:

FROM java:alpine
WORKDIR /app
COPY target/tbk-api.jar .
ENTRYPOINT ["java", "-jar", "tbk-api.jar"]
CMD ["--spring.profiles.active=prod"]

​ (2)、为自己的前端项目根目录新建Dockfile文件和nginx.conf文件,此项目主要由gulp搭建前端的静态项目直接就可以放到nginx里面运行,为了方便就直接和nginx搞成了一个项目,gulp的使用会在另一篇文章单独描述。

​ Dockerfile文件:

FROM nginx
COPY nginx.conf /etc/nginx/nginx.conf
COPY web /usr/share/nginx/html/web
RUN mkdir -p /etc/nginx/logs

​ nginx.conf文件:

worker_processes 1;
error_log logs/error.log;

events {
    worker_connections 102400;
}


http {
    include mime.types;
    default_type application/octet-stream;

    log_format main  '$remote_addr - $remote_user [$time_local] $http_host "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log logs/access.log main;
    sendfile on;
    keepalive_timeout 80;
    server_names_hash_bucket_size 64;

    upstream tbk-api {
        server tbk-api:8080;  //这个项目名称是在docker-compose文件中配置的
    }

    server {
        listen 80;
        server_name www.feichangshengqian.com;

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

        location ~ /tbk-api/ {
            proxy_pass http://tbk-api;
            proxy_set_header Host $host;
            proxy_set_header X-Forwarded-For $remote_addr;
        }
    }
}

​ (3)、由于我们的项目是在docker容器内相互引用,所以这里还要使用docker-compose,还需要在后端项目的根目录下新建docker-compose.yaml

 version: "2"

 services:
   tbk-api: #对应nginx项目名
     image: registry.cn-qingdao.aliyuncs.com/yangqingci/tbk-api:prod #jenkins中配置的
     container_name: prod_tbk-api
     command: ["--spring.profiles.active=prod"]
     environment:
       TZ: "Asia/Shanghai"
     ports:
       - "8080:8080"

   tbk-web:
     image: registry.cn-qingdao.aliyuncs.com/yangqingci/tbk-web:prod
     container_name: prod_tbk-web
     command: ["nginx", "-g", "daemon off;", "-c", "/etc/nginx/nginx.conf"]
     links:
       - tbk-api
     ports:
       - "80:80"
       - "443:443"

​ (4)、到此我们项目的基本配置就完成了,下面就开始结合docker和jenkins来实现项目的自动部署

项目结构目录如下:

因部分内容涉及个人隐私,如果需要查看本贴隐藏内容请联系