记录每一天,过好每一天

只不过是不喜欢失望罢了

阿里云容器镜像与GitHub的连接

阿里云镜像服务登陆过后点击创建镜像仓库:

然后下一步,选择代码源

默认会选择代码变更自动构建镜像。这里为什么会选择阿里云的容器镜像服务,而不是选择Docker Hub。这是因为网络原因在pull镜像的时候Docker Hub会很慢所以选择比较快的阿里云容器镜像。
创建完成后就会在镜像仓库里看到自己的镜像仓库:

点击仓库名称进入镜像仓库:

点击构建,添加规则:

这里和Docker Hub构建方式一样就行,点击确认。

然后点击立即构建,在构建日志中可以查看镜像的构建状态:

然后在镜像版本里就能查看到构建完成的镜像,然后在基本信息中就可以查看如何在Docker中pull自己构建的镜像,做完上面的操作我们就可以手动的更新镜像。

使用Jenkins

使用Jenkins,在Docker里安装Jenkins还是在宿主机里安装都可以,主要注意的是Jenkins是在java环境下运行的,所以不要忘记安装java环境,我是安装宿主机里的。安装好之后运行Jenkins 默认端口是8080,在配置文件/etc/default/jenkins中可以修改。通过服务器域名或IP地址访问Jenkins的默认端口8080:;http://ip_address_or_domain_name:8080
第一次进入需要使用Jenkins生成的32位字符密码解锁,使用 cat /var/log/jenkins/jenkins.log可以查看。安装完成后,创建管理用户,然后会跳出安装插件页面,使用推荐的就可以了。

安装Generic Webhook Trigger

在“系统设置–插件管理–可选插件”界面搜索:Generic Webhook Trigger,然后点击安装重启。然后创建任务,选择流水线,然后点击Generic Webhook Trigger:


因为上面我们使用了阿里云的容器镜像服务,所以这里的部署流程是:

提交代码到GitHub->GitHub仓库代码变化->阿里云容器镜像构建服务启动->构建好镜像之后触发webhook(触发器)->jenkins收到阿里云的webhook之后触发job执行部署脚本->脚本拉取阿里云镜像并且部署->部署完毕。

Generic Webhook Trigger支持的命名触发URL格式是这样的:
http://<User ID>:<API Token>@<Jenkins IP地址>:端口/generic-webhook-trigger/invoke?token=<Token>

  • User ID:你的JenkinsID
  • API Token:在“系统管理–管理用户–用户列表–点击用户名–设置”设置用户API Token:
  • Jenkins IP地址:Jenkins的服务器IP地址
  • Token:在配置Generic Webhook Trigger时的Token

然后在“系统设置-Configure Global Security”,去掉防止跨站点请求伪造的勾,这样我们就可以在访问到api的地址了,不然我们把用户名和密码放到url 中,还是不能访问:

流水线,pipeline脚本配置:

    pipeline {
       agent any

   stages {
      stage('启动准备') {
         steps {
            echo 'remove image'
            // 停止容器
            sh 'docker stop 容器名
            // 删除容器
            sh 'docker rm 容器名'
            // 删除镜像
            sh 'docker rmi 阿里云镜像名
         }
      }
    stage('获取镜像') {
      steps {
        echo 'get image'
        //登入阿里云,这些在阿里云镜像仓库的基本信息中有
        sh 'docker login ...'
        sh 'docker pull ..'
    }
    }
    stage('启动服务') {
      steps {
        echo 'start 容器
        sh 'docker run 。。。。。'
      }
    }
   }
    }

构建完成后可以,手动测试一下:

如果返回状态码200则构建成功。
然后在脚本过程中可能会出现:

这是因为Jenkins用户没有加入到docker用户组:
sudo gpasswd -a jenkins docker
sudo service jenkins restart

构建历史中红色代表不成功,蓝色代表成功,点击序号可以查看控制台输出。

阿里云镜像触发器


点击触发器,点击创建

填入名称和Generic Webhook Trigger生成的URL,确认:

测试

现在对我的博客页面进行更改,更改前:

修改代码提交到GitHub:

阿里云容器服务状态:

当显示构建成功后,阿里云镜像服务的触发器会对Jenkins发送请求,然后Jenkins运行脚本。然后我们可以查看Jenkins中的构建信息:

更改后:

总结

因为我们经常会修改代码,而我们拉取镜像,运行web容器时没有给容器进行固定IP地址配置。所以在nginx的配置中我们如果使用web容器IP地址进行反向代理,当更新代码时,web容器IP地址会改变那么代理设置就会出错。所以我们可以指向服务器的IP地址,因为我们在运行web容器时进行了端口映射。但我们有更好的选择,就是使用--link命令将nginx容器和web容器连接起来--link blog:webblog:需要连接的容器名,web:该连接容器的别名。然后在nginx配置中就可以使用proxy_pass http://web:8080;访问到blog容器。

最后

如果你喜欢这篇文章或者有建议,请给我留言吧。