云计算百科
云计算领域专业知识百科平台

Jenkins+Docker+阿里云k8s自动化部署避坑指南:从零搭建完整CI/CD流水线

Jenkins+Docker+阿里云Kubernetes自动化部署实战:从零到一构建高可用CI/CD流水线

你是否曾经历过这样的场景:深夜,线上服务突然告警,你手忙脚乱地登录服务器,手动执行一系列繁琐的部署命令,祈祷着不要敲错任何一个字符?或者,团队新成员加入,光是搭建本地开发环境就耗费了一整天,更别提理解复杂的部署流程了。在追求快速迭代的今天,这种“刀耕火种”式的部署方式,已经成为制约团队效率和产品质量的瓶颈。

自动化部署,或者说CI/CD(持续集成/持续部署),早已不是大型科技公司的专属。对于任何追求稳定、高效交付的团队而言,它都是一项必须掌握的核心工程能力。今天,我们就来深入探讨如何利用Jenkins、Docker和阿里云Kubernetes(ACK)这三驾马车,搭建一套既健壮又灵活的自动化部署流水线。本文不会止步于简单的工具堆砌,而是聚焦于实战中那些“坑”,分享如何绕过它们,构建一个真正能服务于生产环境的系统。无论你是初次接触自动化部署的开发者,还是希望优化现有流程的工程师,都能从中找到可落地的解决方案。

1. 基石构建:环境准备与关键避坑点

在开始编写第一行Pipeline脚本之前,稳固的基础环境是成功的一半。许多初学者往往在这一步就遭遇挫折,导致后续工作无法推进。我们将重点放在那些容易被忽略但又至关重要的细节上。

1.1 Jenkins的安装抉择:宿主机还是容器?

关于Jenkins的安装方式,社区一直存在争议。Docker部署看似优雅,但实际生产中,尤其是在使用RHEL/CentOS等RedHat系发行版时,你可能会遇到一个经典的“拦路虎”:在Jenkins的Pipeline中执行docker build命令时,返回 docker: command not found。

注意:这通常不是Docker客户端未安装的问题,而是SELinux安全策略限制了容器内的进程访问宿主机Docker守护进程的Unix Socket。

虽然网上有方案建议安装selinux-dockersock等插件来缓解,但笔者在多个生产环境中测试发现,其稳定性并不理想,尤其是在需要频繁执行Docker命令的CI场景下。因此,对于追求稳定和可控性的生产环境,我强烈建议直接在宿主机上安装Jenkins。

以下是基于CentOS 7/8的宿主机安装步骤精华:

# 1. 添加Jenkins仓库并安装
sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
sudo rpm –import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
sudo yum install fontconfig java-11-openjdk jenkins -y

# 2. 关键配置:确保Jenkins用户有权限执行Docker命令
# 将jenkins用户加入docker组,避免每次执行docker命令都需要sudo
sudo usermod -aG docker jenkins

# 3. 修改Jenkins默认端口(如果8080已被占用)
sudo sed -i \’s/JENKINS_PORT=\”8080\”/JENKINS_PORT=\”8081\”/\’ /etc/sysconfig/jenkins

# 4. 启动并设置开机自启
sudo systemctl daemon-reload
sudo systemctl start jenkins
sudo systemctl enable jenkins

安装完成后,通过浏览器访问 http://<你的服务器IP>:8081。初始管理员密码的获取是另一个常见卡点:

# 密码位于以下路径,使用cat命令查看
sudo cat /var/lib/jenkins/secrets/initialAdminPassword

如果找不到这个文件,很可能是安装过程不完整或权限问题。一个可靠的解决方法是:直接查看Jenkins的启动日志,密码会在其中打印。

sudo journalctl -u jenkins -f –no-pager | grep -A5 -B5 \”password\”

1.2 基础设施凭证的安全配置

自动化流程的核心是各系统间的无缝认证。配置不当的凭证管理,会成为安全漏洞和流程失败的根源。

1. Git仓库免密访问(SSH Key方式)

使用密码访问Git仓库不仅不安全,在自动化脚本中也极不方便。SSH Key是最佳实践。关键在于,必须以Jenkins进程的运行用户(通常是jenkins)来生成密钥,而非root用户。

# 切换到jenkins用户shell环境
sudo su – jenkins -s /bin/bash
# 生成SSH密钥对,一路回车即可
ssh-keygen -t rsa -b 4096 -C \”jenkins@ci-server\” -f /var/lib/jenkins/.ssh/id_rsa -N \”\”

生成的公钥(id_rsa.pub内容)需要添加到你的GitLab、GitHub或Gitee的SSH Keys设置中。私钥则需要添加到Jenkins的凭证库:

  • 进入 Jenkins -> Manage Jenkins -> Manage Credentials。
  • 在适当的域下,点击“Add Credentials”。
  • 选择种类为“SSH Username with private key”。
    • Username:填写一个标识名,如 git-jenkins。
    • Private Key:选择“Enter directly”,将
  • 赞(0)
    未经允许不得转载:网硕互联帮助中心 » Jenkins+Docker+阿里云k8s自动化部署避坑指南:从零搭建完整CI/CD流水线
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!