基于Gogs,Drone以及drone-runner-docker的自动化部署 (CI/CD)

原创
10/08 19:20
阅读数 153
  • Gogs需要依赖MySQL
docker run --name mysql --restart=always -p 3306:3306 --ip 172.171.0.5 --net docker-mynet -v /soft/docker/database/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=password -d mysql
#记得修改MySQL用户访问权限
  • 创建Gogs
docker run -p 10022:22 -p 3000:3000 --name=gogs --net docker-mynet --ip 172.171.0.11 --restart=always -e TZ="Asia/Shanghai" -v /soft/docker/gogs:/data -d gogs/gogs
#首次打开会提示输入数据库连接相关信息,需提前创建好数据库等
#如果安装完毕后,将容器重启后,会发现再次访问ip:3000会无法访问(不一定会遇到)
#进入gogs的宿主机挂载目录/soft/docker/gogs/gogs/conf 修改app.ini,再次解决即可解决
  • Drone CI创建配置
docker run -v /soft/docker/drone:/data --net docker-mynet --ip 172.171.0.12 -e DRONE_AGENTS_ENABLED=true -e DRONE_GOGS_SERVER=http://ip:3000 -e DRONE_RPC_SECRET=dronerpc666 -e DRONE_SERVER_HOST=ip:3080 -e DRONE_SERVER_PROTO=http -e DRONE_USER_CREATE=username:demon471,admin:true -e TZ="Asia/Shanghai" -p 3080:80 --restart=always --detach=true --name=drone drone/drone
#-e DRONE_GOGS_SERVER=http://ip:3000 此处为gogs的访问地址
#-e DRONE_RPC_SECRET=dronerpc666 dronerpc666 非固定但是部署drone-runner-docker 需要一个参数一致
#-e DRONE_SERVER_HOST=ip:3080 配置drone的访问地址
#-e DRONE_USER_CREATE=username:demon471,admin:true 设置管理员账号最好和gogs的管理员一致(也可以自作更改)
  • 登录Drone进行配置
1. 点击SYNC 同步仓库
2. 点击同步的仓库,切换到settings 点击activate repository
3. 选择 Trusted 后保存修改之后可以在gogs中看到自动生成web钩子,点击测试推送,功能正常
  • drone-runner-docker的创建配置
docker run -d -v /var/run/docker.sock:/var/run/docker.sock --net docker-mynet --ip 172.171.0.13 -e DRONE_RPC_PROTO=http -e DRONE_RPC_HOST=ip:3080 -e DRONE_RPC_SECRET=dronerpc666 -e DRONE_RUNNER_CAPACITY=2 -e DRONE_RUNNER_NAME=runner-docker -e TZ="Asia/Shanghai" -p 3000:3000 --restart always --name runner-docker drone/drone-runner-docker
#-e DRONE_RPC_HOST=ip:3080 drone的访问地址
#-e DRONE_RPC_PROTO=http 有证书可以是https
#-e DRONE_RPC_SECRET=dronerpc666 需要和drone的配置一样
  • 安装Argo CD
官方下载Argo CD:
1.1. gitee.com/mirrors/ArgoProject/
1.2. https://github.com/argoproj/argo-cd
2. 下载所需版本的manifests/install.yaml文件
3. 新建命名空间: kubectl create ns argocd
4. 运行安装脚本: kubectl apply -f install.yml -n argocd
5. 查看访问端口: kubectl get svc -n argocd
6. 查看登录密码: kubectl -n argocd get  secret argocd-initial-admin-secret -o jsonpath="{.data.password}"|base64 -d
7. 登录Argocd 点击 Settings/Repositories/Connect repo using HTTPS添加代码仓库
8. 代码仓库添加成功之后点击new app 新建应用即可
  • CI/CD所需配置文件模版
  1. .drone.yml
kind: pipeline
type: docker
name: filesystem-drone
steps:
  - name: package
    image: maven:3-jdk-8
    volumes:
      - name: maven-cache
        path: /root/.m2
    commands:
      - mvn clean package
      - cp -r target/filesystem.jar ./
  - name: build-start
    image: plugins/docker
    settings:
      username: 
      password: 
      repo: 
      registry: 
      insecure: true
      dockerfile: ./Dockerfile
      tags: v0.1
volumes:
  - name: maven-build
    host:
      path: /mydata/maven/build
  - name: maven-cache
    host:
      path: /mydata/maven/cache
#邮件通知
---
kind: pipeline
type: docker
name: notify
clone:
  disable: true
steps:
  - name: email
    image: drillster/drone-email
    settings:
      recipients_only: true
      recipients: 
        from_secret: email_recipients
      subject: "Drone build: [{{ build.status }}] {{ repo.name }} ({{ repo.branch }}) #{{ build.number }}"
      host: smtp.mxhichina.com
      port: 25
      from: monitor@siccs.cn
      username: 
        from_secret: email_user
      password: 
        from_secret: email_password
trigger:
  status: [success, failure]
depends_on: [filesystem-drone]
###############################
1. notify流水线中不再需要clone代码仓库;
2. image: drillster/drone-email:使用drillster/drone-email 插件(插件其实也是Docker镜像)来发送邮件;
3. recipients_only: true:只发送给指定邮件收件人,不默认发送给流水线创建人;
4. 在Drone项目设置中,添加Secrets:email_recipients、email_user 和email_password,用来保存邮件收件人、SMTP Username和SMTP Password;
5. 使用from_secret读取Drone项目设置中的Secret;
6. host为SMTP Server,port为SMTP端口,from为邮件发件人地址;
7. 可以自定义邮件标题subject,也可以使用默认标题;
8. 使用trigger来设置无论项目构建是成功还是失败,都要发邮件通知;
9. 使用depends_on来设置,在filesystem-drone流水线运行完成(无论成功还是失败)后才运行notify流水线进行邮件通知;
  1. Dockerfile
FROM java:8
MAINTAINER wangzz
WORKDIR /app
RUN mkdir /app/config && rm -f /etc/localtime && ln -sv /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone
COPY test.jar test.jar
ENV JAVA_OPTS="-server -Xmx256M -Xmn256M -XX:+HeapDumpOnOutOfMemoryError -Duser.timezone=GMT+08 --spring.config.location=/app/config/test.properties"
ENTRYPOINT ["sh", "-c", "java -jar test.jar $JAVA_OPTS "]

  1. gogs.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: msg-www-deployment
  namespace: applications-dev
spec:
  replicas: 1
  selector:
    matchLabels:
      app: msg-www-dev
  template:
    metadata:
      name: msg-www-dev
      labels:
        app: msg-www-dev
    spec:
      containers:
        - name: msg-www
          image: 
          imagePullPolicy: Always
          command: ["sh", "-c", "java $JAVA_OPTS -jar filesystem.jar"]
---
apiVersion: v1
kind: Service
metadata:
  name: msg-www-dev
  namespace: applications-dev
  labels:
    app: msg-www-dev
spec:
  type: NodePort
  ports:
    - port: 8080
      targetPort: 8080
      nodePort: 32123
  selector:
    app: msg-www-dev
展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部