CI/CD 搭建 部署 java 项目 并打成 镜像 运行 全流程

CI/CD 搭建 部署 java 项目 并打成 镜像 运行

Jenkins
Gitlab
CI/CD搭建 部署 GO 项目
物理机配置

  1. gitlab: 2核4G
  2. jenkins: 2核4G
  3. docker: 2核2G

安装 docker 脚本

#!/bin/bash
echo "remove old docker"
yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-selinux \
                  docker-engine-selinux \
                  docker-engine
echo "install yum-utils"
yum install -y yum-utils
echo "config-manager"
yum-config-manager \
    --add-repo \
    https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
	
sed -i 's/download.docker.com/mirrors.aliyun.com\/docker-ce/g' /etc/yum.repos.d/docker-ce.repo

echo "install docker"
yum install docker-ce docker-ce-cli containerd.io

echo "start docker"
systemctl enable docker 
systemctl start docker

启动 gitlab (部署方式 docker)

  1. 创建目录

    mkdir -p /opt/gitlab/{data/,logs,config/}
    
  2. 部署服务

    docker run -d --restart=always \
    --hostname gitlab --name=gitlab \
    -p 5443:443 -p 90:80 -p 1122:22 \
    -v /etc/localtime:/etc/localtime \
    -v /opt/gitlab/config:/etc/gitlab \
    -v /opt/gitlab/logs:/var/log/gitlab \
    -v /opt/gitlab/data:/var/opt/gitlab \
    registry.cn-shenzhen.aliyuncs.com/yjy_k8s/gitlab:v15.4.2
    
  3. 修改配置文件

    vi  /opt/gitlab/config/gitlab.rb
    ## 以下是配置项 ip 地址改为本机的公网 ip
    # 修改 http 访问地址
    external_url 'http://172.16.222.250:90'
    
    # 修改了 http 端口同时也要修改 nginx 端口
    nginx['listen_port'] = 80
    
    # 修改 ssh 访问地址
    gitlab_rails['gitlab_ssh_host'] = '172.16.222.250'
    
    # 修改 ssh 端口为上面 docker run 设置的端口
    gitlab_rails['gitlab_shell_ssh_port'] = 1122
    
    # 关闭容器仓库功能
    gitlab_rails['gitlab_default_projects_features_container_registry'] = false
    gitlab_rails['registry_enabled'] = false
    registry['enable'] = false
    registry_nginx['enable'] = false
    
    # 包仓库、依赖管理
    gitlab_rails['packages_enabled'] = false
    gitlab_rails['dependency_proxy_enabled'] = false
    
    # GitLab Pages
    gitlab_pages['enable'] = false
    pages_nginx['enable'] = false
    
    # 关闭监控和性能基准相关功能
    prometheus_monitoring['enable'] = false
    alertmanager['enable'] = false
    node_exporter['enable'] = false
    redis_exporter['enable'] = false
    postgres_exporter['enable'] = false
    pgbouncer_exporter['enable'] = false
    gitlab_exporter['enable'] = false
    grafana['enable'] = false
    sidekiq['metrics_enabled'] = false
    
    # Usage Statistics
    gitlab_rails['usage_ping_enabled'] = false
    gitlab_rails['sentry_enabled'] = false
    grafana['reporting_enabled'] = false
    
    # GitLab KAS
    gitlab_kas['enable'] = false
    gitlab_rails['gitlab_kas_enabled'] = false
    # Terraform
    gitlab_rails['terraform_state_enabled'] = false
    # Kerberos 文档说EE only,但是默认值为 true
    gitlab_rails['kerberos_enabled'] = false
    # Sentinel
    sentinel['enable'] = false
    # Mattermost
    mattermost['enable'] = false
    mattermost_nginx['enable'] = false
    
    # 降低后台守护进程并发数
    sidekiq['max_concurrency'] = 5
    
    # 关闭电子邮件相关功能
    gitlab_rails['smtp_enable'] = false
    gitlab_rails['gitlab_email_enabled'] = false
    gitlab_rails['incoming_email_enabled'] = false
    
    # 关闭 CI 功能
    gitlab_ci['gitlab_ci_all_broken_builds'] = false
    gitlab_ci['gitlab_ci_add_pusher'] = false
    
    # 减少数据库并发数。默认为 8
    postgresql['max_worker_processes'] = 4
    # 减少数据库缓存。默认为 256MB
    postgresql['shared_buffers'] = "128MB"
    
    # 禁用 puma
    puma['worker_processes'] = 0
    puma['min_threads'] = 1
    puma['max_threads'] = 2
    
    #gitaly['cgroups_mountpoint'] = '/sys/fs/cgroup'
    gitaly['cgroups_hierarchy_root'] = 'gitaly'
    gitaly['cgroups_cpu_shares'] = 512
    
    gitaly['concurrency'] = [
      {
        'rpc' => "/gitaly.SmartHTTPService/PostReceivePack",
        'max_per_repo' => 3
      }, {
        'rpc' => "/gitaly.SSHService/SSHUploadPack",
        'max_per_repo' => 3
      }
    ]
    
    # 在结尾添加以下配置
    gitlab_rails['env'] = {
      'MALLOC_CONF' => 'dirty_decay_ms:1000,muzzy_decay_ms:1000'
    }
    
    gitaly['env'] = {
      'LD_PRELOAD' => '/opt/gitlab/embedded/lib/libjemalloc.so',
      'MALLOC_CONF' => 'dirty_decay_ms:1000,muzzy_decay_ms:1000',
      'GITALY_COMMAND_SPAWN_MAX_PARALLEL' => '2'
    }
    
    #gitaly['cgroups_count'] = 2
    gitaly['cgroups_memory_enabled'] = true
    gitaly['cgroups_memory_limit'] = 500000
    gitaly['cgroups_cpu_enabled'] = true
    
  4. 重启 gitlab

docker restart gitlab
  1. 访问 gitlab http://43.137.7.130:90/ 首次登录 使用 root 用户登录

    # 获取首次登录密码
    cat /opt/gitlab/config/initial_root_password
    ##
    Password: QWCgeYWFuK7XCKdNqftmxDIpS9mqyxrPo8stxqGBaiI=
    

    到此 gitlab 就是部署完成了!!

启动 Jenkins (部署方式 docker)

  1. 部署服务

    docker run --name jenkins \
    -u root \
    -d \
    -p 8080:8080 \
    -p 50000:50000 \
    -v /var/jenkins_home:/var/jenkins_home \
    -v /var/run/docker.sock:/var/run/docker.sock \
    -v /usr/bin/docker:/usr/bin/docker \
    jenkins/jenkins:2.373
    
  2. 访问 jenkins http://43.137.41.251:8080/ 首次登录 使用生成的密码

    cat /var/jenkins_home/secrets/initialAdminPassword
    
  3. 安装插件

gitlab

Publish Over SSH

maven Integration

Config File Provider

将 Jenkins 和 gitlab 打通

安装好 所有插件之后重启 jenkins 修改 maven 阿里镜像源

  1. 管理配置文件
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    配置全局 maven 使用新建的配置文件 并安装 maven
    在这里插入图片描述
    在这里插入图片描述
    连接 所要部署的服务器
    在这里插入图片描述
    新建一个 job
    在这里插入图片描述
    在这里插入图片描述

  2. 在 jenkins 容器下 生成 密钥

    ssh-keygen
    

    在这里插入图片描述

  3. 在 jenkins 容器内 连接 gitlab

    git ls-remote -h -- ssh://git@43.137.7.130:1122/gitlab-instance-78d21fb7/black-dragon.git HEAD
    

配置 gitlab 仓库地址
在这里插入图片描述

配置 webhook
在这里插入图片描述

在 gitlab 配置 Jenkins 中生成的地址
在这里插入图片描述
在这里插入图片描述

关闭 ssl 验证
在这里插入图片描述
测试通路
在这里插入图片描述
配置 jenkins build
在这里插入图片描述
配置 打包后的操作
在这里插入图片描述
将 Dockerfile 文件上传
在这里插入图片描述
第二次上传 jar 包 并 打成镜像运行
在这里插入图片描述
**项目中的 Dockfile **

# 基础镜像
FROM openjdk:8-jre-alpine
# author
MAINTAINER bg
# 挂载目录
VOLUME /home/bg
# 创建目录
RUN mkdir -p /home/bg
# 指定路径
WORKDIR /home/bg
# 复制jar文件到路径
ADD bg_hello.jar bg_hello.jar
# 启动认证服务
ENTRYPOINT ["java","-jar","/home/bg/bg_hello.jar"]

到此处配置 已经完成 之后就是 测试通路 首次构建时间会比较长 因为 maven 需要从远程镜像源 下载 jar 包

执行结果


Waiting for Jenkins to finish collecting data
[JENKINS] Archiving /var/jenkins_home/workspace/black-dragon/pom.xml to com.bg/SpringBootBG/0.0.1-SNAPSHOT/SpringBootBG-0.0.1-SNAPSHOT.pom
[JENKINS] Archiving /var/jenkins_home/workspace/black-dragon/target/bg_hello.jar to com.bg/SpringBootBG/0.0.1-SNAPSHOT/SpringBootBG-0.0.1-SNAPSHOT.jar
channel stopped
SSH: Connecting from host [04be73e9e64e]
SSH: Connecting with configuration [docker server] ...
SSH: Creating session: username [root], hostname [146.56.193.100], port [22]
SSH: Connecting session ...
SSH: Connected
SSH: Opening SFTP channel ...
SSH: SFTP channel open
SSH: Connecting SFTP channel ...
SSH: Connected
SSH: cd [/root]
SSH: OK
SSH: cd [/root]
SSH: OK
SSH: cd [bg]
SSH: OK
SSH: put [Dockerfile]
SSH: OK
SSH: Opening exec channel ...
SSH: EXEC: channel open
SSH: EXEC: STDOUT/STDERR from command [# 切换至工作目录
cd /root/bg
#查看文件
ls] ...
SSH: EXEC: connected
bg_hello.jar
Dockerfile
SSH: EXEC: completed after 201 ms
SSH: cd [/root]
SSH: OK
SSH: cd [bg]
SSH: OK
SSH: put [bg_hello.jar]
SSH: OK
SSH: Opening exec channel ...
SSH: EXEC: channel open
SSH: EXEC: STDOUT/STDERR from command [#!/bin/bash
#切换到 bg 目录下
cd /root/bg/
#删除原有镜像
docker rmi bgbg/bg-hello:latest
#构建镜像
docker build -t bg/bg-hello:latest .
#启动容器
docker run -itd  --name=bg-hello -p 20217:20217 bg/bg-hello:latest] ...
SSH: EXEC: connected
Error response from daemon: No such image: bgbg/bg-hello:latest
#1 [internal] load .dockerignore
#1 transferring context: 2B done
#1 DONE 0.0s

#2 [internal] load build definition from Dockerfile
#2 transferring dockerfile: 367B done
#2 DONE 0.0s

#3 [internal] load metadata for docker.io/library/openjdk:8-jre-alpine
#3 DONE 1.2s

#4 [1/4] FROM docker.io/library/openjdk:8-jre-alpine@sha256:f362b165b870ef129cbe730f29065ff37399c0aa8bcab3e44b51c302938c9193
#4 DONE 0.0s

#5 [internal] load build context
#5 transferring context: 17.34MB 0.1s done
#5 DONE 0.1s

#6 [2/4] RUN mkdir -p /home/bg
#6 CACHED

#7 [3/4] WORKDIR /home/bg
#7 CACHED

#8 [4/4] ADD bg_hello.jar bg_hello.jar
#8 DONE 0.1s

#9 exporting to image
#9 exporting layers 0.1s done
#9 writing image sha256:e64acf5b2cb8c0282ecd1953a71e5a2d0dcb349fb6267f8acaac8373eb362292 done
#9 naming to docker.io/bg/bg-hello:latest done
#9 DONE 0.1s
6de91fafb003ed226f197779ff29c74d3beb9ed76a481d00914ec199e0b34e52
SSH: EXEC: completed after 2,201 ms
SSH: Disconnecting configuration [docker server] ...
SSH: Transferred 2 ( 1 + 1 ) file(s)
Finished: SUCCESS

服务器 查看运行情况 并访问
在这里插入图片描述
以上文章若有细枝末节的地方没有提到,私信之后 会再次完善此文章

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值