<-

Hands on CI/CD with GitHub Actions

M:

一位数据工程师寻求指导,设置 CI/CD 管道以便在 Windows Subsystem for Linux (WSL) 上开发任务运行 Spark

GPT-4o-mini:

安装与前期准备

1. 安装 WSL (Windows Subsystem for Linux):

打开 PowerShell 作为管理员,运行以下命令:

wsl --install

重启计算机以完成安装。

2. 选择并安装 Linux 发行版:

在 Microsoft Store 中选择并安装 Ubuntu 或其他你喜欢的发行版。

3. 更新系统:

打开 WSL 终端,运行以下命令以更新软件包:

sudo apt update && sudo apt upgrade -y

4. 安装 Git:

在 WSL 终端中运行:

sudo apt install git -y

5. 安装 Python 和 pip:

sudo apt install python3 python3-pip -y

6. 安装 Apache Spark:

wget https://downloads.apache.org/spark/spark-3.5.3/spark-3.5.3-bin-hadoop3.tgz

解压并设置环境变量:

tar -xvzf spark-3.5.3-bin-hadoop3.tgz
echo 'export SPARK_HOME=~/spark-3.5.3-bin-hadoop3' >> ~/.bashrc
echo 'export PATH=$PATH:$SPARK_HOME/bin' >> ~/.bashrc
source ~/.bashrc

代码部署与 CI/CD 设置

1. 创建 GitHub 仓库:

登录 GitHub,创建一个新的仓库用于存放你的 Spark 代码和 Airflow DAG。

2. 初始化本地 Git 仓库:

git init

3. 创建输入数据文件:

your_project 文件夹中创建一个名为 input_data.csv 的文件:

category,value
A,10
A,20
B,30
B,40

4. 编写代码:

vi process_data.py
# process_data.py

from pyspark.sql import SparkSession

# 创建 Spark 会话
spark = SparkSession.builder \
    .appName("Data Processing") \
    .getOrCreate()

# 读取 CSV 文件
input_file = "input_data.csv"
df = spark.read.csv(input_file, header=True, inferSchema=True)

# 数据处理:计算每个类别的平均值
result_df = df.groupBy("category").agg({"value": "avg"})

# 将结果写入新的 CSV 文件
output_file = "output_data.csv"
result_df.write.csv(output_file, header=True)

# 停止 Spark 会话
spark.stop()

4. 设置 CI/CD:

使用 GitHub Actions 创建一个工作流文件 .github/workflows/ci.yml

name: CI/CD Pipeline

on:
  push:
    branches:
      - master

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v2

      - name: Set up Python
        uses: actions/setup-python@v2
        with:
          python-version: '3.x'

      - name: Install dependencies
        run: |
          pip install apache-airflow
          pip install pyspark

      - name: Run Spark job
        run: |
          spark-submit process_data.py

      - name: Upload output file
        uses: actions/upload-artifact@v3  # 更新为 v3
        with:
          name: output-data
          path: output_data.csv

5. 提交代码到 GitHub:

添加远程仓库:

git remote add origin https://github.com/thekingofcool/hands_on_cicd.git

提交代码:

git add .
git commit -m "Initial commit"
git push -u origin master

Spark 程序的触发机制和运行环境

触发机制

在这个设置中,Spark 程序的触发机制是通过 GitHub Actions 的工作流配置实现的。每当你将代码推送到 GitHub 仓库的 master 分支时,GitHub Actions 会自动执行定义的工作流,运行 Spark 脚本。

运行环境

GitHub Actions 在 GitHub 的云环境中运行。具体来说,工作流在 GitHub 提供的虚拟机(称为 runner)上执行。在这个例子中,我们使用的是 ubuntu-latest 作为运行环境。

这意味着 Spark 程序将在 GitHub 的服务器上运行,而不是在你的本地机器上。

运行环境既然在 Github 服务器上,我在哪里去看输出的结果文件?

GPT-4o-mini:

在 GitHub Actions 的运行环境中,输出的结果文件不会直接保存在你的 GitHub 仓库中,因为它们是在 GitHub 的虚拟机上生成的。要查看输出结果,你可以采取以下几种方法:

结果查询

1. 使用 GitHub Actions 的日志

访问 GitHub 仓库:

  • 打开你的 GitHub 仓库页面。

查看 Actions 选项卡:

  • 点击页面顶部的 “Actions” 选项卡。这将显示所有的工作流运行记录。

选择最近的工作流运行:

  • 找到最近的工作流运行(通常是你刚刚推送代码后触发的),点击它。

查看日志:

  • 在工作流运行页面中,你可以看到每个步骤的执行状态。点击 “Run Spark job” 步骤,可以查看该步骤的详细日志输出。
  • 如果 Spark 脚本中有打印输出(例如使用 print 函数),你可以在这里看到这些输出。

2. 下载输出文件

运行完成后:

  • 在 GitHub Actions 的工作流运行页面中,找到 “Artifacts” 部分。

下载文件:

  • 点击 “output-data” 链接,下载生成的 output_data.csv 文件。

3. 将结果文件上传到 GitHub

如果你希望将生成的结果文件(如 output_data.csv)保存到 GitHub 仓库中,可以在 GitHub Actions 工作流中添加一个步骤,将文件上传到仓库。


M:

在企业级生产环境中常用的 CI/CD 工具有哪些?给我详细介绍一下它们各自的使用场景和用法。

GPT-4o-mini:

在企业级生产环境中,CI/CD(持续集成/持续交付)工具是确保软件开发流程高效、可靠和自动化的重要组成部分。以下是一些常用的 CI/CD 工具及其使用场景 和用法的详细介绍:

1. Jenkins

使用场景

  • Jenkins 是一个开源的自动化服务器,广泛用于构建、测试和部署软件。
  • 适合需要高度自定义的 CI/CD 流程的项目。

用法

  • 安装: 可以在本地服务器或云环境中安装 Jenkins。
  • 创建任务: 使用 Jenkins 的 Web 界面创建构建任务,配置源代码管理(如 Git)和构建触发器。
  • 插件: Jenkins 拥有丰富的插件生态系统,可以集成各种工具(如 Docker、Kubernetes、Slack 等)。
  • 流水线: 使用 Jenkins Pipeline DSL 定义复杂的 CI/CD 流程。

2. GitLab CI/CD

使用场景

  • GitLab CI/CD 是 GitLab 提供的内置 CI/CD 功能,适合使用 GitLab 作为代码托管平台的团队。
  • 适合需要与 GitLab 紧密集成的项目。

用法

  • 配置文件: 在项目根目录下创建 .gitlab-ci.yml 文件,定义 CI/CD 流程。
  • 阶段和作业: 可以定义多个阶段(如 build、test、deploy)和作业,GitLab 会根据配置自动执行。
  • 环境: 支持多种环境的部署,可以在不同的环境中运行作业。

3. CircleCI

使用场景

  • CircleCI 是一个云端 CI/CD 工具,适合需要快速构建和部署的项目。
  • 适合使用 Docker 的项目,支持容器化的构建和测试。

用法

  • 配置文件: 在项目根目录下创建 .circleci/config.yml 文件,定义工作流和作业。
  • 并行执行: 支持并行执行作业,提高构建速度。
  • 集成: 可以与 GitHub、Bitbucket 等代码托管平台集成。

4. Travis CI

使用场景

  • Travis CI 是一个基于云的 CI/CD 工具,适合开源项目和小型团队。
  • 适合与 GitHub 集成的项目。

用法

  • 配置文件: 在项目根目录下创建 .travis.yml 文件,定义构建和测试流程。
  • 自动构建: 每次推送代码到 GitHub 时,Travis CI 会自动触发构建。
  • 多语言支持: 支持多种编程语言和环境的构建。

5. GitHub Actions

使用场景

  • GitHub Actions 是 GitHub 提供的 CI/CD 功能,适合使用 GitHub 作为代码托管平台的项目。
  • 适合需要灵活工作流和自动化任务的项目。

用法

  • 工作流文件: 在项目中创建 .github/workflows 文件夹,定义工作流文件(如 ci.yml)。
  • 触发器: 可以根据事件(如 push、pull request)触发工作流。
  • 步骤: 定义多个步骤,支持多种操作(如构建、测试、部署)。

6. Azure DevOps

使用场景

  • Azure DevOps 是微软提供的完整 DevOps 工具链,适合大型企业和复杂项目。
  • 适合需要与 Azure 云服务集成的项目。

用法

  • 管道: 使用 Azure Pipelines 定义 CI/CD 流程,可以通过 YAML 文件或图形界面配置。
  • 集成: 与 Azure 资源(如 Azure Kubernetes Service、Azure Functions)紧密集成。
  • 多平台支持: 支持多种编程语言和平台的构建和部署。

7. Bamboo

使用场景

  • Bamboo 是 Atlassian 提供的 CI/CD 工具,适合使用 Atlassian 生态系统(如 Jira、Bitbucket)的团队。
  • 适合需要与其他 Atlassian 工具集成的项目。

用法

  • 构建计划: 在 Bamboo 中创建构建计划,配置源代码管理和构建任务。
  • 部署项目: 可以定义多个部署项目,支持多种环境的部署。
  • 集成: 与 Jira 和 Bitbucket 紧密集成,提供可视化的构建和部署状态。

总结

选择合适的 CI/CD 工具取决于团队的需求、项目的复杂性以及现有的技术栈。每种工具都有其独特的优势和适用场景,了解这些工具的特点可以帮助你做出更好 的选择。

如果你有任何问题或需要进一步的解释,请随时问我!


M:

关于 Jenkins,你能带我 Hello World 一下吗?

GPT-4o-mini:

当然可以!下面是一个简单的 Jenkins “Hello World” 示例,帮助你了解如何设置 Jenkins 并创建一个基本的构建任务。

安装 Jenkins

在本地安装 Jenkins

  1. 安装 Java:
    • Jenkins 需要 Java 运行环境。你可以使用以下命令安装 OpenJDK:
      sudo apt update
      sudo apt install openjdk-11-jdk -y
      
  2. 添加 Jenkins 仓库:
    • 导入 Jenkins 的 GPG 密钥:
      wget -q -O - https://pkg.jenkins.io/debian/jenkins.io.key | sudo apt-key add -
      
    • 添加 Jenkins 仓库:
      sudo sh -c 'echo deb http://pkg.jenkins.io/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list'
      
  3. 安装 Jenkins:
    • 更新软件包列表并安装 Jenkins:
      sudo apt update
      sudo apt install jenkins -y
      
  4. 启动 Jenkins:
    • 启动 Jenkins 服务:
      sudo systemctl start jenkins
      
    • 设置 Jenkins 在系统启动时自动启动:
      sudo systemctl enable jenkins
      
  5. 访问 Jenkins:
    • 打开浏览器,访问 http://localhost:8080

解锁 Jenkins

  1. 获取解锁密钥:
    • 在浏览器中打开 Jenkins 页面时,会提示你输入解锁密钥。
    • 你可以在终端中运行以下命令获取密钥:
      sudo cat /var/lib/jenkins/secrets/initialAdminPassword
      
  2. 输入密钥:
    • 将密钥复制并粘贴到 Jenkins 页面中,点击 “Continue”。

安装推荐插件

  • 在插件安装页面,选择 “Install suggested plugins” 以安装推荐的插件。

创建第一个 Jenkins 任务

  1. 创建新任务:
    • 在 Jenkins 主页面,点击 “New Item”。
    • 输入任务名称(例如 HelloWorld),选择 “Freestyle project”,然后点击 “OK”。
  2. 配置任务:
    • 在任务配置页面,找到 “Build” 部分,点击 “Add build step”。
    • 选择 “Execute shell”。
  3. 输入构建命令:
    • 在 “Command” 文本框中输入以下内容:
      echo "Hello, World!"
      
  4. 保存任务:
    • 滚动到页面底部,点击 “Save”。

运行任务

  1. 构建任务:
    • 在任务页面,点击 “Build Now” 按钮。
  2. 查看构建结果:
    • 在 “Build History” 部分,点击最新的构建(通常是编号为 #1 的构建)。
    • 点击 “Console Output” 链接,查看构建日志。
  3. 查看输出:
    • 在控制台输出中,你应该能看到以下内容:
      Hello, World!
      

总结

你已经成功设置了 Jenkins,并创建了一个简单的 “Hello World” 构建任务。这个过程展示了如何安装 Jenkins、创建任务以及执行简单的 Shell 命令。

进一步学习建议

  • 学习 Jenkins 的其他构建步骤,如使用 Git 拉取代码、运行测试等。
  • 探索 Jenkins 插件,了解如何扩展 Jenkins 的功能。
  • 尝试使用 Jenkins Pipeline 定义更复杂的构建和部署流程。

如果你有任何问题或需要进一步的解释,请随时问我!