2019 M01 25 • ☕️ 2 min read
最近迁移服务,并试用了阿里云的CodePipeline持续集成服务,发现还是不如自己搭建Jenkins定制化部署好,本文主要介绍如何通过Docker快速搭建Jenkins服务,并利用SSH+Plugin实现远程部署
所需环境
登录ECS1,使用Docker进行部署,并暴露8080端口以便外部访问:
docker run \
-d \
-u root \
-p 8080:8080 \
-v jenkins-data:/var/jenkins_home \
-v /var/run/docker.sock:/var/run/docker.sock \
--name jenkins \
jenkinsci/blueocean
由于大部分云服务默认会禁掉非常用端口,如果不想用IP+端口访问,可以简单配置域名,通过nginx代理访问:
server {
listen 80;
server_name jenkins.yourdomain.com;
location / {
proxy_pass http://localhost:8080;
}
}
至此Jenkins已经在ECS1上部署好,可通过刚配置的域名进行访问,默认初始密码通过日志文件获得 docker logs -f jenkins
启动Jenkins后,可通过系统管理/插件管理进行SSH的插件安装
由于我们的Jenkins由Docker进行部署,你可以把它看成一台具有独立环境的虚拟机,这样可以在容器环境里配置SSH密钥对,让Jenkins通过公网IP与宿主机ECS1或远程机ECS2进行SSH连接,这里我们通过直接修改容器的方式进行生成密钥:
进入ECS1终端,执行:
docker exec -it jenkins /bin/bash
进入容器环境,生成密钥对:
ssh-keygen -t rsa
复制刚刚在容器环境生成的公钥内容id_rsa.pub
,添加到ECS1和ECS2的~/.ssh/authorized_keys
文件,并确保两台机器放通22端口允许远程连接
首先通过在容器环境里生成的密钥id_rsa
生成全局凭据
接着配置SSH remote hosts(系统管理/系统配置),输入ECS的公网信息,还有刚刚创建的凭据,如果配置正确,右下角Check connection的按钮点击后应该连接成功
新建一个任务,在Build阶段添加Execute shell script on remote host using ssh,选择需要远程连接的服务器,输入连接成功后需要执行的命令,大功告成
个人博客 By Jamie.
随便写写,记录踩坑日记.