赞
踩
解决 ci/cd 流程,在 推送代码到 github 时,github 的 action 能够自动构建代码并发布到镜像仓库,之后运行 docker-compose 文件,启动项目访问。
目前比较流行的 ci/cd 解决方案为:
上述两种方案:
配置 github 的 webhook 钩子,在 push 代码之后,主动去通知 jenkins,构建镜像完成项目部署;
配置 github 的 webhook 钩子,在 push 代码之后,主动去通知 jenkins,完成项目的构建和打包,之后上传镜像到 docker hub 仓库,在 github action 中调用服务器中的 docker 完成服务的部署,实现 ci/cd 自动化流程;
上述两种方案存在的缺点:
舍弃掉之前的 jenkins,由 github action 完成打包和镜像的推送,作为容器化之后的首选;
能够有效解决上述方案存在的缺点,唯一的缺点是需要在 github action 配置时多花时间。
这里介绍一些必要的组件,使用方法自己百度。
包含 Docker 和 k8s 的管理平台
repo -> settings -> Security -> Actions secrets and variables -> secrets 中设置
# This workflow will build a Java project with Maven, and cache/restore any dependencies to improve the workflow execution time # For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-java-with-maven # This workflow uses actions that are not certified by GitHub. # They are provided by a third-party and are governed by # separate terms of service, privacy policy, and support # documentation. name: Build And Deploy Docker # github action 的触发时机 on: push: # 指定分支触发 branches: - "master" # 指定路径或者文件,当此路径下的文件发生变化时,执行此 action paths: - 'index.html' # 发布 tag 时执行此 action tags: - 'v*' # 指定分支发生 pr 操作时触发 pull_request: branches: [ "master" ] # env 环境变量,为下面的 action 脚本提供 env: # Use docker.io for Docker Hub if empty REGISTRY: ${{ secrets.REGISTRY }} # github.repository as <account>/<repo> IMAGE_NAME: ${{ github.repository }} jobs: build: runs-on: ubuntu-latest steps: # 提供 docker 元数据,构建 docker images tag 时使用 - name: Extract Docker metadata id: meta uses: docker/metadata-action@v4 with: images: ${{ env.IMAGE_NAME }} tags: | # set latest tag for default branch type=raw,value=latest,enable={{is_default_branch}} # tag event type=ref,enable=true,priority=600,prefix=,suffix=,event=tag # 构建镜像 使用 docker/Build-And-push@v5 插件有问题 - uses: actions/checkout@v2 - name: Build Docker Image run: | docker build -t ${{ env.REGISTRY }}/${{ steps.meta.outputs.tags }} -f ./docker/nginx/Dockerfile . - name: Push Docker Image run: | docker login --username=${{ secrets.DOCKER_USERNAME }} --password ${{ secrets.DOCKER_PASSWORD }} ${{ env.REGISTRY }} docker push ${{ env.REGISTRY }}/${{ steps.meta.outputs.tags }} # 运行 docker 服务 # 另外一种选择是通过 scp 将文件传到指定服务器,完成 docker-compose 启动 - name: Deploy Docker App uses: appleboy/ssh-action@master env: TZ: Asia/Shanghai with: host: ${{ secrets.HOST }} username: ${{ secrets.HOST_USERNAME }} key: ${{ secrets.HOST_SSHKEY }} port: ${{ secrets.PORT }} script: | # 获取 docker-compose 文件 wget https://raw.githubusercontent.com/${{ env.IMAGE_NAME }}/master/docker/docker-compose.yml ls cat docker-compose.yml docker-compose down -v docker-compose up -d
之上的一些 action 插件都可是使用其他的代替
- https://github.com/aliyun/acr-login
- https://docs.github.com/zh/actions/publishing-packages/publishing-docker-images#publishing-images-to-github-packages
- …
示例仓库:https://github.com/yuluo-yx/uipaas-ci-cd-test
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。