包阅导读总结
1.
关键词:GitHub Actions、CI/CD、流水线、部署、镜像仓库
2.
总结:本文主要介绍通过 GitHub Actions 实现项目的 CI/CD,包括 Actions 简介、前置动作、配置 secrets and variables、创建 workflows 等,详细讲解了相关步骤,最终能在提交 main 分支代码后自动执行构建和部署操作。
3.
主要内容:
– 介绍通过 GitHub Actions 快速构建和部署项目
– Actions 简介
– 是持续集成和持续交付平台,可自动执行生成、测试和部署管道,还能在其他事件时运行工作流程,提供虚拟机或自托管运行器。
– 前置动作
– 准备服务器,申请阿里云镜像仓库服务,能访问 GitHub,新建 Java SpringBoot 项目推送到 GitHub 仓库,配置 secrets and variables。
– 配置 secrets and variables
– 列举使用的一些 secrets 如镜像仓库地址、密码、账号等。
– 创建 workflows
– 点击 Actions–New workflows,在项目目录创建文件夹。
– 编写相关文件
– 编写 Dockerfile,存放位置特定。
– 编写发布流水线配置,包括设置触发条件、执行步骤等。
– 结语
– 总结操作流程的便利性,提供 GitHub Actions 官方地址。
思维导图:
文章地址:https://juejin.cn/post/7395862719913574427
文章来源:juejin.cn
作者:初夏的阳光丶
发布时间:2024/7/27 8:19
语言:中文
总字数:1993字
预计阅读时间:8分钟
评分:84分
标签:GitHub Actions,CI/CD,DevOps,Java SpringBoot,Docker
以下为原文内容
本内容来源于用户推荐转载,旨在分享知识与观点,如有侵权请联系删除 联系邮箱 media@ilingban.com
本文主要讲解通过github的actions来对我们项目进行ci/cd
一、actions简介
System.out.println("原文地址:https://juejin.cn/post/7395862719913574427");
GitHub Actions 是一种持续集成和持续交付 (CI/CD) 平台,可用于自动执行生成、测试和部署管道。 您可以创建工作流程来构建和测试存储库的每个拉取请求,或将合并的拉取请求部署到生产环境。
GitHub Actions 不仅仅是 DevOps,还允许您在存储库中发生其他事件时运行工作流程。 例如,您可以运行工作流程,以便在有人在您的存储库中创建新问题时自动添加相应的标签。
GitHub 提供 Linux、Windows 和 macOS 虚拟机来运行工作流程,或者您可以在自己的数据中心或云基础架构中托管自己的自托管运行器。
下面是一个简单的实例和简介
name: learn-github-actionsrun-name: ${{ github.actor }} is learning GitHub Actionson: [push]jobs: check-bats-version: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: node-version: '20' - run: npm install -g bats - run: bats -v
二、前置动作
- 准备一台服务器
- 申请阿里云镜像仓库服务,申请地址:https://cr.console.aliyun.com/
- 能够正常访问github
- 新建一个Java SpringBoot项目推送到github代码仓库中
- 代码仓库中配置对应的secrets and variables,下一步会教大家配置
三、配置secrets and variables
具体配置位置如下图我这边使用的实例用了如下的一些secrets
- DOCKER_LOGIN_URL 阿里云镜像仓库地址
- DOCKER_PASSWORD 阿里云镜像仓库密码
- DOCKER_USERNAME 阿里云镜像仓库账号
- SERVER_IP 服务器Ip
- SERVER_USER_NAME 服务器名称
- SSH_PASSWORD 服务器密码
四、创建workflows
点击Actions–New workflows 它会在项目更目录默认创建一个文件夹.github\workflows
选择Docker image
五、编写Dockerfile
因为主要是用来做一个实例,所以我这边编写的Dockerfile就比较简单,如果大家有自己的需求,劳请自行修改Dockerfile存放位置为:.github\workflows 同docker-image.yml同级
FROM openjdk:17WORKDIR /appCOPY spring-boot-build-3.3.2.jar /app/spring-boot-build-3.3.2.jarEXPOSE 8080ENTRYPOINT ["java","-jar","/app/spring-boot-build-3.3.2.jar"]
六、编写发布流水线配置
name: Docker-Image-CIon: push: branches: [ "main" ] pull_request: branches: [ "main" ]jobs: build: runs-on: ubuntu-latest steps: - name: Check out the code uses: actions/checkout@v2 - name: Set up QEMU uses: docker/setup-qemu-action@v1 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v1 - name: Set up JDK 17 uses: actions/setup-java@v3 with: java-version: '17' distribution: 'temurin' - name: Build with Maven run: mvn clean package - name: Move JAR to .github/workflows run: | mkdir -p .github/workflows mv target/*.jar .github/workflows/ - name: Log in to Aliyun Docker Registry env: ALIYUN_DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }} ALIYUN_DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }} ALIYUN_DOCKER_URL: ${{ secrets.DOCKER_LOGIN_URL }} run: | echo "${ALIYUN_DOCKER_PASSWORD}" | docker login "${ALIYUN_DOCKER_URL}" --username "${ALIYUN_DOCKER_USERNAME}" --password-stdin - name: Remove old Docker images run: | docker images --format '{{.Repository}}:{{.Tag}}' | grep 'registry.cn-hangzhou.aliyuncs.com/benxiong_default/public' | xargs -I {} docker rmi -f {} - name: Build Docker image run: docker build -f .github/workflows/Dockerfile -t springbuild .github/workflows/ - name: Tag Docker image run: docker tag springbuild 阿里云镜像仓库tag:latest - name: Push Docker image to Aliyun registry run: docker push 阿里云镜像仓库地址:latest - name: Set up SSH using username and password env: SSH_PASSWORD: ${{ secrets.SSH_PASSWORD }} SSH_USER: ${{ secrets.SERVER_USER_NAME }} SERVER_IP: ${{ secrets.SERVER_IP }} run: | sudo apt-get update sudo apt-get install -y sshpass sshpass -p "${SSH_PASSWORD}" ssh -o StrictHostKeyChecking=no ${SSH_USER}@${SERVER_IP} << 'EOF' # Stop and remove old container sudo docker ps -q -f "name=容器名称" | xargs -r sudo docker stop sudo docker ps -aq -f "name=容器名称" | xargs -r sudo docker rm sudo docker image prune -a -f sudo docker rmi -f 镜像名称 sudo docker pull 镜像名称 sudo docker run -d --name 容器名称--restart unless-stopped -p 9000:9000 镜像名称:latest EOF
七、结语
通过以上的一套操作下来,我们就可以在提交代码main分支后,通过workflows就能自动的去帮助我们执行构建和部署的操作了,非常方便我们开发者,也不需要我们再去部署jenkins,也不需要学习jenkins的pipeline语法了,同时也不得不说一句,github nb!!!
gthub actions官方地址:docs.github.com/zh/actions/…
如有哪里讲得不是很明白或是有错误,欢迎指正如您喜欢的话不妨点个赞收藏一下吧🙂