10分钟搭建GitLab仓库及Drone自动化部署
互联网公司成立后 软件团队首要做的便是搭建基础设施 运维部门搭建 代码仓库 和 自动化集成部署 便是伟大的第一步。
在这里 花费10分钟 时间 从0到1 搭建完整的 [GitLab仓库,Drone自动化部署Java服务] 轻量化CI/CD持续集成部署功能链路。
一.GitLab搭建
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
| # 创建公共网络 docker network create cicd_network
# 下载GitLab镜像 docker pull gitlab/gitlab-ce
# 运行GitLab服务 docker run --network cicd_network -d -p 443:443 -p 80:80 -p 22:22 --name gitlab --restart always -v /home/gitlab/config:/home/gitlab/config -v /home/gitlab/logs:/home/gitlab/logs -v /home/gitlab/data:/home/gitlab/data gitlab/gitlab-ce
# 进入容器->查看管理员密码 docker exec -it gitlab /bin/bash cat /etc/gitlab/initial_root_password
# 管理员账号: root # 管理员密码: Mi4FZWvbeIghqMALXGZd7IkxmIfHNrmLZpnhab8Daf8=
# 进入容器->修改配置[首次部署需等待容器内安装完成后再修改,避免产生其他问题] docker exec -it gitlab /bin/bash vi /etc/gitlab/gitlab.rb
external_url='http://192.168.0.1' gitlab_rails['gitlab_ssh_host'] = '192.168.0.1' gitlab_rails['gitlab_shell_ssh_port'] = 22
# GitLab外部网络设置Allow【Admin->Settings->Network->Outbound requests】
# 重启服务 docker restart gitlab
# 登录GitLab http://192.168.0.1/users/sign_in
|
二.Java项目初始化
1 2 3 4 5 6 7 8 9 10 11
| # GitLab创建应用【Admin->Applications->add New application】 RedirectURI= http://192.168.0.1:2080/login ApplicationID= 1e50d47b793a8458a62b033a2d436e2b62be2df2518218fa130b432794635c74 Secret= gloas-bf787c02e057df6c42f772547ae3f8a3c153b6213c025450685219eeeb07448d
# 生成本地 SSH-Key ssh-keygen -t rsa -b 4096 -C "lixiang@tron.com" # SSH-Key 添加至GitLab【点击头像->Preferences->SSH Keys->add New key】
# Hello-World Java项目初始化及代码提交 下载地址 = https://lixiangpro.oss-cn-hangzhou.aliyuncs.com/resource/hello-world.rar
|
三.部署Drone
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| # 拉取镜像 docker pull drone/drone docker pull drone/drone-runner-docker
# 运行 Drone-server docker run --network cicd_network --volume=/var/lib/drone:/data --env=DRONE_AGENTS_ENABLED=true --env=DRONE_GITLAB_SERVER=http://192.168.0.1 --env=DRONE_GITLAB_CLIENT_ID=0b7a89352763fffc7a53ff5ebc5a49472376f8f04075d24a3d43354049915bac --env=DRONE_GITLAB_CLIENT_SECRET=gloas-932f99b89bd76ae921e0b994ac8ec47ca764d660ed86d8e7e913958749ad2b1e --env=DRONE_SERVER_HOST=192.168.0.1:2080 --env=DRONE_SERVER_PROTO=http --env=DRONE_TLS_AUTOCERT=false --env=DRONE_LOGS_DEBUG=true -e DRONE_RPC_SECRET=033a2d436e2b62be2df2518218fa130 --env=DRONE_USER_CREATE=username:root,admin:true -e TZ="Asia/Shanghai" --publish=2080:80 --publish=2443:443 --restart=always --detach=true --name=drone-server drone/drone:2 # 运行 Drone-runner docker run --network cicd_network -d -v /var/run/docker.sock:/var/run/docker.sock -e DRONE_RPC_PROTO=http -e DRONE_RPC_HOST=192.168.0.1:2080 -e DRONE_RPC_SECRET=033a2d436e2b62be2df2518218fa130 -e DRONE_RUNNER_CAPACITY=2 -e DRONE_RUNNER_NAME=drone-runner -e TZ="Asia/Shanghai" -p 3000:3000 --restart always --name drone-runner drone/drone-runner-docker
# Drone后台 http://192.168.0.1:2080 修改配置【项目根目录/Settings/Project Settings】调整为Trust等
# GitLab项目配置WEBHOOK 进入GitLab后台【项目根目录->Settings->Webhooks】http://192.168.0.1 检查确认WebHook地址URL = http://192.168.0.1:2080/hook
# 代码master分支提交更改 验收自动化持续集成部署
|
DevOps流程及工具
使用效果
克隆代码:
打包JAR:
成功部署:
Hello World:
附加:Drone配置
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
| kind: pipeline type: docker name: Hello_World clone: disable: true #禁用默认克隆 trigger: branch: - master #仅在 master分支的代码提交,才触发部署 steps: - name: 克隆 image: alpine/git pull: if-not-exists commands: - git version - git clone http://192.168.0.1/root/hello-world.git - cd hello-world && git checkout master
- name: 打包 image: caoofduty/maven_jdk_17:v3 # maven:3.6.3-openjdk-17 pull: if-not-exists volumes: # 挂载宿主机的目录 - name: maven-build path: /data/build commands: - cd hello-world - mvn -Dmaven.test.skip=true -Dmaven.wagon.http.ssl.insecure=true -Dmaven.wagon.http.ssl.allowall=true package - mkdir -p /data/build - cp target/*.jar /data/build - cp run.sh /data/build - cp Dockerfile /data/build
- name: 构建镜像 image: plugins/docker volumes: - name: maven-build path: /data/build - name: docker path: /var/run/docker.sock # 挂载宿主机的docker settings: dockerfile: /data/build/Dockerfile commands: - cd /data/build - docker --version - docker build -t hello_world:latest -f /data/build/Dockerfile . - docker images
- name: 发布 image: plugins/docker volumes: - name: maven-build path: /data/build - name: docker path: /var/run/docker.sock # 挂载宿主机的docker settings: dockerfile: /data/build/Dockerfile commands: - cd /data/build - docker --version - docker images - docker run -d --name hello_world -p 8080:8080 -e TZ="Asia/Shanghai" hello_world:latest
- name: 成功了,庆祝~ image: alpine commands: - echo hello world
volumes: - name: maven-build host: path: /data/build # 从宿主机中挂载的目录 - name: docker host: path: /var/run/docker.sock # - name: maven-cache # host: # path: /data/cache
|
附加:DockerFile
1 2 3 4 5 6 7
| FROM openjdk:17
ADD hello-world-0.0.1-SNAPSHOT.jar /home/app.jar
EXPOSE 8080
CMD ["java", "-jar", "/home/app.jar"]
|