I am struggling to automatically deploy new Flink jobs within our CI/CD workflows by using the Flink rest-api (which may be found here in the flink Github repository).
I've run into the same issue and solved it by looking at the network request in chrome when uploading a jar with the web UI.
The request must
Here is a python script using requests that does the upload
upload = requests.post(
base_url + "/jars/upload",
files={
"jarfile": (
os.path.basename(path),
open(path, "rb"),
"application/x-java-archive"
)
}
)
For those who want a java solution can use:
CloseableHttpClient client = HttpClients.createDefault();
HttpPost httpPost = new HttpPost("YOUR API URL");
MultipartEntityBuilder builder = MultipartEntityBuilder.create();
builder.addBinaryBody("jarfile", new File("jarr.jar"));
HttpEntity multipart = builder.build();
httpPost.setEntity(multipart);
try{
CloseableHttpResponse response = client.execute(httpPost);
System.out.println(response);
BufferedReader rd = new BufferedReader(new InputStreamReader(
response.getEntity().getContent()));
String line = "";
while ((line = rd.readLine()) != null) {
System.out.println(line);
}
}
catch (Exception e){
e.printStackTrace();
}
Those who are more partial to a command line can use curl:
curl -X POST -H "Expect:" -F "jarfile=@path/to/flink-job.jar" http://hostname:8081/jars/upload