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
- 安装 Java:
- Jenkins 需要 Java 运行环境。你可以使用以下命令安装 OpenJDK:
sudo apt update sudo apt install openjdk-11-jdk -y
- Jenkins 需要 Java 运行环境。你可以使用以下命令安装 OpenJDK:
- 添加 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'
- 导入 Jenkins 的 GPG 密钥:
- 安装 Jenkins:
- 更新软件包列表并安装 Jenkins:
sudo apt update sudo apt install jenkins -y
- 更新软件包列表并安装 Jenkins:
- 启动 Jenkins:
- 启动 Jenkins 服务:
sudo systemctl start jenkins
- 设置 Jenkins 在系统启动时自动启动:
sudo systemctl enable jenkins
- 启动 Jenkins 服务:
- 访问 Jenkins:
- 打开浏览器,访问
http://localhost:8080
。
- 打开浏览器,访问
解锁 Jenkins
- 获取解锁密钥:
- 在浏览器中打开 Jenkins 页面时,会提示你输入解锁密钥。
- 你可以在终端中运行以下命令获取密钥:
sudo cat /var/lib/jenkins/secrets/initialAdminPassword
- 输入密钥:
- 将密钥复制并粘贴到 Jenkins 页面中,点击 “Continue”。
安装推荐插件
- 在插件安装页面,选择 “Install suggested plugins” 以安装推荐的插件。
创建第一个 Jenkins 任务
- 创建新任务:
- 在 Jenkins 主页面,点击 “New Item”。
- 输入任务名称(例如
HelloWorld
),选择 “Freestyle project”,然后点击 “OK”。
- 配置任务:
- 在任务配置页面,找到 “Build” 部分,点击 “Add build step”。
- 选择 “Execute shell”。
- 输入构建命令:
- 在 “Command” 文本框中输入以下内容:
echo "Hello, World!"
- 在 “Command” 文本框中输入以下内容:
- 保存任务:
- 滚动到页面底部,点击 “Save”。
运行任务
- 构建任务:
- 在任务页面,点击 “Build Now” 按钮。
- 查看构建结果:
- 在 “Build History” 部分,点击最新的构建(通常是编号为 #1 的构建)。
- 点击 “Console Output” 链接,查看构建日志。
- 查看输出:
- 在控制台输出中,你应该能看到以下内容:
Hello, World!
- 在控制台输出中,你应该能看到以下内容:
总结
你已经成功设置了 Jenkins,并创建了一个简单的 “Hello World” 构建任务。这个过程展示了如何安装 Jenkins、创建任务以及执行简单的 Shell 命令。
进一步学习建议
- 学习 Jenkins 的其他构建步骤,如使用 Git 拉取代码、运行测试等。
- 探索 Jenkins 插件,了解如何扩展 Jenkins 的功能。
- 尝试使用 Jenkins Pipeline 定义更复杂的构建和部署流程。
如果你有任何问题或需要进一步的解释,请随时问我!