Jenkins基础:Jenkinsfile使用实例:14:使用docker.image进行容器部署
发布日期:2021-06-30 20:13:33 浏览次数:2 分类:技术文章

本文共 5424 字,大约阅读时间需要 18 分钟。

在上一篇文章中我们介绍了在Jenkinsfile中镜像推送至本地私库或者dockerhub的方法,这篇文章将继续介绍如何使用docker.image将容器运行起来。

环境准备

本文使用Easypack的LTS Jenkins 2.176.1版,环境准备请参看

  • https://liumiaocn.blog.csdn.net/article/details/92764938

获取Jenkins-Crumb

使用如下示例代码获取Jenkins-Crumb,为使用API方式为示例作准备。

liumiaocn:jenkins liumiao$ jenkins_host_url=http://localhost:32002liumiaocn:jenkins liumiao$ user_passwd="root:liumiaocn"liumiaocn:jenkins liumiao$ jenkins_crumb=`curl -u $user_passwd ${
jenkins_host_url}'/crumbIssuer/api/xml?xpath=concat(//crumbRequestField,":",//crumb)' 2>/dev/null`liumiaocn:jenkins liumiao$ echo $jenkins_crumbJenkins-Crumb:6af0183fd58dea3d16f393b9e3272747liumiaocn:jenkins liumiao$

创建Job

使用如下代码示例创建Job

liumiaocn:jenkins liumiao$ ls demo/pipeline/docker/deploy/config.xmldemo/pipeline/docker/deploy/config.xmlliumiaocn:jenkins liumiao$ cat demo/pipeline/docker/deploy/config.xml
Pipeline Job Sample
false
false
false
liumiaocn:jenkins liumiao$ curl -X POST -u $user_passwd -H ${jenkins_crumb} -H "Content-Type:application/xml" --data-binary "@demo/pipeline/docker/deploy/config.xml" ${jenkins_host_url}/createItem?name=pipeline_job_deployliumiaocn:jenkins liumiao$ echo $?0liumiaocn:jenkins liumiao$

Jenkinsfile说明

本文示例所使用的Jenkinsfile信息如下所示,内容非常简单易读,简单说明如下:

  • node是结构,在其中可以指定stage等信息
  • stage为具体的节点,比如本文示例中模拟实际的准备Dockerfile、构建镜像等操作
  • withRun中一般设定运行时的参数相关的信息,比如本例中的port的mapping信息
node {       stage('Prepare Dockerfile') {         sh 'cp /tmp/Dockerfile .'        }       stage('Build with default Dockerfile') {         docker.build('my-nginx:v1')       }        stage('Deploy my-nginx image for running') {         docker.image('my-nginx:v1').withRun('-p 8090:80') { c ->           sh 'curl http://192.168.31.242:8090'         }       }  }

执行Job

  • Dockerfile准备
    Dockerfile内容如下所示
liumiaocn:jenkins liumiao$ docker exec -it jenkins_jenkins_1 sh/ # cat /tmp/Dockerfile FROM nginx:latest/ #
  • 事前确认
liumiaocn:jenkins liumiao$ docker images |grep my-nginxliumiaocn:jenkins liumiao$

使用如下命令或者直接在Jenkins上点击构建

liumiaocn:jenkins liumiao$ curl -X POST -u $user_passwd -H ${jenkins_crumb} ${jenkins_host_url}/job/pipeline_job_deploy/buildliumiaocn:jenkins liumiao$ echo $?0liumiaocn:jenkins liumiao$

确认执行结果

使用如下命令可以确认相关的执行日志信息

liumiaocn:jenkins liumiao$ curl -u $user_passwd ${jenkins_host_url}/job/pipeline_job_deploy/1/consoleTextStarted by user rootRunning in Durability level: MAX_SURVIVABILITY[Pipeline] Start of Pipeline[Pipeline] nodeRunning on Jenkins in /data/jenkins/workspace/pipeline_job_deploy[Pipeline] {
[Pipeline] stage[Pipeline] {
(Prepare Dockerfile)[Pipeline] sh+ cp /tmp/Dockerfile .[Pipeline] }[Pipeline] // stage[Pipeline] stage[Pipeline] {
(Build with default Dockerfile)[Pipeline] sh+ docker build -t my-nginx:v1 .Sending build context to Docker daemon 2.048kBStep 1/1 : FROM nginx:latestlatest: Pulling from library/nginx8d691f585fa8: Pulling fs layer047cb16c0ff6: Pulling fs layerb0bbed1a78ca: Pulling fs layerb0bbed1a78ca: Verifying Checksumb0bbed1a78ca: Download complete047cb16c0ff6: Verifying Checksum047cb16c0ff6: Download complete8d691f585fa8: Download complete8d691f585fa8: Pull complete047cb16c0ff6: Pull completeb0bbed1a78ca: Pull completeDigest: sha256:77ebc94e0cec30b20f9056bac1066b09fbdc049401b71850922c63fc0cc1762eStatus: Downloaded newer image for nginx:latest ---> 5a9061639d0aSuccessfully built 5a9061639d0aSuccessfully tagged my-nginx:v1[Pipeline] dockerFingerprintFrom[Pipeline] }[Pipeline] // stage[Pipeline] stage[Pipeline] {
(Deploy my-nginx image for running)[Pipeline] sh+ docker run -d -p 8090:80 my-nginx:v1[Pipeline] dockerFingerprintRun[Pipeline] sh+ curl http://192.168.31.242:8090 % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0Welcome to nginx!

Welcome to nginx!

If you see this page, the nginx web server is successfully installed andworking. Further configuration is required.

For online documentation and support please refer tonginx.org.

Commercial support is available atnginx.com.

Thank you for using nginx.

100 612 100 612 0 0 5884 0 --:--:-- --:--:-- --:--:-- 5828[Pipeline] sh+ docker stop 26e33aff07bb6902511ba5ac070b580cf5c0cd9876386561430d456aee010e6826e33aff07bb6902511ba5ac070b580cf5c0cd9876386561430d456aee010e68+ docker rm -f 26e33aff07bb6902511ba5ac070b580cf5c0cd9876386561430d456aee010e6826e33aff07bb6902511ba5ac070b580cf5c0cd9876386561430d456aee010e68[Pipeline] }[Pipeline] // stage[Pipeline] }[Pipeline] // node[Pipeline] End of PipelineFinished: SUCCESSliumiaocn:jenkins liumiao$

blueocean构建结果确认

在这里插入图片描述

构建后镜像确认

liumiaocn:jenkins liumiao$ docker images |grep my-nginxmy-nginx                                        v1                              5a9061639d0a        2 days ago          126MBliumiaocn:jenkins liumiao$

注意事项

环境准备的docker-compose.yml中需要包含如下内容,以保证能够以容器方式运行的Jenkins能够进行镜像的生成。

- /var/run/docker.sock:/var/run/docker.sock
为了保证Jenkins-Crumb能够正常获取,不要设定如下Jenkins收起启动跳过插件内容的设定,以保证API的正常执行。
JAVA_OPTS=-Djenkins.install.runSetupWizard=false

使用withRun,从结果可以看到容器生成、使用curl确认运行状况、容器销毁的整个过程。而如果希望此容器运行而不会被停止,则可以直接使用如下命令替换即可

docker.image('my-nginx:v1').run('-p 8090:80')

参考内容

https://jenkins.io/doc/book/pipeline/docker/

转载地址:https://liumiaocn.blog.csdn.net/article/details/102644001 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Jenkins基础:使用NPM构建前端应用4:构建前端镜像
下一篇:Jenkins基础:Jenkinsfile使用实例:12:使用docker.build构建镜像

发表评论

最新留言

表示我来过!
[***.240.166.169]2024年04月21日 20时12分44秒