访问上一次运行相同作业的工件

时间:2018-01-31 11:19:17

标签: gitlab gitlab-ci

我想使用Gitlab CI / CD进行部署。相同的代码库用于部署到不同的环境,需要 statefile (环境状态)进行部署,需要在部署后进行更新,并在部署之前获取。因为它是一个重要的信息,我希望它是一个构建工件。

考虑我的部署管道和不同的工作deploy-env1deploy-env2。是否可以以他们

的方式定义作业
  • 将文件state.dat添加为构建工件(使用artifacts选项轻松实现)
  • 从最新版本的statefile开始(上一次成功运行当前分支上的相同作业)
  • 如果之前没有成功运行,则以空文件开头

由于我似乎无法将作业配置为依赖,您知道是否有办法实现这一目标?

3 个答案:

答案 0 :(得分:2)

没有实现的功能来处理这个问题。

但是有一个可能的解决方法,我还没有尝试过,还有第三方解决方案。

解决方法: 您可以自己构建一个脚本,使用Gitlab Jobs API下载分支的最新工件。 Example in the Gitlab docs

另一种解决方法: 除了使用API​​下载之外,您还可以使用工件和cache objects

的组合

干净的解决方案: 将设置一个Gitlab不提供的工件服务。您可以在那里部署文件,然后再从同一服务中检索。此类计划为ArtifactoryNexus

答案 1 :(得分:2)

您应该考虑使用依赖项和工件:https://docs.gitlab.com/ee/ci/yaml/#dependencies

def build_response(message):
    return {
        "dialogAction":{
            "type":"Close",
            "fulfillmentState":"Fulfilled",
            "message":{
                "contentType":"PlainText",
                "content":message
            }
        }
    }

def elicit_slot(intent_name, slots, slot_to_elicit, message):
    return {
        'dialogAction': {
            'type': 'ElicitSlot',
            'intentName': intent_name,
            'slots': slots,
            'slotToElicit': slot_to_elicit,
            'message': message
        }
    }

def delegate(session_attributes, slots):
    return {
        'sessionAttributes': session_attributes,
        'dialogAction': {
            'type': 'Delegate',
            'slots': slots
        }
    }

def perform_action(intent_request):
    source = intent_request['invocationSource']   # DialogCodeHook or FulfillmentCodeHook
    slots = intent_request['currentIntent']['slots']  # your slots city and country
    if source == 'DialogCodeHook':
        # Perform basic validation on the supplied input slots.
        if slots['city'] is None:  # or any other validation that you want to perform
            return elicit_slot(
                intent_request['currentIntent']['name'], # current intent name
                slots, # current intent slots
                'city',  # slot name
                'Please enter city name'  # prompt the user to enter city name
            )
        if slots['country'] is None:
            return elicit_slot(
                intent_request['currentIntent']['name'], # current intent name
                slots, # current intent slots
                'country',  # slot name
                'Please enter country name' # prompt the user to enter country name
            )
        # delegate means all slot validation are done, we can move to Fulfillment
        return delegate(output_session_attributes, slots) 
    if source == 'FulfillmentCodeHook':
        result = your_api_call(slots['city'], slots['country'])
        return build_response(result)  # display the response back to user

def dispatch(intent_request):
    intent_name = intent_request['currentIntent']['name']
    # Dispatch to your bot's intent handlers
    if intent_name == 'GetWeather':
        return perform_action(intent_request)
    raise Exception('Intent with name ' + intent_name + ' not supported')

def lambda_handler(event, context):
    logger.debug(event)
    return dispatch(event)

答案 2 :(得分:1)

您可以直接通过URL

下载,而不是使用作业api