Docker 配置 Gitea + Drone 搭建 CI/CD 平臺
配置 Gitea 服務(wù)器來管理項目版本
本文的IP地址是為了方便理解隨便打的,不要亂點
首先使用 docker 搭建 Gitea 服務(wù)器,用于管理代碼版本,數(shù)據(jù)庫選擇mysql
Gitea 服務(wù)器的 docker-compose.yml
配置文件如下:
version: "3"
services:
server:
image: gitea/gitea:1.19.3
container_name: gitea
environment:
- USER_UID=1000
- USER_GID=1000
- GITEA__database__DB_TYPE=mysql
- GITEA__database__HOST=123.45.54.123:3306
- GITEA__database__NAME=gitea
- GITEA__database__USER=root
- GITEA__database__PASSWD=123456
restart: always
volumes:
- ./gitea:/data
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
ports:
- "3002:3000"
- "2222:22"
運行前先去數(shù)據(jù)庫服務(wù)器中新建一個名為 gitea 的數(shù)據(jù)庫
命令:CREATE DATABASE gitea
編寫完成后在當(dāng)前目錄下運行 docker compose up -d
即可運行 docker 容器
搭建 Drone 服務(wù)器與 Drone Runner
再使用 Docker 搭建 Drone 服務(wù)器,用于自動化部署的 CI/CD 平臺
瀏覽器中打開上一步配置好的Gitea,點擊右上角頭像
,點擊設(shè)置
,進入設(shè)置頁面
點擊應(yīng)用
選項卡,在頁面底部輸入應(yīng)用名稱(隨便寫一個就好,例如:Drone CI),輸入重定向URI(Drone服務(wù)鏈接+’/login‘,如’http://123.45.54.123:3991/login‘)
點擊創(chuàng)建應(yīng)用
客戶端ID即為下方配置文件的DRONE_GITEA_CLIENT_ID
客戶端密鑰即為下方配置文件的DRONE_RPC_SECRET
記錄后點擊完成即可
接著在服務(wù)器中輸入
openssl rand -hex 16
生產(chǎn)一個密鑰,記錄后寫到下方配置文件的DRONE_RPC_SECRET中
drone 服務(wù)器的 docker-compose.yml
配置文件如下:
version: "3"
services:
drone:
image: drone/drone:2
container_name: drone
environment:
- DRONE_GITEA_SERVER=http://123.45.54.123:3002
- DRONE_GITEA_CLIENT_ID=客戶端ID
- DRONE_GITEA_CLIENT_SECRET=客戶端密鑰
- DRONE_RPC_SECRET=生成的密鑰
- DRONE_SERVER_HOST=123.45.54.123:3991
- DRONE_SERVER_PROTO=http
- DRONE_USER_CREATE=username:Gitea,admin:true # 開啟管理員賬戶
restart: always
volumes:
- ./drone:/data
ports:
- 3991:80
- 3992:443
其中 3002 是上一步搭建 Gitea 服務(wù)器的端口號,3991 和 3992 是新開的端口號。
編寫完成后在當(dāng)前目錄下運行 docker compose up -d
即可運行 docker 容器
Drone Runner 相當(dāng)于 Worker ,用于執(zhí)行任務(wù)
drone runner的 docker-compose.yml 配置文件如下:
DRONE_RUNNER_NAME是隨便起的,3993 同樣是新開的端口
version: "3"
services:
runner:
image: drone/drone-runner-docker:1
container_name: runner
environment:
- DRONE_RPC_PROTO=http
- DRONE_RPC_HOST=123.45.54.123:3991 # Drone服務(wù)器的地址
- DRONE_RPC_SECRET=生成的密鑰,應(yīng)與Drone服務(wù)器的一致
- DRONE_RUNNER_CAPACITY=2
- DRONE_RUNNER_NAME=my-first-runner
restart: always
volumes:
- /var/run/docker.sock:/var/run/docker.sock
ports:
- 3993:3000
同樣編寫完成后在當(dāng)前目錄下運行 docker compose up -d
即可運行 docker 容器
一定一定一定要注意不要亂加 ‘/’ ,不亂寫 ‘http://’,不然可能踩坑,按照上方配置文件作為模板改寫即可
至此,環(huán)境搭建完成,接下來用編寫項目進行測試
項目測試
在代碼生成器項目根目錄下添加以下三個配置文件
.drone.yml
kind: pipeline # 定義對象類型,還有secret和signature兩種類型
type: docker # 定義流水線類型,還有kubernetes、exec、ssh等類型
name: test_drone # 定義流水線名稱
steps: # 定義流水線執(zhí)行步驟,這些步驟將順序執(zhí)行
- name: build-jar # 流水線名稱
image: maven:3.8.5-openjdk-8 # 定義創(chuàng)建容器的Docker鏡像
volumes: # 將容器內(nèi)目錄掛載到宿主機,倉庫需要開啟Trusted設(shè)置
- name: maven-cache
path: /home/Gettler/.m2 # 將maven下載依賴的目錄掛載出來,防止重復(fù)下載
- name: maven-build
path: /app/build/generator # 將應(yīng)用打包好的Jar和執(zhí)行腳本掛載出來
commands:
- $MAVEN_HOME/bin/mvn -v
- $MAVEN_HOME/bin/mvn clean package -DskipTests=true
# 將打包后的jar包,拷貝到 /root/testDrone 目錄
- cp target/*.jar /app/build/generator
- cp Dockerfile /app/build/generator
- cp run.sh /app/build/generator
- name: build-docker # 流水線名稱
image: plugins/docker
volumes: # 將容器內(nèi)目錄掛載到宿主機,倉庫需要開啟Trusted設(shè)置
- name: maven-build
path: /app/build/generator # 將應(yīng)用打包好的Jar和執(zhí)行腳本掛載出來
- name: docker
path: /var/run/docker.sock # 掛載宿主機的docker
settings:
dockerfile: /app/build/generator/Dockerfile
commands:
- cd /app/build/generator
- chmod +x run.sh
- sh run.sh
- docker ps
volumes: # 定義流水線掛載目錄,用于共享數(shù)據(jù)
- name: maven-build
host:
path: /app/build/generator #jar包目錄可以修改從宿主機中掛載的目錄
- name: maven-cache
host:
path: /home/Gettler/docker/maven/cache
- name: docker
host:
path: /var/run/docker.sock
Dockerfile
#指定基礎(chǔ)鏡像(一般指定程序所依賴的環(huán)境)
#本例子是構(gòu)建SpringBoot所以我指定的jdk環(huán)境變量
FROM openjdk:8
#將./hello-world.jar添加到容器的/opt目錄中
COPY ./*.jar /opt
#指定dockerfile的命令在哪個目錄下執(zhí)行
WORKDIR /opt
#指定容器和外界交互的端口
EXPOSE 80
#容器運行后執(zhí)行的命令(該命令在WORKDIR指定的工作目錄下執(zhí)行)
#注意:多個CMD指令只有最后一個會生效
CMD java -jar *.jar
#在構(gòu)建鏡像時執(zhí)行的命令
#我這邊用它來打印java的環(huán)境變量
RUN java -version
#添加該鏡像的元數(shù)據(jù)
LABEL version="1.0" description="代碼生成器服務(wù)" by="Gettler"
run.sh
#!/bin/sh
# 定義應(yīng)用組名
group_name='power'
# 定義應(yīng)用名稱
app_name='generator'
# 定義應(yīng)用版本
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 4001:80 --name ${app_name} \
-e TZ="Asia/Shanghai" \
-v /etc/localtime:/etc/localtime \
-d ${group_name}/${app_name}:${app_version}
echo '----start container----'
然后新建gitea倉庫,將其push到遠程倉庫后,然后以Gitea用戶(管理員身份)進入Drone服務(wù) http://123.45.54.123:3991/,點擊continue即可關(guān)聯(lián)到gitea服務(wù)授權(quán)登錄。
登錄后點擊右上角SYNC按鈕同步倉庫,看到剛剛新建的倉庫后點進去,激活,然后點擊Setting頁面,勾選trust
勾選trust后,每次代碼push都可以自動進行版本發(fā)布
也可以手動發(fā)布,點擊右上角new build按鈕,選擇代碼分支,即可進行部署。
點擊對應(yīng)build可以查看日志,出現(xiàn)綠色對勾后即為發(fā)布成功
再附上一手前端項目配置
Vue 項目配置
.drone.yml
kind: pipeline # 定義一個管道
type: docker # 當(dāng)前管道的類型
name: test # 當(dāng)前管道的名稱
steps: # 定義管道的執(zhí)行步驟
- name: deploy # 步驟名稱
image: node:18 # 當(dāng)前步驟使用的鏡像,我是node18,也可以修改其他鏡像
settings:
mirror: # Docker鏡像加速地址
depends_on: [clone] # 依賴的步驟
volumes: # 掛載數(shù)據(jù)卷(此為容器內(nèi)的目錄)
- name: node_modules # 數(shù)據(jù)卷名稱
path: /drone/src/node_modules # 容器內(nèi)目錄 絕對路徑
- name: deploy_path
path: /app/build/front
commands: # 當(dāng)前步驟執(zhí)行的命令
- pwd # 查看當(dāng)前目錄
- npm config set registry https://registry.npm.taobao.org # 切換淘寶鏡像
- yarn # 安裝node_modules包(我的項目用yarn,看項目也可使用其他命令)
- yarn build # 執(zhí)行編譯(我的項目用yarn,看項目也可使用其他命令)
- cp -r ./dist/* /app/build/front/html/
- cp Dockerfile /app/build/front
- cp default.conf /app/build/front
- cp run.sh /app/build/front
- name: build # 流水線名稱
image: plugins/docker
depends_on: [deploy]
volumes: # 將容器內(nèi)目錄掛載到宿主機,倉庫需要開啟Trusted設(shè)置
- name: deploy_path
path: /app/build/front # 將應(yīng)用打包好的Jar和執(zhí)行腳本掛載出來
- name: docker
path: /var/run/docker.sock # 掛載宿主機的docker
settings:
mirror: # Docker鏡像加速地址
dockerfile: /app/build/front/Dockerfile
commands:
- cd /app/build/front
- chmod +x run.sh
- sh run.sh
- docker ps
volumes: # 聲明數(shù)據(jù)卷(此為服務(wù)器中的實際目錄)
- name: node_modules # 數(shù)據(jù)卷名稱
host:
path: /home/Gettler/docker/node_modules
- name: deploy_path
host:
path: /app/build/front
- name: docker
host:
path: /var/run/docker.sock
記得修改Docker鏡像加速地址!
Dockerfile
# 設(shè)置基礎(chǔ)鏡像
FROM nginx:latest
# 將dist文件中的內(nèi)容復(fù)制到 /usr/share/nginx/html/ 這個目錄下面
COPY html /usr/share/nginx/html
# 用本地的 default.conf 配置來替換nginx鏡像里的默認配置
COPY default.conf /etc/nginx/conf.d/default.conf
EXPOSE 80
LABEL version="1.0" description="前端服務(wù)" by="Gettler"
run.sh
#!/bin/sh
# 定義應(yīng)用組名
group_name='power'
# 定義應(yīng)用名稱
app_name='front'
# 定義應(yīng)用版本
app_version='latest'
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 3995:80 --name ${app_name} \
-e TZ="Asia/Shanghai" \
-v /etc/localtime:/etc/localtime \
-d ${group_name}/${app_name}:${app_version}
echo '----start container----'
文章來源:http://www.zghlxwxcb.cn/news/detail-817734.html
若要修改 docker-compose.yml
文件,修改后再次輸入 docker compose up -d
即可重新加載有變化的容器,過程中會刪除之前的容器。而 docker compose up -d --no-create
命令可以在存在yaml
文件中描述的容器的情況下啟動容器,不會重建容器。文章來源地址http://www.zghlxwxcb.cn/news/detail-817734.html
到了這里,關(guān)于Docker 配置 Gitea + Drone 搭建 CI/CD 平臺的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!