【问题标题】:Deploy as production server部署为生产服务器
【发布时间】:2023-06-29 03:38:01
【问题描述】:

我在 Git 中有一个带有 Dockerfile 的项目,它描述了生产服务器。代码和 Dockerfile 由 Jenkins 在特殊机器(物理 CI 服务器)上构建。成功构建后,我会将此映像部署在 remote 主机(另一个物理部署服务器)上的容器中。

最简单的方法是什么?是否有任何 Jenkins 插件可以在远程 Docker(在另一台机器上)上部署图像/容器

【问题讨论】:

    标签: git jenkins


    【解决方案1】:

    如果您让远程主机轮询 Jenkins 以查看最新构建是否成功,怎么样。也许 cron 会帮助您安排它。然后如果最新状态 == "SUCCESS" 拉出最新的 git/docker 镜像并运行。

    我在 serverfault.com 上找到了这个脚本,https://serverfault.com/questions/309848/how-can-i-check-the-build-status-of-a-jenkins-build-from-the-command-line

    脚本的第一个参数是Jenkins上的项目名称。该脚本将连接到您的 Jenkins 实例,查看 jenkinsURL 参数,并检查最新构建是否成功。

    #!/usr/bin/python
    #
    # author: ajs
    # license: bsd
    # copyright: re2
    
    
    import json 
    import sys
    import urllib2
    
    jenkinsUrl = "https://jenkins.example.com/job/"
    
    
    if len( sys.argv ) > 1 :
        jobName = sys.argv[1]
    else :
        sys.exit(1)
    
    try:
        jenkinsStream   = urllib2.urlopen( jenkinsUrl + jobName + "/lastBuild/api/json" )
    except urllib2.HTTPError, e:
        print "URL Error: " + str(e.code) 
        print "      (job name [" + jobName + "] probably wrong)"
        sys.exit(2)
    
    try:
        buildStatusJson = json.load( jenkinsStream )
    except:
        print "Failed to parse json"
        sys.exit(3)
    
    if buildStatusJson.has_key( "result" ):      
        print "[" + jobName + "] build status: " + buildStatusJson["result"]
        if buildStatusJson["result"] != "SUCCESS" :
            exit(4)
    else:
        sys.exit(5)
    
    sys.exit(0)
    

    【讨论】:

    • 这可能是一个解决方案,但我使用 Github Oauth 插件,如果我未经授权,它会将我重定向到 github 页面此外,我们的公司标准不允许在部署服务器上建立 ssh 连接......所以我把docker 容器中的 Jenkins 也运行s on the same deploy server in --privileged` 模式,以便能够在 docker 中运行 docker。来自 Jenkins 的代码通过 ssh 部署在主机上