Docker 持续部署hexo blog到github page上和云虚拟机上

本文介绍如何利用Docker和Jenkins实现Hexo博客的自动化构建与部署流程,包括Dockerfile的编写、Jenkins任务配置及博客内容同步到GitHub Pages和Nginx服务器的具体步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


目标:

1.通过Dockerfile创建新的image

2.通过image创建容器去运行jenkins

3.启动nginx 容器挂载hexo blog

4.通过jenkins同时部署blog到github和nginx

5.push 新创建的image到docker hub

步骤:

1.创建一个目录dockerhexo

2.创建一个新目录名为Docker_file,创建Dockerfile:

#jenkins稳定版本
FROM jenkins/jenkins:lts
#切换root用户
USER root 
RUN  apt-get update \
#安装jsnode12.x版本
&& curl -sL https://deb.nodesource.com/setup_12.x | bash - \
&&  apt-get install -y nodejs \
#安装hexo
&&  npm install -g hexo-cli \
#安装hexo-deployer
&& npm install hexo-deployer-git
#切换回jenkins用户
User jenkins

2.运行 docker build生成image:

docker build -t zxlman/jenkinshexo .
#如果 需要no cache build image如下:
docker build  --no-cache  -t jenkinshexo .

3.查看新生成的image:

4.创建一个shellscript用来删除对应的容器,方便测试,容器名jenkinscontainerremove.sh

echo "Stopping container myjenkins"
docker container stop myjenkins
echo "Removing container myjenkins "
docker container rm  myjenkins
echo ""Doker container list:
docker container ls

执行 chmod +x enkinscontainerremove.sh赋予执行权限,如果执行这个脚本就运行sh jenkinscontainerremove.sh

5.创建一个shell脚本启动jenkins容器,如下,```sh jenkinscontainerstartup.sh``

docker container   run --name myjenkins   \
 --restart unless-stopped  \
 -v /home/kevin/dockerhexo/jenkins_home:/var/jenkins_home \
 -v  /home/kevin/.ssh:/var/jenkins_home/.ssh \
 -v  /home/kevin/.gitconfig:/var/jenkins_home/.gitconfig \
 -d -p  8081:8080 -p 50000:50000 zxlman/jenkinshexo
docker container ls

ps:

-v  /home/kevin/.ssh:/var/jenkins_home/.ssh \ #用来访问github拉取repository

-v  /home/kevin/.gitconfig:/var/jenkins_home/.gitconfig  #部署文章到github page需要用到

6.创建一个shell脚本启动nginx容器,如下,```sh nginxstartup.sh``

docker container stop mynginx
docker container rm mynginx
docker  run --name mynginx  --restart unless-stopped -v /home/kevin/dockerhexo/jenkins_home/workspace/Blog_Deployment_Pipline/public:/usr/share/nginx/html -d -p 81:80 nginx
docker container ls

7.打开jenkins并且创建pipline job:job Blog_Deployment_Pipline

8.配置jenkins job:

pipeline {
    agent any

    stages {
        stage('Git CheckOut') {
            steps {
               git 'git@github.com:nightwish2016/HexoBlog.git'             
            }
        }
        stage('Build') {
            steps {              
                sh label: '', script: 'hexo g'
            }
        }
        stage('Deployment') {
            steps {               
                sh label: '', script: 'hexo d'                              
            }
        }
      
    }

}

7.Trigger job,但是发现报了如下的错误:

那是因为github上clone下来的代码缺少hexo相关的文件,执行如下脚本:

cd /home/kevin/dockerhexo/jenkins_home/workspace/Blog_Deployment_Pipline/
npm install hexo --save

重新trigger这个job

8.查看blog是否部署到github page和nginx web服务器,可以看到通过如下网址均可以访问blog,并且部署成功了

http://kevin.southeastasia.cloudapp.azure.com:81/

https://nightwish2016.github.io/

9.push这个image 到docker hub docker push zxlman/jenkinshexohttps://hub.docker.com/repository/docker/zxlman/jenkinshexo

Tips:

Start containers automatically:

https://docs.docker.com/config/containers/start-containers-automatically/#:~:text=Docker%20provides%20restart%20policies%20to,started%20in%20the%20correct%20order

使用root用户进入jenkins:

docker exec -it --user root 69d /bin/bash

window 10 启动jenkins容器

docker container   run --name jenkinshexocontainer    --restart unless-stopped  -v /c/Users/xxx/jenkins_home2:/var/jenkins_home   -v /c/Users/xxx/.ssh:/var/jenkins_home/.ssh    -v  /c/Users/xxx/.gitconfig:/var/jenkins_home/.gitconfig  -d -p  8083:8080 jenkinshexo

Issues:

$ docker container   run --name myjenkins   --restart unless-stopped  -v /home/kevin/jenkins_home:/var/jenkins_home -v  /home/kevin/.ssh:/var/jenkins_home/.ssh   -p  82:8080 zxlman/jenkinshexo
touch: cannot touch '/var/jenkins_home/copy_reference_file.log': Permission denied
Can not write to /var/jenkins_home/copy_reference_file.log. Wrong volume permissions?

Solution

jenkins的默认用户没有对/home/kevin/dockerhexo/jenkins_home的写权限

sudo chown 1000 /home/kevin/dockerhexo/jenkins_home

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值