Jenkins 结合Azure容器服务

Posted 火星黑科技

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Jenkins 结合Azure容器服务相关的知识,希望对你有一定的参考价值。

客户场景

当很多客户已经实现了应用部署上云后,也慢慢熟悉了Azureinfra结构,会利用模板部署实现自动化后。肯定会开始把已有的持续集成,持续部署的功能移上云端。那很多客户会问:我觉得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上部署一个K8SACS集群,在国内的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虚机上持续集成部署容器

下面我们来看看一个很轻量化的部署,也就是说在Jenkinsserver上同时也安装了Docker Engine。测试如何在一台机器上实现CI/CD。代码管理在Github,通过Webhook来触发Jenkins的任务。当然大家也可以用多台机器来部署,只要修改Jenkinspipeline脚本就行。

1. 在一个Github的项目中,点击"setting" -> "Integrations     and services" , 创建一个Webhook,这个是用来当代码有任何新的commit的时候,把变更的消息发送到Jenkins server,以便触发Pipeline实现持续集成部署。

Jenkins 结合Azure容器服务


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", 按照截屏填入gitbubrulgit等信息,在执行的脚本里填上相应内容,启动一个helloword的容器。

Jenkins 结合Azure容器服务

Jenkins 结合Azure容器服务

Jenkins 结合Azure容器服务


4. 接下来我们来测试一下commit一个新的版本的code,看一下Jenkins是否会自动的集成部署

Jenkins 结合Azure容器服务


5. 我们打开这个docker容器服务,duang,已经可以看到这个简单的JS应用了。

Jenkins 结合Azure容器服务



ACS集群上持续集成部署容器

现在我们来看一下准生产环境,我们用一台Jenkins server来做CICD,应用部署在AzureACS或者中国版的ACS Engine。还是把代码放在Github上,模拟触发一个版本跟新,然后自动集成和部署到生产环境中。

 

1. 我们先进入一个新的Github项目,名字叫做azure-voting-app-redis。按照前一个例子,创建一个webhook

Jenkins 结合Azure容器服务



2. Jenkins中新建一个Job,选择"Freestyle Porject",按照截屏填入gitbubrulgit等信息,在执行的脚本里填上相应内容。

第一步你需要用SP登陆Azure,然后登陆ACR,这样你才能以后上传拉取镜像。

第二步是制作一个镜像。

第三步是上传到ACR

第四步更新yml模板文件,在文件中吧原来的版本替换成新上传的版本号。

第五步是创建容器,以及相对应的服务,暴露在公网上以便访问呢。

Jenkins 结合Azure容器服务



3. 下面我们在Github上跟新页面上的一个文件,查看Jenkins的输出,以及应用的输出。

Jenkins 结合Azure容器服务



后记以及参考资料

其实在没有公有云的时代,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容器服务的主要内容,如果未能解决你的问题,请参考以下文章

如何使 Azure 应用服务容器崩溃

Azure 应用服务泊坞窗容器“服务不可用”

Azure 应用服务中缺少“容器设置”部分

azure App 服务部署为代码还是容器?

Docker微服务-Jenkins+Gitlab+Maven+Shell自动化构建实施案例

使用Azure Docker容器注册表服务