赞
踩
前言:
你是不是还在使用 Gitlab+Jenkins+docker的方式搭建自动化部署平台?是不是还在苦恼服务器内存太小,Gitlab内存占用过大的问题? 是不是还在厌倦每次写完代码还要发布部署? 那就来试试Drone + Gitea + Docker 吧!
1、yum -y update 更新yum
2、yum remove docker docker-common docker-selinux docker-engine 存在旧的环境需要先删除
3、yum install -y yum-utils device-mapper-persistent-data lvm2 更新docker驱动
4、yum-config-manager --add-repo <http://download.docker.com/linux/centos/docker-ce.repo(中央仓库)> 设置源
yum-config-manager --add-repo <http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo(阿里仓库)>
5、yum -y install docker 安装最新版docker
6、systemctl start docker 启动docker
#使用yum安装,不要使用curl安装
yum install -y epel-release
yum install -y docker-compose
docker-compose --version
这里使用的docker-compose方式安装的
version: "3" networks: gitea: external: false services: server: image: gitea/gitea:1.19 container_name: gitea environment: - USER_UID=1000 - USER_GID=1000 restart: always networks: - gitea volumes: - /home/local/gitea/data:/data # /home/data可以替换成你想要的挂载目录 - /home/local/gitea/timezone:/etc/timezone:ro - /home/local/gitea/localtime:/etc/localtime:ro ports: - "3000:3000" # 3000可以替换成你想要的端口 - "10022:22" # 10022可以替换成22
记住端口为3000,启动安装命令
docker-compose up -d
访问http://服务器的ip:3000,配置你的信息,详情如下
采用的是mysql数据库,需要在数据库中新建一个gitea库
管理员密码设置,记住 app.ini 的位置,后续要调整的
第一次安装时候会有点久,因为要初始化库表
后续继续创建仓库即可
此时,新仓库如下:ssh://git@10.10.10.161:10022/root/third_platform_1.git
配置ssh密钥,将本地生成的公钥复制过来即可
然后上传代码就好了!
编写docker-compose.yml文件
drone-server: restart: always image: drone/drone:2.13.0 container_name: drone-server ports: - "7500:80" #端口为7500 volumes: - /home/local/drone/server/drone:/var/lib/drone/ - /home/local/drone/server/data:/data/ environment: - DRONE_GITEA_SERVER=http://10.10.10.161:10000 #对接的gitea地址 - DRONE_GITEA_CLIENT_ID=1bf5b7d8-f8fb-4023-a0d0-d8261294b26b #gitea 的 OAuth application的clientId - DRONE_GITEA_CLIENT_SECRET=gto_77tpo57fp2aadjwuooze35zybrkid3xtd57vcrovxem4edag5h6a #gitea 的OAuth application的SECRET - DRONE_SERVER_HOST=10.10.10.161:7500 # drone-server的地址ip:port - DRONE_SERVER_PROTO=http # 模式为http或者https - DRONE_RPC_SECRET=36fd9879667476dab64ae2ec0c354188 #openssl rand -hex 16 生成的随机密码 - DRONE_GIT_ALWAYS_AUTH=true - DRONE_GIT_USERNAME=root #drone的登录账号 - DRONE_GIT_PASSWORD=root #drone的登录密码 - DRONE_USER_CREATE=username:root,admin:true drone-runner: restart: always container_name: drone-runner image: drone/drone-runner-docker:1.8.2 volumes: #挂载到宿主机的docker上去 - /var/run/docker.sock:/var/run/docker.sock:rw environment: - DRONE_RPC_PROTO=http - DRONE_RPC_HOST=drone-server #这里可以直接写名称,还可以写DRONE_SERVER_HOST的地址 - DRONE_RPC_SECRET=36fd9879667476dab64ae2ec0c354188 #drone-server的DRONE_RPC_SECRET(同上) - DRONE_RUNNER_NAME=drone-runner - DRONE_RUNNER_CAPACITY=2
补充说明:gitea 的 OAuth 生成
执行docker-compose up -d
后访问 http://10.10.10.161:7500/ ,输入账号密码进入 root/root
点击同步后发现自己的仓库出现在上方,点击激活后出现如下图的样式
此时需要注意打开下面设置
1、.drone.yml 流水线操作文件
kind: pipeline type: docker name: myProject steps: # 1.maven打包 - name: maven compile pull: if-not-exists # 构建镜像的maven+jdk选择,最好选择满足匹配你的项目版本的 image: matderosa/maven-3.8-openjdk-17-gcc8.5 volumes: # maven构建缓存 - name: maven-cache path: /root/.m2 # 挂载宿主机的目录 - name: maven-build path: /thirdPlatform/build commands: # 开始打包maven工程 - mvn clean package -Dmaven.test.skip=true # 将打包后的文件复制到宿主机映射目录 - cp target/*.jar /thirdPlatform/build - cp Dockerfile /thirdPlatform/build - cp docker.sh /thirdPlatform/build - cp start.sh /thirdPlatform/build - name: build docker image: plugins/docker volumes: # 将容器内目录挂载到宿主机,仓库需要开启Trusted设置 - name: maven-build path: /thirdPlatform/build # 将应用打包好的Jar和执行脚本挂载出来 - name: docker path: /var/run/docker.sock # 挂载宿主机的docker settings: dockerfile: /thirdPlatform/build/Dockerfile commands: # 定义在Docker容器中执行的shell命令 - cd /thirdPlatform/build - chmod +x docker.sh - sh docker.sh - docker ps volumes: # 定义流水线挂载目录,用于共享数据 - name: maven-build host: path: /home/projects/thirdPlatform/maven/build # 从宿主机中挂载的目录 - name: maven-cache host: path: /home/projects/thirdPlatform/maven/cache - name: docker host: path: /var/run/docker.sock # drone执行触发器 trigger: branch: - master
2、start.sh sh启动文件
java -Xms128m -Xmx128m -jar /thirdPlatform/*.jar --spring.profiles.active=dev
if [ $? != 0 ]; then
echo Failed to start java >&2
exit 1
fi
3、Dockerfile(关键,容器的打包制作环境准备)
#指定了基础镜像为 khipu/openjdk17-alpine,即使用了 OpenJDK 17 的 Alpine 版本作为基础 FROM khipu/openjdk17-alpine #设置了一个名为 SERVIECE_PORT 的环境变量,并将其值设为 9090 ENV SERVIECE_PORT = 9090 # 容器里 新建目录 thirdPlatform RUN mkdir -p /thirdPlatform/ # 工作区 WORKDIR /thirdPlatform # 复制操作 COPY ./start.sh /thirdPlatform/ #将宿主机当前目录下的 *.jar 文件复制到容器的 /third_platform_admin/ 目录下 COPY ./*.jar /thirdPlatform/ #对 /thirdPlatform/ 目录及其子目录下的所有文件赋予可执行权限 RUN chmod 755 -R /thirdPlatform/ #设置容器的入口点为 /third_platform_admin/start.sh,即在容器启动时执行该脚本 ENTRYPOINT ["/thirdPlatform/start.sh"]
4、Docker.sh (名称可以修改,镜像容器制作的关键)
#!/bin/sh # 定义应用组名 group_name='karl' # 定义应用名称 ,这里的name是获取你仓库的名称,也可以自己写 app_name=${DRONE_REPO_NAME} # 定义应用版本 app_version='latest' echo '----copy jar----' docker stop ${app_name} echo '----stop container----' docker rm ${app_name} echo '----rm container----' docker rmi ${group_name}/${app_name}:${app_version} echo '----rm image----' # 打包编译docker镜像 docker build -t ${group_name}/${app_name}:${app_version} . echo '----build image----' docker run -p 9090:9090 --name ${app_name} \ -e TZ="Asia/Shanghai" \ -v /etc/localtime:/etc/localtime \ -d ${group_name}/${app_name}:${app_version} echo '----start container----'
第一次推送会失败,原因是webhook钩子设置了ip限制推送操作
解决方案为:在 /home/local/gitea/data/gitea/conf 下的app.ini文件中添加一行
[webhook]
ALLOWED_HOST_LIST = *
第一次构建maven项目时候,需要拉取依赖较多,时间会有点久,此时可以设置超时时间稍久一点(此时未考虑采用maven私服)
参考:https://juejin.cn/post/7129066031875620894
----------------------------------------------------------分割线---------------------------------------------------------------------------------------
由于需要透露日志文件到主机上去,新增logback.xml文件
<?xml version="1.0" encoding="UTF-8"?> <configuration debug="false" scan="true" scanPeriod="1 seconds"> <contextName>logback</contextName> <property name="log.dir" value="/data/appLogs/project"/> <!-- 控制台输出 --> <appender name="console" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> </appender> <!-- 错误日志输出 --> <appender name="errorFile" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${log.dir}/error/error.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${log.dir}/error.%d{yyyy-MM-dd}.zip</fileNamePattern> <maxHistory>30</maxHistory> </rollingPolicy> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>ERROR</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> </appender> <!-- 信息日志输出 --> <appender name="infoFile" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${log.dir}/info/info.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${log.dir}/info.%d{yyyy-MM-dd}.zip</fileNamePattern> <maxHistory>30</maxHistory> </rollingPolicy> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>INFO</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> </appender> <root level="info"> <appender-ref ref="console"/> <appender-ref ref="errorFile" /> <appender-ref ref="infoFile" /> </root> </configuration>
docker.sh 文件上修改容器制作配置
docker run -p 9090:9090 --name ${app_name} \
-e TZ="Asia/Shanghai" \
-v /etc/localtime:/etc/localtime \
# 容器内外同一时间
-v /etc/timezone:/etc/timezone \
# 这里是将日期映射出来的
-v /home/projects/${app_name}:/data/appLogs/project \
-d ${group_name}/${app_name}:${app_version}
重新提交代码,自动打包! 这样就完成啦!
//仓库地址尽量不使用阿里的,版本落后太多了
sudo yum-config-manager --add-repo http://download.docker.com/linux/centos/docker-ce.repo
// 查看docker版本
yum list docker-ce --showduplicates | sort -r
// 安装docker
sudo yum install docker-ce-25.0.4-1.el7 -y
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。