Jenkins 结合Azure容器服务
Posted 火星黑科技
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Jenkins 结合Azure容器服务相关的知识,希望对你有一定的参考价值。
客户场景
当很多客户已经实现了应用部署上云后,也慢慢熟悉了Azure的infra结构,会利用模板部署实现自动化后。肯定会开始把已有的持续集成,持续部署的功能移上云端。那很多客户会问:我觉得Jenkins应该能很好的去管理传统的应用集成发布等,那么Azure上的一些PaaS服务,是不是可以和Jenkins集成呢?这是一个好问题,某软其实十分重视这方面客户的需求,虽然某软有自己的VSTS,同样也是强大到能结合VS IDE + Github + Jenkins的所有功能。但是也不忘喜欢开源软件的朋友们,而且也愿意和这些开源软件一起合作开发集成Azure PaaS服务。下面让我们来看看Jenkins这个王牌CICD软件怎么和ACS等集成。
预先需要做的准备
1. 部署一个Jenkins的虚机,可以在镜像市场下载安装,也可以自己手动安装,亲们自便哦。
https://jenkins.io/blog/2017/04/20/secure-jenkins-on-azure/
注:除了在Jenkins的虚机上打开8080端口以外,还要在Azure安全组上打开相应端口。
2. 在安装了Jenkins的虚机中安装Docker,并且执行以下命令,保证jenkins可以调用docker命令
sudo chmod 777 /run/docker.sock
3. 在Azure上部署一个K8S的ACS集群,在国内的azure上可以自行安装ACS Engine
https://github.com/Azure/acs-engine/blob/master/docs/acsengine.md
4. 在Azure上开通Container Retristry,当然其他的retristry也是可以的,比如docker hub之类的。
https://docs.microsoft.com/en-us/azure/container-service/kubernetes/container-service-tutorial-kubernetes-prepare-acr
在一个docker虚机上持续集成部署容器
下面我们来看看一个很轻量化的部署,也就是说在Jenkins的server上同时也安装了Docker Engine。测试如何在一台机器上实现CI/CD。代码管理在Github,通过Webhook来触发Jenkins的任务。当然大家也可以用多台机器来部署,只要修改Jenkins的pipeline脚本就行。
1. 在一个Github的项目中,点击"setting" -> "Integrations and services" , 创建一个Webhook,这个是用来当代码有任何新的commit的时候,把变更的消息发送到Jenkins server,以便触发Pipeline实现持续集成部署。
2. 制作一个容器的Yaml模板。
进入目录 cd /var/lib/jenkins/workspace/HelloWorld
新建一个Yaml模板,sudo sensible-editor Dockerfile,键入以下模板内容
FROM node:alpine
EXPOSE 1337
WORKDIR /var/www
COPY package.json /var/www/
RUN npm install
COPY index.js /var/www/
3. 在Jenkins中新建一个Job,选择"Freestyle Porject", 按照截屏填入gitbub的rul,git等信息,在执行的脚本里填上相应内容,启动一个helloword的容器。
4. 接下来我们来测试一下commit一个新的版本的code,看一下Jenkins是否会自动的集成部署
5. 我们打开这个docker容器服务,duang,已经可以看到这个简单的JS应用了。
在ACS集群上持续集成部署容器
现在我们来看一下准生产环境,我们用一台Jenkins server来做CICD,应用部署在Azure的ACS或者中国版的ACS Engine。还是把代码放在Github上,模拟触发一个版本跟新,然后自动集成和部署到生产环境中。
1. 我们先进入一个新的Github项目,名字叫做azure-voting-app-redis。按照前一个例子,创建一个webhook。
2. 在Jenkins中新建一个Job,选择"Freestyle Porject",按照截屏填入gitbub的rul,git等信息,在执行的脚本里填上相应内容。
第一步你需要用SP登陆Azure,然后登陆ACR,这样你才能以后上传拉取镜像。
第二步是制作一个镜像。
第三步是上传到ACR。
第四步更新yml模板文件,在文件中吧原来的版本替换成新上传的版本号。
第五步是创建容器,以及相对应的服务,暴露在公网上以便访问呢。
3. 下面我们在Github上跟新页面上的一个文件,查看Jenkins的输出,以及应用的输出。
后记以及参考资料
其实在没有公有云的时代,Jenkins已经作为一个CICD的利器为广大Devops团队贡献CICD的最佳实践了。到了公有云时代,Docker也慢慢成熟了,所以整个CICD的配合从原来的Chef等+Jenkis变成了脱离主机的方式,变成了Jenkins+container的模式,更方便了持续集成部署,版本管理等。那么结合原来大家都很熟的Jenkis,让运维和公有云的服务结合的更紧密吧。
参考资料:
在Azure上配置Jenkins
https://jenkins.io/blog/2017/04/20/secure-jenkins-on-azure/
在Jenkins上集成Docker
https://docs.microsoft.com/en-us/azure/virtual-machines/linux/tutorial-jenkins-github-docker-cicd
让Jenkins能够执行sudo命令
https://stackoverflow.com/questions/37603621/jenkins-sudo-no-tty-present-and-no-askpass-program-specified-with-nopasswd
Jenkins参考资料
https://wiki.jenkins.io/display/JENKINS/Use+Jenkins
构建Azure Registry
https://docs.microsoft.com/en-us/azure/container-service/kubernetes/container-service-tutorial-kubernetes-prepare-acr
K8s新建应用
https://docs.microsoft.com/en-us/azure/container-service/kubernetes/container-service-tutorial-kubernetes-deploy-application
以上是关于Jenkins 结合Azure容器服务的主要内容,如果未能解决你的问题,请参考以下文章